我找不到一种方法来让Vim将所有空格显示为一个字符。我找到的只是制表符、尾随空格等。
当前回答
:set列表将以字符形式显示所有空白。除了一个空间之外,其他所有的东西看起来都会不同于它的正常状态,这意味着如果你仍然看到一个普通的旧空间,那真的是一个普通旧空间。:)
其他回答
要覆盖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)看起来像“│“(两个字符:一个长管道,然后是一个序数空间;它们在配色方案murphy中是灰色的)。不间断空格(U+00A0)看起来像“·”(一个字符;在颜色方案murphy中为灰色)。任何其他空白字符看起来都像红色空格(“”)。
如果设置:
: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>
注意:设置配色方案后,在vimrc中定义函数。
正如其他人所说,您可以使用
:set list
这将与
:set listchars=...
显示不可见字符。现在,没有一个显式选项可以用来显示空白,但在listchars中,您可以设置一个字符来显示除空白以外的所有内容。例如,我的看起来像这样
:set listchars=eol:$,tab:>-,trail:~,extends:>,precedes:<
所以,现在,在你使用
:set list
所有没有明确显示为其他内容的内容实际上都是一个普通的空白。
像往常一样,要了解listchars的工作原理,请使用帮助。它提供了关于可以显示哪些字符(例如尾随空格)以及如何显示的详细信息:
:help listchars
给它添加一个切换可能会很有帮助,这样您可以在编辑过程中轻松看到更改(来源:VIM:set list!作为.virc中的切换):
noremap <F5> :set list!<CR>
inoremap <F5> <C-o>:set list!<CR>
cnoremap <F5> <C-c>:set list!<CR>
也可以高亮显示空间(用块替换空间):
:%s/ /█/g
(在写入之前,请将其撤消)
:se list
:se nolist
:se足够了,不需要:set。