7

让Vim(gVim)更好的支持python语法缩进(强烈推荐)

 3 years ago
source link: https://blogread.cn/it/article/3421?f=hot1
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

让Vim(gVim)更好的支持python语法缩进(强烈推荐)

浏览:5739次  出处信息

    python逐渐成为笔者最常用的语言之一,因此vim对python有些配置的不合理也渐渐显现出来,这次我们先来解决python的缩进问题。

     我们来通过例子来说明,来看一下默认配置下python的缩进情况:

     1.dict的语法缩进

val1 = {
        1:"1",
        2:"2"
        }

    2.list的语法缩进

val2 = [
        1,
        2,
        3
        ]

    3.tuple的语法缩进

val3 = (
        1,
        2,
        3
        )

    4.函数多行参数的缩进

def fun(
        a,
        b
        ):
    print a,b

    5.复杂dict中存在):的情况

val4 = {
        (
            1,
            2
            ):1
        }

    很遗憾的发现,这几种常用的写法,默认python缩进都没有完美实现,那么是否有办法优化呢?

     答案是有的,vim.org上提供了一款更好的python缩进插件:

     http://www.vim.org/scripts/script.php?script_id=974

     我们来依次对照一下上面的代码,看新的缩进插件效果怎样:

    1.dict的语法缩进

val1 = {
    1:"1",
    2:"2"
}

    2.list的语法缩进

val2 = [
    1,
    2,
    3
]

    3.tuple的语法缩进

val3 = (
    1,
    2,
    3
)

    4.函数多行参数的缩进

def fun(
    a,
    b
):
    print a,b

    5.复杂dict中存在):的情况

val4 = {
    (
        1,
        2
    ):1
}

    除了第4条依然表现诡异,其他的缩进应该是比较完美了~

     OK,重头戏来了,我们去看源码:

     对第117行作出如下修改:

"Mod-Begin by dantezhu in 2011-02-21 23:38:24
"FROM
"return indent(parlnum)
"TO
"为了支持如下的格式:
"def fun(
"    a,
"    b
"    ):
"    print a,b
"又不影响如下格式:
"val = {
"    (
"        1,
"        2
"    ):1
"}
if match(getline(a:lnum), \')\\s*:\') != -1 && match(getline(parlnum), \'def\\s\\+\') != -1
    return indent(parlnum) + &shiftwidth
else
    return indent(parlnum)
endif
"Mod-End

    OK,再来试一下对第4条的缩进如何:

def fun(
    a,
    b
    ):
    print a,b

    perfect!,哈哈

    来说一下修改的方法,简单来说就是判断一下当前行是否为 ):,并且其所对应的(所在的行上是否有 def 关键字,如果同时满足这两个条件,则在(所在行的缩进基础上,再向前缩进一个tab。

    提供修改之后的下载链接如下:

     http://www.vim.org/scripts/script.php?script_id=3461

    OK,就到这里,用vim写python的朋友们,快去试试吧!

觉得文章有用?立即:

和朋友一起 共学习 共进步!

建议继续学习:

QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK