我找不到让Vim将所有空白显示为字符的方法。 我发现的只是关于制表符,尾随空格等。
#1楼
我对这个问题的所有其他答案感到沮丧,因为它们都没有以有用的方式突出显示空格字符。 将空格显示为字符对于空白格式的语言特别有用,因为在这些语言中,制表符和空格的混合是有害的。
我的解决方案是显示选项卡并在多个空格下划线。 它借鉴了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 / \+/
使用此选项卡显示为|
和_
作为空格,这使我很容易分辨出何时混合代码样式。
我发现的唯一缺点是,此代码段无法调整背景颜色以匹配上下文(例如在评论中)。
#2楼
要突出显示空格,只需搜索它:
/ <空格>
笔记:
<space>表示只需键入空格字符。 启用:set hlsearch突出显示搜索结果 突出显示空格和制表符:
/ [<空格> <tab>]
删除突出显示的一种快速方法是搜索其他内容:/ asdf
(只需输入任何简短的随机字符列表)
#3楼
:set list
将所有空格显示为字符。 一切,但空间看起来会比正常状态,这意味着如果你仍然可以看到一个普通的老式空间,这真是一个普通的旧空间的不同。 :)
#4楼
你可以用
:set list
真正看到一条线的结构。 您将明确看到选项卡和换行符。 当您看到空白时,实际上是空白。
#5楼
正如其他人所说,您可以使用
:set list
结合
:set listchars=...
显示不可见的字符。
现在,没有可用于显示空白的显式选项,但是在列表字符中,您可以设置一个字符以显示所有但空白。 例如,我的看起来像这样
:set listchars=eol:$,tab:>-,trail:~,extends:>,precedes:<
所以,现在,在您使用之后
:set list
那么,所有没有明确显示为其他内容的东西,实际上都是纯空白。
与往常一样,要了解listchars
工作原理,请使用帮助。 它提供了有关可以显示哪些字符(例如尾随空格)以及如何执行的重要信息:
:help listchars
向其中添加切换可能会有所帮助,以便您可以轻松地在编辑过程中查看更改(来源: VIM:set list!作为.vimrc中的切换 ):
noremap <F5> :set list!<CR>
inoremap <F5> <C-o>:set list!<CR>
cnoremap <F5> <C-c>:set list!<CR>
#6楼
如果您设置:
:highlight Search cterm=underline gui=underline ctermbg=none guibg=none ctermfg=none guifg=none
然后搜索空格,每个空格字符将显示为下划线字符。
您可以在方便的功能中使用此命令,该功能可切换空格的“下划线”。
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
使用以下功能将功能映射到快捷键:
nmap <silent> <F3> <Esc>:call ToggleSpaceUnderscoring()<CR>
注意:设置了colorcheme后,请在vimrc中定义功能。
#7楼
:set list
启用。
:set nolist
禁用。
#8楼
如果用空格表示“”字符,我的建议就是搜索/替换。 正如其他人所暗示的那样, set list
会将非打印字符更改为在listchars
配置的可见字符。
为了将空格显示为其他字符,可以使用类似于以下内容的方法:
:%s/ /█/g
然后只需撤消更改以再次返回即可。
(为获得█,我按了此确切的按键顺序:: % s / / CTRL-K F B / g )
#9楼
:se list
:se nolist
:se
就足够了,不需要:set
。
#10楼
您还可以突出显示空格(用块代替空格):
:%s/ /█/g
(在编写撤消之前)
#11楼
我认为这里的其他答案更全面,但我想我会分享一个我通常用来在视觉上区分制表符和空格的技巧:
:syntax on
:set syntax=whitespace
这些是Whitespace编程语言的语法突出显示规则-选项卡以绿色显示,空格以红色显示。 :)
可以与:set list
结合使用,如许多其他答案所述,尽管选项卡随后将显示为^ I,而没有绿色背景,但空格将显示为红色。
#12楼
以上所有答案都试图使vim内部的空间可见。 如果您真的坚持将可见的空间作为点,那么还有另一种方法...
如果不能在vim中完成,请完全更改字体。 我复制了Ubuntu One Mono字体并使用FontForge对其进行了编辑。 记住要更改字体的全名,家族,首选家族,兼容的完整字体(在FontFoge中,它在字体信息中的TTF名称下),以便将其作为单独的字体。 只需编辑空格字符在中间有一个点,然后将字体保存到〜/ .fonts,现在您就可以将其用于gvim或整个终端了……我复制了“!” 字符,删除线并将点移到中间。 花了超过5分钟的时间...
注意:更改空格字符(0x20)会导致在整个vim屏幕上出现点的不便...(但是它将空格与制表符分开...)
#13楼
我喜欢用特殊字符来显示空格,更清晰。 快速切换甚至是要切换的地图也是关键功能。
您可以在自2004年以来未更新的旧vim脚本中找到以下功能:
vim-scripts/cream-showinvisibles@vim.org
vim-scripts / cream-showinvisibles @ github
更好的是,我为此付出的两分钱是添加一个可配置的快捷方式 (而不是预定义的F4 )
所以将它添加到〜/ .vimrc
Plugin 'albfan/cream-invisibles'
let g:creamInvisibleShortCut = "<F5>" "for my F4 goto next error
在vim上安装插件
:PluginInstall
然后你去
#14楼
下面的代码基于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
语法组中的几种语言阻止了中间点的显示。 我不知道(尚未?)如何使该解决方案更可靠。
#15楼
将其添加到我的.vimrc中对我来说有效。 只要确保您没有其他冲突即可。
autocmd VimEnter * :syn match space /\s/
autocmd VimEnter * :hi space ctermbg=lightgray ctermfg=black guibg=lightgray guifg=black
#16楼
突出显示搜索
:set hlsearch
在.vimrc
中
并搜索空格和回车
/ \|\t\|\r
或搜索所有空白字符
/\s
搜索所有非空白字符(不显示空白字符,因此您会看到单词之间的空白字符,但看不到尾随的空白字符)
/\S
在行尾显示所有尾随空格字符
/\s$
#17楼
从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
#18楼
从现有答案中找不到我想要的东西。 下面的代码将以红色突出显示所有尾随空格。 只需将以下内容添加到您的.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()
#19楼
要覆盖Unicode空格字符:
set list
set 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
灰色) - 其他任何空格字符看起来都像红色“
”
#20楼
将这些hack作为注释保留在.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
#21楼
:match CursorLine /\s\+/
避免了“您必须搜索空格以使其出现”的位,但是无法将afaict配置为对空格进行非突出显示的操作。 CursorLine可以是任何亮点组,并且在默认主题中是普通下划线。
#22楼
根据当前缓冲区的语法规则,类似的方法可能会起作用:
:syn match WhiteSpace / / containedin=ALL conceal cchar=Æ
:setl conceallevel=2 concealcursor=nv
这需要具有+ conceal功能的vim 7.3
2014年10月24日更新要对此进行扩展。 当然可以为锥形字符定义一些突出显示。
您可以配置隐藏字符的外观。 对于突出显示,您至少必须配置一次“隐藏”突出显示组(请参见
:h hl-Conceal
的帮助。可以在您的配色方案中完成此操作,然后无需重新配置它。但这会影响所有隐藏的对象。字符(例如,如果您的语法脚本隐藏了更多项目,它们将显示为空白字符)。看起来可能像这样::hi Conceal ctermfg=7 ctermbg=NONE guifg=LightGrey guibg=NONE
如果语法脚本使用
skipwhite
关键字,似乎Vim不会突出显示空格。 将无法解决(也许会解决,我发布了一个补丁 )- 似乎有一个补丁在浮动,可以自定义
list
模式下的空间外观。 在撰写本文时,最新的版本似乎就是此版本 。 (这意味着,您需要构建自己的Vim才能使用它)。 - 该
conceallevel
和concealcursor
是窗口本地选项。 这意味着它们在不同的窗口中可以有所不同(并且也可能由文件类型插件或其他插件脚本来设置)。 - 每当重新加载语法定义文件时,都需要执行语法突出显示组。 这可以使用
BufWinEnter
或可能的Syntax
甚至FileType
自动命令来完成。 (我尚未测试哪一个实际有效)。
最后两项意味着,您将必须设置一些自动命令来重置语法规则和相应的选项。 对于第一个,可能要使用ColorScheme
自动命令设置突出显示(以便隐藏的字符始终看起来相同,而与颜色方案的实际设置无关)。 对于完整的解决方案,请查看romainl答案,这应该为您提供一个开始。 如果您设置了功能,则可以轻松地设置一个切换命令来打开或关闭显示特殊高亮显示的功能。
更新10/26/2014我从这个问题中制作了一个插件 。
2015年4月22日更新 Vim中包含一个补丁,可使用list
选项来实现此目的。 只需设置set list listchars+=space:␣
可以从Vim 7.4.711开始使用
#23楼
我用这个
/\s
:set hlsearch
突出显示空白。 它搜索所有空白,然后启用突出显示以使其弹出。 但是,它不打印特殊字符。