让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来使用它)。 -
concealcursor
和concealcursor
是窗口本地选项。 这意味着它们可以在不同的窗口中有所不同(也可能由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
将非打印字符更改为在listchars
configuration的可见字符。
要明确地将空格显示为其他字符,类似于下面的内容应该可以做到这一点:
:%s/ /█/g
然后撤消更改以再次返回。
(为了得到█我按了这个确切的键序列: % s / / CTRL-K F B / g )
要突出显示空格,只需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