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

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 代码都是用空格缩进的,所以设置 listlcs 不会显示任何内容。 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 &colorcolumnset 命令不计算表达式。 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 自定义甘特图并在图表上显示指示当前时间的垂直线?

Android中TextView如何实现水平和垂直滚动

将光标移动到当前行的开头

如何在 Eclipse 的代码辅助弹出窗口中更改当前选定行的颜色?

带有垂直行的 HTML 表格

如何使用VueJS在模态中复制当前行的数据?