2010-08-27 67 views
4

我正在寻找一种方法在vim中轻松地可视化python代码的各种缩进级别。如果在当前行的开始处总是有垂直的规则,这将有所帮助。这样我可以扫描代码来查看当前块的结束位置。有没有插件可以做到这一点?如何在当前行的开头显示垂直规则?

回答

0

在vim(无需插件):

:设置列表

会默认显示标签为 '^ I' 和EOL为 '$'。

:集LCS =标签:>>

您设置了 '^ I' 到 '>'(更多的是通过:帮助listchars)。

我不确定,但应该有另一个选项来设置标签宽度。

你也可以设置

:设置自动缩进

的蟒蛇

+0

建议使用4个空格缩进Python,而不是使用制表符。 – ZyX 2010-08-27 21:56:43

+0

@abhijit:你能做到什么ZYX被提到: :设置shiftwidth的= 4 :设置自动缩进 使用CTRL + T在插入模式 – mathume 2010-08-27 22:12:45

+1

这是有关的事实,大多数的Python代码缩进用空格,所以设置'list'和'lcs'不会显示任何内容。 'expandtab'对python可能更好。 – ZyX 2010-08-27 22:20:02

0

我认为你正在寻找的命令是“colorcolumn”,这是新的Vim的7.2或7.3,我认为。

你也许可以一起想了自动命令触发CursorMoved

autocmd CursorMovedI * set colorcolumn=match(getline("."),"\S") 

你可能会玩这个,使用中间变量和这样的。

这将做什么(如果正确地埋藏在一个函数内),在当前行的起始字符处放置一条垂直线。这可能是方便的,但应该只能放在一个切换。

编辑:这原来比我想象的要复杂一点。基本上,你必须消除文字标签的影响(如果他们在你的文件显示)

autocmd CursorMoved * let &colorcolumn=matchend(substitute(getline("."),'\t',repeat(" ",&ts),'g'),"\\S") 

当我第一次把这个一起我sortof认为这是愚蠢的,但只玩了几分钟,我喜欢这个效果。

请注意,您可能需要也可能不需要CursorMovedI版本。

+2

您至少有两个错误:1.用'let&colorcolumn'替换'set colorcolumn':'set'命令不计算表达式。 2.在match()的第二个参数中退出反斜杠(或者用单引号替换双引号)。 – ZyX 2010-08-27 22:17:25

+0

你是非常正确的... – jkerian 2010-08-27 22:32:39

0

您可以为它定义自己的语法项目(或使用匹配项)。快速而肮脏的解决方案:

let colors=["red", "white", "yellow", "green", "blue"] 
let matchids=[] 
for level in range(1, len(colors)) 
    execute "hi IndentLevel".level." ctermbg=".colors[level-1]." guibg=".colors[level-1] 
    call add(matchids, matchadd('IndentLevel'.level, '^ '.repeat(' ', level-1).'\zs ')) 
endfor 

这将突出显示不同的颜色五个第一缩进层次。

要禁用:

while !empty(matchids) 
    call matchdelete(remove(matchids, 0)) 
endwhile