如何在当前行开头显示一条垂直线?

4

我想在vim中找到一种方便地可视化Python代码各个缩进级别的方法。如果当前行开头始终有一个垂直标尺,这将非常有帮助。这样我就可以浏览代码,看看当前块在哪里结束。是否有任何插件可以实现这一点?

5个回答

5

1

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

0

在vim中(无需插件):

:set list

默认情况下,将显示制表符为'^I'和EOL为'$'。

使用

:set lcs=tab:>>

您可以将'^I'设置为'>'(有关更多信息,请参见:help listchars)。

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

此外,您可以设置

:set autoindent

对于Python。


建议使用4个空格缩进Python代码,而不是使用制表符。 - ZyX
@abhijit:你可以通过以下方式实现ZyX提到的功能::set shiftwidth=4 :set autoindent在插入模式下使用CTRL+T - mathume
1
这是关于Python代码大部分都使用空格缩进的事实,因此设置listlcs将不会显示任何内容。而对于Python来说,expandtab可能更好。 - ZyX

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版本。


2
你至少有两个错误:1.将"set colorcolumn"替换为"let &colorcolumn": "set"命令不能评估表达式。2.在match()的第二个参数中转义反斜杠(或者用单引号替换双引号)。 - ZyX

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接