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

Jul*_*che 5 vim

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

\n

在我的.vimrc,我有:

\n
 set listchars=nbsp:\xc2\xb7\n set list\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

跑步

\n
:set listchars=eol:$,tab:>-,trail:~,extends:>,precedes:<\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

如果我跑

\n
:set listchars=nbsp:!,tab:>\n
Run Code Online (Sandbox Code Playgroud)\n

或者

\n
:set listchars=nbsp:!,tab:\n
Run Code Online (Sandbox Code Playgroud)\n

我明白了

\n
E474: Argument invalide: listchars=nbsp:!,tab:>\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

跑步VIM - Vi IMproved 7.4

\n

fil*_*den 7

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

\n

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

\n

这将起作用:

\n
set listchars=tab:\\ \\ ,nbsp:\xc2\xb7\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

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

\n
let &listchars = 'tab:  ,nbsp:\xc2\xb7'\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
let &listchars = "tab:  ,nbsp:\\xb7"\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n