使Vim将所有空格显示为字符

我找不到让Vim将所有空格显示为字符的方法。所有我找到的是标签,尾随空格等。

762801 次浏览

:set list将所有空格显示为字符。空格的所有内容看起来都与正常状态不同,这意味着如果您仍然看到一个普通的旧空格,它实际上是一个普通的旧空格。:)

你可以用

:set list

真正看到一行的结构。您将显式看到制表符和换行符。当您看到空白时,它实际上是空白。

正如其他人所说,你可以使用

:set list

这将与

:set listchars=...

显示不可见字符。
现在,没有可以用于节目空格的显式选项,但是在listchars中,您可以设置一个字符来显示除空格之外的所有内容。例如,我的看起来像这样

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

所以,现在,在你使用

:set list

所有没有明确显示为其他东西的东西,实际上都是一个普通的旧空白。

像往常一样,要了解listchars的工作原理,请使用帮助。它提供了有关可以显示哪些字符(例如尾随空格)以及如何显示的大量信息:

:help listchars

添加一个切换可能会有所帮助,这样您就可以轻松地看到编辑过程中的更改(来源:VIM:设置列表!作为切换. vimrc):

noremap <F5> :set list!<CR>inoremap <F5> <C-o>:set list!<CR>cnoremap <F5> <C-c>:set list!<CR>

如果您设置:

:highlight Search cterm=underline gui=underline ctermbg=none guibg=none ctermfg=none guifg=none

然后执行空格搜索,每个空格字符都将显示为下划线字符。

您可以在一个方便的函数中使用此命令,该函数可以切换空格的“下划线”。

set hlslet g:HLSpace = 1let g:HLColorScheme = g:colors_namefunction ToggleSpaceUnderscoring()if g:HLSpacehighlight Search cterm=underline gui=underline ctermbg=none guibg=none ctermfg=none guifg=nonelet @/ = " "elsehighlight clearsilent colorscheme "".g:HLColorSchemelet @/ = ""endiflet g:HLSpace = !g:HLSpaceendfunction

将函数映射到快捷键:

nmap <silent> <F3> <Esc>:call ToggleSpaceUnderscoring()<CR>

NB:设置配色方案后在vimrc中定义函数。

:set list启用。

:set nolist禁用。

如果你所说的空格是指''字符,我的建议只是搜索/替换。正如其他人暗示的那样,set list非印刷个字符更改为listchars中配置的可见字符。

要将空格显式显示为其他字符,应该使用类似于下面的方法:

:%s/ /█/g

然后只需撤消更改即可再次返回。

(为了得到它,我按了这个确切的按键顺序::%// //CTRL-KFB//%0)

:match CursorLine /\s\+/

避免了“你必须搜索空格才能让它们显示出来”这一点,但afaitch不能配置为对空格执行非hilighting操作。CursorLine可以是任何hilighting组,在默认主题中它是一个普通的下划线。

根据当前缓冲区的语法规则,这样的方法可以工作:

:syn match WhiteSpace / / containedin=ALL conceal cchar=Æ:setl conceallevel=2 concealcursor=nv

这需要一个带有+隐藏功能的vim 7.3

更新10/24/2014要对此展开一点。当然可以为锥形字符定义一些突出显示。

  • 您可以配置隐藏字符的外观。要突出显示,您必须至少配置一次'隐藏'突出显示组(请参阅:h hl-Conceal的帮助这可以在您的配色方案中完成,然后您不需要再次重新配置它。但这会影响所有隐藏的字符(例如,如果您的语法脚本隐藏了更多项目,它们将显示为您的空格字符)。可能如下所示:

    :hi Conceal ctermfg=7 ctermbg=NONE guifg=LightGrey guibg=NONE

  • 如果语法脚本使用skipwhite关键字,Vim似乎有一个特殊性,不会突出显示空格。没有办法(也许这会被修复,我发布了一个这一个。(这意味着,您需要构建自己的Vim才能使用它)。

  • conceallevelconcealcursor是窗口本地选项。这意味着它们在不同的窗口中可能不同(也可能由文件类型插件或其他插件脚本设置)。
  • 每当重新加载语法定义文件时,都需要执行语法高亮显示组。这可以使用BufWinEnterSyntax甚至FileType自动命令来完成。(我还没有测试哪个真正有效)。

最后两项意味着,你必须设置一些重置语法规则和相关选项的自动命令。对于第一个,人们可能希望使用ColorScheme自动命令设置高亮(这样隐藏的字符总是看起来相同,与配色的实际设置无关)。对于一个完整的解决方案,查看romain l的答案,这应该会给你一个开始。如果你设置一个函数,你可以轻松设置一个切换命令来切换显示特殊的高亮。

更新10/26/2014我从这个问题中得到了一个插件

更新04/22/2015 Vim中包含了一个补丁,使用list选项可以实现这一点。只需设置set list listchars+=space:␣vim 7.4.711

我用这个

/\s:set hlsearch

突出显示空格。它搜索所有空格,然后启用突出显示使它们弹出。但是,它确实没有打印一个特殊字符。

我对这个问题的所有其他答案都感到沮丧,因为它们都没有以有用的方式突出空格字符。将空格显示为字符特别有助于空白格式的语言,其中混合制表符和空格是有害的。

我的解决方案是显示制表符并在多个空格下划线。它借鉴了mrucci的回答本教程。因为它使用语法高亮,所以它是持久的:

set list listchars=tab:\|\highlight Whitespace cterm=underline gui=underline ctermbg=NONE guibg=NONE ctermfg=yellow guifg=yellowautocmd ColorScheme * highlight Whitespace gui=underline ctermbg=NONE guibg=NONE ctermfg=yellow guifg=yellowmatch Whitespace /  \+/

使用它,选项卡显示为|,空格显示为_,这使得我在混合代码样式时很容易判断。

我发现的唯一缺点是这个片段没有调整背景颜色以匹配上下文(如注释)。

要突出显示空格,只需搜索它:

/

备注:

  • 表示只键入空格字符。
  • 启用突出显示搜索结果:设置hlsearch

    要突出显示空格和制表符:

    /[]

    删除高亮的快速方法是搜索其他任何内容:/asdf

    (只需键入任何随机字符的短列表)

  • :se list:se nolist

    :se就够了,:set就不需要了。

    您还可以突出显示空格(用块替换空格):

    :%s/ /█/g

    (在写之前撤销它)

    我认为这里的其他答案更全面,但我想分享一个我通常用来在视觉上区分制表符和空格的技巧:

    :syntax on:set syntax=whitespace

    这些是空白编程语言的语法高亮规则-选项卡以绿色显示,空格以红色显示。:)

    可以与许多其他答案提到的:set list组合,尽管制表符将显示为^I而没有绿色的higlight,但空格将显示为红色。

    上面的所有答案都试图让vim内的空间可见。如果你真的坚持把可见空间作为点,还有另一种方法…

    如果不能在vim中完成,请完全更改您的字体。我复制了Ubuntu One Mono字体并使用FontForge对其进行了编辑。请记住更改字体的全名、家族、首选家族、兼容完整(在FontFoge中,它在字体信息的TTF名称下),以便将其作为单独的字体。只需编辑空格字符,在中间有一个点,并将字体保存到~/. fonts现在您可以将其用于您的gvim或整个终端…我复制了“!”字符,删除了该行,并将圆点移到中间。花了5分多钟……

    注意:更改空格字符(0x20)会导致整个vim屏幕上有点的不便…(但它会将空格与制表符分开…)

    我喜欢使用特殊字符来显示空格,更清晰。即使是切换地图也是一个关键功能,用于快速检查。

    您可以在自2004年以来未更新的旧vim脚本中找到此功能:

    vim脚本/cream-showinvisibles@vim.org

    感谢项目vim脚本组件vundle,你可以回到生活这个插件

    vim脚本/cream-showinvisibles@github

    更好的是,我的两分钱是添加一个可配置快捷方式(而不是预定义的F4

    所以把它添加到~/. vimrc

    Plugin 'albfan/cream-invisibles'
    let g:creamInvisibleShortCut = "<F5>" "for my F4 goto next error

    在vim上安装插件

    :PluginInstall

    然后你就走了

    下面的代码是基于克里斯蒂安·布拉班特的回答,似乎做了OP想要的:

    function! Whitespace()if !exists('b:ws')highlight Conceal ctermbg=NONE ctermfg=240 cterm=NONE guibg=NONE guifg=#585858 gui=NONEhighlight link Whitespace Conceallet b:ws = 1endif
    syntax clear Whitespacesyntax match Whitespace / / containedin=ALL conceal cchar=·setlocal conceallevel=2 concealcursor=cendfunction
    augroup Whitespaceautocmd!autocmd BufEnter,WinEnter * call Whitespace()augroup END

    将这些行附加到您的~/.vimrc并启动一个新的Vim会话以查看仍然不完美魔术发生。

    随意编辑默认颜色和隐藏字符。


    警告:几种语言的*FuncBody语法组中的某些内容会阻止中间点显示。我不知道(还不知道?)如何使该解决方案更可靠。

    将此添加到我的. vimrc对我有用。只要确保你没有任何其他冲突…

    autocmd VimEnter * :syn match space /\s/autocmd VimEnter * :hi space ctermbg=lightgray ctermfg=black guibg=lightgray guifg=black

    高亮搜索

    :set hlsearch

    .vimrc这是

    并搜索空格选项卡和回车

    / \|\t\|\r

    或搜索所有空白字符

    /\s

    搜索所有非空白字符(未显示空白字符,因此您可以看到单词之间的空白字符,但看不到尾随的空白字符)

    /\S

    显示所有尾随空格字符-在行尾

    /\s$

    从补丁7.4.710开始,您现在可以使用listchars设置一个字符来代替空格显示!

    :set listchars+=space:␣

    因此,要将所有空格字符显示为字符,您可以执行以下操作:

    :set listchars=eol:¬,tab:>·,trail:~,extends:>,precedes:<,space:␣:set list

    完成后,要隐藏不可见的字符,您将:

    :set nolist

    关于邮件列表的讨论:https://groups.google.com/forum/?fromgroups#!主题/vim_dev/pjmW6wOZW_Q

    我没有从现有的答案中找到我想要的确切内容。下面的代码将突出显示所有尾随空格亮红色。只需将以下内容添加到您的.vimrc

    highlight ExtraWhitespace ctermbg=red guibg=redmatch ExtraWhitespace /\s\+$/autocmd BufWinEnter * match ExtraWhitespace /\s\+$/autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/autocmd InsertLeave * match ExtraWhitespace /\s\+$/autocmd BufWinLeave * call clearmatches()

    要覆盖Unicode空白字符:

    set listset listchars=tab:│\ ,nbsp:·highlight StrangeWhitespace guibg=Red ctermbg=Red" The list is from https://stackoverflow.com/a/37903645 (with `\t`, `\n`, ` `, `\xa0` removed):call matchadd('StrangeWhitespace', '[\x0b\x0c\r\x1c\x1d\x1e\x1f\x85\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000]')

    结果:

    • 只有序数空间(U+0020)看起来像序数空间(“ ”)。
    • 制表符(U+0009)看起来像“│ ”(两个字符:一个长管道和一个序数空格;它们在colorscheme murphy中是灰色的)。
    • 不间断空格(U+00A0)看起来像“·”(一个字符;它在colorscheme murphy中是灰色的)。
    • 任何其他空格字符看起来都像一个红色空格(“ ”)。

    在. vimrc中保留这些黑客作为注释,因此在shell中,只需:

    echo '" how-to see the non-visible while spaces" :set listchars=eol:¬,tab:>·,trail:~,extends:>,precedes:<,space:␣" set listchars=eol:$,tab:>-,trail:~,extends:>,precedes:<" :set list" but hei how-to unset the visible tabs ?!" :set nolist' >> ~/.vimrc