让Vim显示所有的空格作为一个字符

我找不到让Vim显示所有空白字符的方法。 我发现的只是关于标签,拖尾空间等

正如别人所说,你可以使用

 :set list 

这将结合

 :set listchars=... 

显示不可见的字符。
现在,没有一个明确的选项可以用来显示空白,但是在listchars中,你可以设置一个字符来显示所有的东西,但是空白。 例如,我的看起来像这样

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

所以,现在,在你使用之后

 :set list 

那些没有明确表示为其他东西的东西,确实是一个普通的旧空白。

像往常一样,要了解listchars是如何工作的,请使用帮助。 它提供了关于可以显示哪些字符的很好的信息(比如尾部空格)以及如何执行:

 :help listchars 

:set list启用。

:set nolist禁用。

从修补程序7.4.710开始,您现在可以设置一个字符来代替使用listchars的空间!

 :set listchars+=space:␣ 

所以,要显示所有的空白字符作为一个字符,你可以执行以下操作:

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

讨论邮件列表: https : //groups.google.com/forum/?fromgroups#!topic/ vim_dev/ pjmW6wOZW_Q

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

 :syntax on :set syntax=whitespace 

这些是Whitespace编程语言的语法高亮规则 – 选项卡显示为绿色,空格显示为红色。 🙂

可以与其他许多答案中提到的:set list一起使用,尽pipe选项卡将显示为^ I而没有绿色的光芒,但空格将显示为红色。

如果你设置:

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

然后执行search空间,每个空格字符将显示为下划线字符。

你可以在一个方便的函数中使用这个命令来切换空格的“underscoring”。

 set hls let g:HLSpace = 1 let g:HLColorScheme = g:colors_name function ToggleSpaceUnderscoring() if g:HLSpace highlight Search cterm=underline gui=underline ctermbg=none guibg=none ctermfg=none guifg=none let @/ = " " else highlight clear silent colorscheme "".g:HLColorScheme let @/ = "" endif let g:HLSpace = !g:HLSpace endfunction 

将该function映射到快捷键:

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

注意:在colorcheme设置后,在vimrc中定义函数。

:set list将显示所有的空格作为一个字符。 除了空间之外,其他的东西看起来都不同于正常的状态,这意味着如果你仍然看到一个古老的空间,它确实是一个古老的空间。 🙂

取决于当前缓冲区的语法规则,可以这样工作:

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

这需要一个vim 7.3 +隐藏function

更新10/24/2014要扩大一点点。 当然可以定义一些突出显示的字符。

  • 你可以configuration隐藏字符的外观。 为了突出显示,您至less需要configuration一次“隐藏”突出显示组(请参阅以下帮助:h hl-Conceal这可以在您的颜色configuration中完成,然后不需要重新configuration它,但这会影响所有隐藏的字符(例如,如果你的语法脚本隐藏了一些项目,它们将显示为你的空白字符),看起来像这样:

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

  • 如果语法脚本使用skipwhite关键字,那么Vim将不会突出显示空格。 将不会有任何的方式(也许这将是固定的,我贴了一个补丁 )

  • 似乎有一个补丁浮动,这将允许定制如何在list模式下看起来空间。 在撰写本文时,最新的一篇似乎是这个 。 (这意味着,你需要build立你自己的Vim来使用它)。
  • concealcursorconcealcursor是窗口本地选项。 这意味着它们可以在不同的窗口中有所不同(也可能由filetype插件或其他插件脚本设置)。
  • 语法定义文件重新加载时,需要执行语法高亮组。 这可以使用BufWinEnter ,也可以使用Syntax或甚至FileType自动命令来完成。 (我没有testing过哪一个实际工作)。

最后两项意味着,你将不得不设置一些自动命令来重置语法规则和相应的选项。 对于第一个,可能需要使用ColorScheme自动命令来设置突出显示(这样隐藏的字符总是看起来相同,与颜色scheme实际设置的颜色无关)。 对于一个完整的解决scheme,看看romainl答案,这应该给你一个开始。 如果您设置了一个function,您可以轻松设置一个切换命令来切换显示特殊的突出显示或打开或closures。

更新10/26/2014我做了一个插件出这个问题。

更新04/22/2015 Vim中包含了一个补丁程序,使用list选项可以实现这一点。 简单地设置set list listchars+=space:␣从Vim 7.4.711开始工作

我用这个

 /\s :set hlsearch 

突出白色空间。 它search所有的空白,然后使突出显示,使他们popup。 但是,它不打印特殊字符。

如果用空格来表示这个字符,我的build议就是search/replace。 正如其他人所暗示的, set list非打印字符更改为在listcharsconfiguration的可见字符。

要明确地将空格显示为其他字符,类似于下面的内容应该可以做到这一点:

:%s/ /█/g

然后撤消更改以再次返回。

(为了得到█我按了这个确切的键序列 s / / CTRL-K F B / g

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

/ <空间>

笔记:

  • <space>表示只需键入空格字符。
  • 通过set hlsearch启用search结果高亮显示
  • 突出显示空格和制表符:

    / [<空间> <标签>]

    删除亮点的快速方法是search其他任何内容:/ asdf

    (只需input随机字符的简短列表)

    下面的代码是基于Christian Brabandt的答案,似乎是做OP的要求:

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

    追加这些行到你的~/.vimrc并开始一个新的Vim会话来看看仍然不完美的魔法发生。

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


    警告:在几种语言的*FuncBody语法组中有一些内容阻止显示中间点。 我不知道(但?)如何使该解决scheme更可靠。

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

    我的解决scheme是显示标签和下划线多个空格。 它从mrucci的答案和本教程中借鉴。 因为它使用语法突出显示,所以它是持久的:

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

    使用这个,选项卡显示为| 和空格作为_ ,这使得我很容易分辨混合代码样式。

    唯一的缺点是我发现这段代码不会调整背景颜色来匹配上下文(比如在注释中)。

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

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

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

     :match CursorLine /\s\+/ 

    避免了“你必须search空间才能让它们出现”,但是却不能把空间configuration成非高亮的东西。 CursorLine可以是任何高亮组,并且在默认的主题中是一个普通的下划线。

    我喜欢用特殊字符来显示空白,更清楚。 即使是要切换的地图也是一个关键function,用于快速检查。

    您可以在2004年以来未更新的旧vim脚本中find此function:

    vim-scripts/cream-showinvisibles@vim.org

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

    VIM的脚本/奶油showinvisibles @ github上

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

    所以把它添加到〜/ .vimrc

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

    在vim上安装插件

     :PluginInstall 

    你去了

    突出search

     :set hlsearch 

    .vimrc

    并search空间标签和回车

     / \|\t\|\r 

    或search所有空白字符

     /\s 

    search所有非空白字符(空格字符不显示,所以您看到单词之间的空白字符,而不是尾随的空白字符)

     /\S 

    显示所有尾部的空白字符 – 在行尾

     /\s$ 

    你可以使用

     :set list 

    真正看到一条线的结构。 您将明确地看到制表符和换行符。 当你看到一个空白,这真的是一个空白。

     :se list :se nolist 

    :se足够了, :set是不需要的。

    我发现将这些添加到我的.vimrc工作最有效

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

    您还可以突出显示空格(用空格replace空格):

     :%s/ /█/g 

    (在写回撤之前)

    添加到我的.vimrc为我工作。 只要确保你没有任何其他的冲突

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