我找不到一种方法来让Vim将所有空格显示为一个字符。我找到的只是制表符、尾随空格等。
当前回答
如果设置:
: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中定义函数。
其他回答
要覆盖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中为灰色)。任何其他空白字符看起来都像红色空格(“”)。
如果用空格表示“”字符,我的建议就是搜索/替换。正如其他人所暗示的,set list将非打印字符更改为以列表字符配置的可见字符。
要将空格显式显示为其他字符,应使用类似于以下内容的方法:
:%s//█/克
然后只需撤消更改即可再次返回。
(以获得█ 我按了这个精确的键顺序::%s//CTRL-KFB/g)
把这个添加到我的.vimrc中对我很有用。只要确保你没有其他冲突。。
autocmd VimEnter * :syn match space /\s/
autocmd VimEnter * :hi space ctermbg=lightgray ctermfg=black guibg=lightgray guifg=black
上面的所有答案都试图使vim中的空间可见。如果你真的坚持将可见空间作为点,还有另一种方法。。。
如果无法在vim中完成,请完全更改字体。我复制了Ubuntu One Mono字体,并使用FontForge进行了编辑。记住要更改字体的全名、字体族、首选字体族、兼容字体(在FontFoge中,它位于字体信息中的TTF名称下),以便将其作为单独的字体。只需编辑空格字符,使其中间有一个点,然后将字体保存到~/.fonts现在你可以把它用于你的gvim或整个终端。。。我复制了“!”字符,删除了行并将点移到中间。花了5分钟多一点。。。
注意:更改空格字符(0x20)会导致在整个vim屏幕上出现点的不便。。。(但它将分隔空格和制表符…)
:set列表将以字符形式显示所有空白。除了一个空间之外,其他所有的东西看起来都会不同于它的正常状态,这意味着如果你仍然看到一个普通的旧空间,那真的是一个普通旧空间。:)