如何在当前行的开头显示垂直规则?

时间:2010-08-27 21:12:48

标签: python vim indentation highlighting

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

5 个答案:

答案 0 :(得分:5)

您可以简单地模拟缩进指南。在我看来,它更简单,更有效。请查看我的answer question about indentation guides

答案 1 :(得分:1)

首先想到的是,您可以从实现code folding的插件中受益。

这是tutorial with examples(向下滚动到“代码折叠”),建议使用"Efficient python folding" plugin for vim

screenshot http://dancingpenguinsoflight.com/wp-content/uploads/2009/02/folded_functions.png

答案 2 :(得分:0)

在vim中(不需要插件):

:设置列表

默认情况下会将标签显示为“^ I”,将EOL显示为“$”。

:设置lcs = tab:>>

你要将'^ I'设置为'>' (详见:帮助列表)。

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

你也可以设置

:设置自动加入

for python

答案 3 :(得分: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")

当我第一次把它放在一起时,我觉得它很傻,但只是玩了几分钟,我就像效果一样。

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

答案 4 :(得分: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