让Vim(gVim)更好的支持python语法缩进(强烈推荐)
python逐渐成为笔者最常用的语言之一,因此vim对python有些配置的不合理也渐渐显现出来,这次我们先来解决python的缩进问题。
我们来通过例子来说明,来看一下默认配置下python的缩进情况:
1.dict的语法缩进
1 2 3 4 |
val1 = { 1:"1", 2:"2" } |
2.list的语法缩进
1 2 3 4 5 |
val2 = [ 1, 2, 3 ] |
3.tuple的语法缩进
1 2 3 4 5 |
val3 = ( 1, 2, 3 ) |
4.函数多行参数的缩进
1 2 3 4 5 |
def fun( a, b ): print a,b |
5.复杂dict中存在):的情况
1 2 3 4 5 6 |
val4 = { ( 1, 2 ):1 } |
很遗憾的发现,这几种常用的写法,默认python缩进都没有完美实现,那么是否有办法优化呢?
答案是有的,vim.org上提供了一款更好的python缩进插件:
http://www.vim.org/scripts/script.php?script_id=974
我们来依次对照一下上面的代码,看新的缩进插件效果怎样:
1.dict的语法缩进
1 2 3 4 |
val1 = { 1:"1", 2:"2" } |
2.list的语法缩进
1 2 3 4 5 |
val2 = [ 1, 2, 3 ] |
3.tuple的语法缩进
1 2 3 4 5 |
val3 = ( 1, 2, 3 ) |
4.函数多行参数的缩进
1 2 3 4 5 |
def fun( a, b ): print a,b |
5.复杂dict中存在):的情况
1 2 3 4 5 6 |
val4 = { ( 1, 2 ):1 } |
除了第4条依然表现诡异,其他的缩进应该是比较完美了~
OK,重头戏来了,我们去看源码:
对第117行作出如下修改:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
"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条的缩进如何:
1 2 3 4 5 |
def fun( a, b ): print a,b |
perfect!,哈哈
来说一下修改的方法,简单来说就是判断一下当前行是否为 ):,并且其所对应的(所在的行上是否有 def 关键字,如果同时满足这两个条件,则在(所在行的缩进基础上,再向前缩进一个tab。
提供修改之后的下载链接如下:
http://www.vim.org/scripts/script.php?script_id=3461
OK,就到这里,用vim写python的朋友们,快去试试吧!
建议继续学习:
- vim几个小技巧(批量替换,列编辑) (阅读:35698)
- 简明Vim练级攻略 (阅读:20528)
- Vim下的代码自动补全和代码跳转阅读 (阅读:14216)
- 为什么要用 Emacs/Vim,而不是任何其他编辑器 (阅读:12026)
- 在vim(gvim)中运行终端(对,你没有看错,我也没有写反) (阅读:9287)
- vim入门,进阶与折腾 (阅读:9028)
- 让vim在终端下的配色亮起来! (阅读:8530)
- 最近总结的一些技巧(vim,python,svn,fiddler等) (阅读:6931)
- vim的复制粘贴小结 (阅读:6392)
- Vim 中截取部分内容保存到其他文件 (阅读:6275)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:Dante 来源: Vimer
- 标签: Vim 缩进
- 发布时间:2011-03-07 22:58:38
- [12] 手机客户端交互适配设计之我见
- [11] 产品设计之QQ邮箱登录页与淘宝登录页
- [10] 一个 VLA (可变长度数组)的实现
- [10] PDC 2010:C#与Visual Bas
- [10] Python连接 MySQL 数据库的超时问
- [10] 谈谈Facebook的聊天系统架构
- [9] 长假,回忆小时候的家庭教育点滴
- [9] Oracle bbed工具的编译
- [9] 四年前的今天,我开始找工作
- [9] 一句话crontab实现防ssh暴力破解