让制表符的外观不同于单纯的空白

9 投票
6 回答
549 浏览
提问于 2025-04-15 13:13

如何让vim中的制表符看起来和空格不一样(比如高亮显示)。

这对写Python代码会很有帮助。

6 个回答

5

使用 listlistchars 这两个选项,像这样:

:set list
:set listchars=tab:>-
7

很多人提到了 'listchars' 和 'list' 这两个选项,但我想再分享一个有趣的替代方案:

if &expandtab == 0
    execute 'syn match MixedIndentationError display "^\([\t]*\)\@<=\( \{'.&ts.'}\)\+"'
else
    execute 'syn match MixedIndentationError display "^\(\( \{' . &ts . '}\)*\)\@<=\t\+"'
endif
hi link MixedIndentationError Error

这个设置会查看你当前的 'expandtab' 配置(也就是你是用硬制表符还是用空格来模拟制表符),然后会高亮显示那些看起来像是正确缩进但实际上格式不对的地方。它的工作原理是通过查看制表符的位置,所以如果你用制表符来缩进,后面跟着的空格用于简单对齐(而且这些空格不是 'tabstop' 的倍数),就不会被标记为错误。

还有更简单的选项:如果你只想把错误文件中的制表符高亮显示为鲜红色(或者你设置的错误颜色),可以这样做:

syn match TabShouldNotBeThereError display "\t"
hi link TabShouldNotBeThereError Error

或者如果你想把行首的空格视为错误,可以这样设置:

syn match SpacesUsedForIndentationError display "^ +"
hi link SpacesUsedForIndentationError Error

再补充一些想法……更多信息可以在这里找到:

:help 'expandtab'
:help 'tabstop'
:help 'listchars'
:help 'list'
:help :exe
:help let-option
:help :hi-link
:help :syn-match
:help :syn-display
16

我用的是这样的东西:

set list listchars=tab:»·,trail:·,precedes:…,extends:…,nbsp:‗

这个需要 Vim7,我不太确定在浏览器里显示得怎么样,因为它用了些奇怪的 Unicode 字符。使用一些特别的字符是个好主意,这样你就能分辨出制表符和你自己输入的内容。

除了显示制表符,显示行末的空格也很有用,这样你就知道要把它们去掉(这些空格很烦人)。

撰写回答