如何在当前行的开头显示垂直规则?
Posted
技术标签:
【中文标题】如何在当前行的开头显示垂直规则?【英文标题】:How to show a vertical rule at the beginning of the current line? 【发布时间】:2011-04-05 00:40:34 【问题描述】:我正在寻找一种在 vim 中轻松可视化 python 代码的各种缩进级别的方法。如果在当前行的开头总是有一条垂直规则会有所帮助。这样我就可以扫描代码以查看当前块的结束位置。是否有任何插件可以做到这一点?
【问题讨论】:
【参考方案1】:首先想到的是,您可以从实现code folding 的插件中受益。
这是推荐使用"Efficient python folding" plugin for vim 的tutorial with examples(向下滚动到“代码折叠”)。
(来源:dancingpenguinsoflight.com)
【讨论】:
【参考方案2】:在 vim 中(不需要插件):
:设置列表
默认情况下将标签显示为“^I”,EOL 显示为“$”。
与
:set lcs=tab:>>
您将 '^I' 设置为 '>'(请参阅 :help listchars 了解更多信息)。
我不确定,但应该有另一个选项来设置标签宽度。
你也可以设置
:设置自动缩进
对于蟒蛇
【讨论】:
建议 Python 缩进 4 个空格,而不是制表符。 @abhijit: 你可以完成 ZyX 提到的: :set shiftwidth=4 :set autoindent use CTRL+T in insert mode 这是因为大多数 Python 代码都是用空格缩进的,所以设置list
和 lcs
不会显示任何内容。 expandtab
可能更适合 python。【参考方案3】:
我认为您要查找的命令是“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 版本。
【讨论】:
您至少有两个错误:1. 将set colorcolumn
替换为let &colorcolumn
:set
命令不计算表达式。 2. match() 的第二个参数中的反斜杠转义(或将双引号替换为单引号)。【参考方案4】:
您可以为它定义自己的语法项(或使用匹配项)。快速而肮脏的解决方案:
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
【讨论】:
【参考方案5】:您可以简单地模拟缩进指南。在我看来,它更简单,更有效。请看一下我的answer 到question about indentation guides。
【讨论】:
以上是关于如何在当前行的开头显示垂直规则?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 matplotlib 自定义甘特图并在图表上显示指示当前时间的垂直线?