我找不到让Vim将所有空格显示为角色的方法。 我发现的只是标签,尾随空格等。
答案 0 :(得分:639)
正如其他人所说,你可以使用
:set list
将与
结合使用:set listchars=...
显示不可见的字符 现在,没有一个明确的选项可用于 show 空格,但在列表框中,您可以设置一个字符来显示所有内容但是空白。例如,我看起来像这样
:set listchars=eol:$,tab:>-,trail:~,extends:>,precedes:<
所以,现在,在您使用
之后:set list
未明确显示为其他内容的所有内容,实际上是一个普通的旧空白。
像往常一样,要了解listchars
的工作原理,请使用帮助。它提供了有关可以显示哪些字符的详细信息(例如,尾随空格)以及如何执行此操作:
:help listchars
向其添加切换可能会有所帮助,因此您可以轻松地在编辑中看到更改(来源:VIM :set list! as a toggle in .vimrc):
noremap <F5> :set list!<CR>
inoremap <F5> <C-o>:set list!<CR>
cnoremap <F5> <C-c>:set list!<CR>
答案 1 :(得分:239)
:set list
启用。
:set nolist
禁用。
答案 2 :(得分:230)
从补丁7.4.710开始,您现在可以使用列表来设置一个字符来代替空格!
:set listchars+=space:␣
因此,要将所有空格字符显示为字符,您可以执行以下操作:
:set listchars=eol:¬,tab:>·,trail:~,extends:>,precedes:<,space:␣
:set list
关于邮件列表的讨论:https://groups.google.com/forum/?fromgroups#!topic/vim_dev/pjmW6wOZW_Q
答案 3 :(得分:173)
我认为这里的其他答案更全面,但我想我会分享一个通常用来区分标签和空格的技巧:
:syntax on
:set syntax=whitespace
这些是Whitespace programming language的语法突出显示规则 - 标签以绿色显示,空格显示为红色。 :)
可以与许多其他答案中提到的:set list
结合使用,但是标签将显示为^ I而没有绿色高光,但空格将显示为红色。
答案 4 :(得分:86)
:set list
会将所有空格显示为字符。一切但是一个空间看起来与它的正常状态不同,这意味着如果你仍然看到一个普通的旧空间,它实际上是一个普通的旧空间。 :)
答案 5 :(得分:73)
如果你设置:
: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>
注意:在设置colorscheme后在vimrc中定义函数。
答案 6 :(得分:45)
根据您当前缓冲区的语法规则,这样的事情可能有效:
:syn match WhiteSpace / / containedin=ALL conceal cchar=Æ
:setl conceallevel=2 concealcursor=nv
这需要带有+隐藏功能的vim 7.3
2014年10月24日更新 扩大一点。当然可以为锥形字符定义一些突出显示。
您可以配置隐藏字符的外观。要突出显示,您必须至少配置一次“隐藏”突出显示组(请参阅:h hl-Conceal
处的帮助。这可以在您的colorscheme中完成,然后您无需再次重新配置它。但这会影响所有隐藏chars(例如,如果你的语法脚本隐藏了更多的项目,它们将显示为你的白色空间字符)。这可能是这样的:
:hi Conceal ctermfg=7 ctermbg=NONE guifg=LightGrey guibg=NONE
如果语法脚本使用skipwhite
关键字,Vim似乎不会突出显示空格。将无法解决(也许这将得到修复,我发布了patch)
list
模式下的外观。在撰写本文时,最新的一篇似乎是this one。 (这意味着,您需要构建自己的Vim才能使用它。)conceallevel
和concealcursor
是窗口本地选项。这意味着它们可以在不同的窗口中有所不同(并且也可能由文件类型插件或其他插件脚本设置)。BufWinEnter
或可能还有Syntax
或甚至FileType
自动命令来完成。 (我还没有测试哪一个确实有用)。最后两项意味着,您必须设置一些自动命令来重置语法规则和相应的选项。对于第一个,可能想要使用ColorScheme
自动命令设置突出显示(以便隐藏的字符看起来总是相同,与颜色方案实际设置的无关)。要获得完整的解决方案,请查看romainl答案,这应该为您提供一个开始。如果您设置了一个功能,您可以轻松设置切换命令以打开或关闭显示特殊突出显示。
2014年10月26日更新我从这个问题中提出了plugin。
2015年4月22日更新 Vim中已包含一个补丁,可以使用list
选项实现此功能。只需设置set list listchars+=space:␣
这适用于Vim 7.4.711
答案 7 :(得分:30)
我用这个
/\s
:set hlsearch
突出显示空白区域。它搜索所有空白区域,然后启用突出显示以使其弹出。但是,不打印特殊字符。
答案 8 :(得分:22)
如果用空格表示''字符,我的建议就是搜索/替换。正如其他人所暗示的那样,set list
将非打印字符更改为listchars
中配置的可见字符。
要明确地将空格显示为其他字符,类似于下面的内容应该可以解决这个问题:
:%s/ /█/g
然后撤消更改再返回。
(为了得到█我按下了这个确切的关键序列:: % s / / CTRL-K ˚F 乙 / 克)
答案 9 :(得分:16)
要突出显示空格,只需搜索它:
/&lt;空&GT;
注意:
突出空间&amp;标签:
/ [&lt;空&GT;&LT;标签&gt;]
删除高亮显示的一种快捷方法是搜索其他内容: / ASDF
(只需键入随机字符的任何简短列表)
答案 10 :(得分: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
语法组中的某些内容会阻止中间点显示。我不知道(还有?)如何使该解决方案更可靠。
答案 11 :(得分:11)
我对这个问题的所有其他答案感到沮丧,因为他们都没有以有用的方式强调空间角色。将空格显示为字符对于空白格式的语言特别有用,其中混合制表符和空格是有害的。
我的解决方案是显示标签并为多个空格加下划线。它借鉴了mrucci's answer和this tutorial。因为它使用语法高亮,所以它是持久的:
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 / \+/
使用此选项卡,选项卡显示为|
,空格显示为_
,这样可以很容易地判断我何时混合代码样式。
我发现的唯一缺点是此代码段不会调整背景颜色以匹配上下文(例如在评论中)。
答案 12 :(得分:8)
上面的所有答案都试图在vim中显示空格。如果你真的坚持将可见空间作为点,那么还有另一种方法......
如果无法在vim中完成,请完全更改字体。我复制了Ubuntu One Mono字体并使用FontForge进行了编辑。请记住更改字体的全名,系列,首选系列,兼容完全(在FontFoge中,它在字体信息中的TTF名称下),以便将其作为单独的字体。 只需编辑空格字符,在中间有一个点,并将字体保存到〜/ .fonts 现在你可以将它用于你的gvim或整个终端...... 我复制了“!”删除该行并将点移动到中间。花了不到5分钟......
注意:更改空格字符(0x20)会导致在整个vim屏幕上出现点的不便...(但它会将空格与标签区分开来......)
答案 13 :(得分:7)
我没有从现有答案中找到我想要的内容。下面的代码将突出显示所有尾随空格的红色。只需将以下内容添加到.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()
答案 14 :(得分:5)
要覆盖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]')
结果:
”)│
”(两个字符:长管道,然后是序数空格; colorscheme murphy
中为灰色)·
”(一个字符; colorscheme murphy
中为灰色)
” 答案 15 :(得分:5)
:match CursorLine /\s\+/
避免“你必须搜索空间让它们显示”位,但是不能将afaict配置为对空间进行非高亮显示。 CursorLine可以是任何hilighting组,在默认主题中它是一个简单的下划线。
答案 16 :(得分:5)
我喜欢使用特殊字符来显示空白,更清晰。即使是切换地图也是一个关键功能,可以快速检查。
您可以在2004年以来未更新的旧vim脚本中找到此功能:
vim-scripts/cream-showinvisibles@vim.org
感谢项目vim-scripts和vundle,您可以重新使用此插件
vim-scripts/cream-showinvisibles@github
更好的是,我的两分钱就是添加一个configurable shortcut(而不是预定义的 F4 )
所以将其添加到〜/ .vimrc
Plugin 'albfan/cream-invisibles'
let g:creamInvisibleShortCut = "<F5>" "for my F4 goto next error
在vim上安装插件
:PluginInstall
然后你去了
答案 17 :(得分:4)
您可以使用
:set list
真正看到一条线的结构。您将明确地看到制表符和换行符。当你看到一个空白时,它真的是一片空白。
答案 18 :(得分:3)
突出显示搜索
:set hlsearch
<{1>}中的
并搜索空格标签和回车
.vimrc
或搜索所有空格字符
/ \|\t\|\r
搜索所有非空格字符(未显示空白字符,因此您可以看到单词之间的空格字符,但不会显示尾随空白字符)
/\s
显示所有尾随空格字符 - 位于行尾
/\S
答案 19 :(得分:2)
在.vimrc中保留those hacks作为注释,因此在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
答案 20 :(得分:1)
将此添加到我的.vimrc对我有用。只要确保你没有其他任何冲突..
autocmd VimEnter * :syn match space /\s/
autocmd VimEnter * :hi space ctermbg=lightgray ctermfg=black guibg=lightgray guifg=black
答案 21 :(得分:1)
你也可以突出显示空格(用块替换空格):
:%s/ /█/g
(在写下撤消之前)
答案 22 :(得分:1)
:se list
:se nolist
:se
就足够了,不需要:set
。