Vim 设置 listchars 仅显示不可破坏的空格,而不显示制表符

Vim 设置 listchars 仅显示不可破坏的空格,而不显示制表符

在 中vim,我想设置nbsp!·。但我不关心选项卡。

在我的.vimrc,我有:

 set listchars=nbsp:·
 set list

但是,当我打开 vim 会话时,我仍然看到选项卡显示为^I

跑步

:set listchars=eol:$,tab:>-,trail:~,extends:>,precedes:<

...它执行时没有错误,我可以看到更改。

如果我跑

:set listchars=nbsp:!,tab:>

或者

:set listchars=nbsp:!,tab:

我明白了

E474: Argument invalide: listchars=nbsp:!,tab:>

这里发生了什么?我该如何设置listchars让 vim 不突出显示 tab 和只突出显示nbsp

跑步VIM - Vi IMproved 7.4

答案1

问题是,^IVim 的方式是不是显示 Tab 字符,因为必要的 Tab 与 a 一样存储在文件中,Ctrl+I并且^I是 Vim 表示 Ctrl 字符符号的方式。

如果您希望 Tab 在使用时仅显示为空格:set list,则应将其设置为在下面执行此操作'listchars'(请注意,您需要两个空格,因为该tab:项目需要两个或三个字符。)当然,有一个技巧可以做到这一点,因为空格通常是:set命令的分隔符,因此您需要使用反斜杠对其进行转义。

这将起作用:

set listchars=tab:\ \ ,nbsp:·

tab:\ \您也可以在选项末尾添加 the ,但是尾随空格可能看起来有点尴尬。

另一个选项是使用访问选项值的语法来:let设置它:&

let &listchars = 'tab:  ,nbsp:·'

第二种方法的一个优点是,您还可以对字符串中的特殊字符使用字符串转义序列,例如用于 nbsp 的中间点:

let &listchars = "tab:  ,nbsp:\xb7"

(如果您希望仅使用简单的基本 ASCII 字符保留 vimrc 或其片段,例如,当您在使用复制和粘贴将这些片段传输到其他系统时担心保留格式和空格时,这可能是一个优势如今,在大多数情况下,通过远程连接并不是什么大不了的事,但我想我还是要提一下。)

相关内容