簡體   English   中英

使 Vim 將所有空格顯示為字符

[英]Make Vim show ALL white spaces as a character

我找不到讓 Vim 將所有空格顯示為字符的方法。 我發現的只是關於制表符、尾隨空格等。

正如其他人所說,你可以使用

:set list

這將與

:set listchars=...

顯示不可見字符。
現在,沒有可用於顯示空格的顯式選項,但在 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>

從補丁7.4.710 開始,您現在可以使用 listchars 設置一個字符來代替空格顯示!

:set listchars+=space:␣

因此,要將所有空白字符顯示為字符,您可以執行以下操作:

:set listchars=eol:¬,tab:>·,trail:~,extends:>,precedes:<,space:␣
:set list

完成后,要隱藏不可見的字符,您可以:

:set nolist

郵件列表討論: https : //groups.google.com/forum/?fromgroups#!topic/ vim_dev/ pjmW6wOZW_Q

:set list啟用。

:set nolist禁用。

我認為這里的其他答案更全面,但我想我想分享一個我通常用來在視覺上區分制表符和空格的技巧:

:syntax on
:set syntax=whitespace

這些是Whitespace 編程語言的語法高亮規則 - 標簽顯示為綠色,空格顯示為紅色。 :)

可以與許多其他答案中提到的:set list結合使用,盡管選項卡將顯示為 ^I 沒有綠色突出顯示,但空格將顯示為紅色。

:set list會將所有空格顯示為一個字符。 一切,但空間看起來會比正常狀態,這意味着如果你仍然可以看到一個普通的老式空間,這真是一個普通的舊空間的不同。 :)

如果你設置:

: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 中定義函數。

根據當前緩沖區的語法規則,這樣的事情可能會起作用:

:syn match WhiteSpace / / containedin=ALL conceal cchar=Æ
:setl conceallevel=2 concealcursor=nv

這需要一個帶有+隱藏功能的vim 7.3

2014 年 10 月 24 日更新對此進行一些擴展。 當然可以為錐形字符定義一些突出顯示。

  • 您可以配置隱藏字符的外觀。 對於突出顯示,您至少必須配置一次“隱藏”突出顯示組(請參閱幫助:h hl-Conceal這可以在您的顏色方案中完成,然后您不需要再次重新配置它。但這會影響所有隱藏的字符(例如,如果您的語法腳本隱藏了更多項目,它們將顯示為您的空白字符)。這可能如下所示:

    :hi Conceal ctermfg=7 ctermbg=NONE guifg=LightGrey guibg=NONE

  • 如果語法腳本使用skipwhite關鍵字,Vim 似乎不會突出顯示空格的skipwhite 沒有辦法解決(也許這會被修復,我發布了一個補丁

  • 似乎有一個補丁浮動,這將允許自定義空間在list模式下的外觀。 在撰寫本文時最新的一個似乎是這個 (這意味着,您需要構建自己的 Vim 才能使用它)。
  • conceallevelconcealcursor是窗口本地選項。 這意味着它們在不同的窗口中可能不同(並且也可能由文件類型插件或其他插件腳本設置)。
  • 每當重新加載語法定義文件時,都需要執行語法突出顯示組。 這可以使用BufWinEnterSyntax甚至FileType自動命令來完成。 (我還沒有測試哪一個真正有效)。

最后兩項意味着,您必須設置一些自動命令來重置語法規則和相應的選項。 對於第一個,人們可能希望使用ColorScheme自動命令設置突出顯示(這樣隱藏的字符看起來總是相同的,而與實際設置的顏色方案無關)。 要獲得完整的解決方案,請查看 romainl 答案,這應該會給您一個開始。 如果您設置了一個功能,您可以輕松設置一個切換命令來打開或關閉顯示特殊突出顯示。

2014 年 10 月 26 日更新我根據這個問題制作了一個插件

2015 年 4 月 22 日更新Vim 中包含了一個補丁,可以使用list選項實現這一點。 只需設置set list listchars+=space:␣這適用於Vim 7.4.711

我用這個

/\s
:set hlsearch

突出顯示空白。 它搜索所有空白,然后啟用突出顯示使它們彈出。 但是,它打印特殊字符。

如果空格是指 ' ' 字符,我的建議就是搜索/替換。 正如其他人所暗示的那樣, set list非打印字符更改為在listchars配置的可見字符。

要將空格顯式顯示為其他字符,類似於下面的內容應該可以解決問題:

:%s/ /█/g

然后只需撤消更改即可再次返回。

(為了得到 █,我按下了這個確切的鍵序列:: % s / / CTRL-K F B / g )

要突出顯示空格,只需搜索它:

/<空格>

筆記:

  • <space> 表示只輸入空格字符。
  • 使用 :set hlsearch 啟用搜索結果的突出顯示

    要突出顯示空格和制表符:

    /[<空格><標簽>]

    刪除突出顯示的一種快速方法是搜索其他任何內容:/asdf

    (只需輸入任何簡短的隨機字符列表)

  • 下面的代碼基於 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*FuncBody語法組中的某些內容會阻止顯示中間點。 我不知道(還?)如何使該解決方案更可靠。

    我對這個問題的所有其他答案感到沮喪,因為它們都沒有以有用的方式突出顯示空格字符。 將空格顯示為字符對於空格格式的語言特別有幫助,因為混合制表符和空格是有害的。

    我的解決方案是顯示制表符並在多個空格下划線。 它借鑒了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 或整個終端......我復制了“!” 字符,刪除線並將點移到中間。 花了5分鍾多一點...

    注意:更改空格字符(0x20)會導致整個vim屏幕上都有點的不便......(但它會將空格與制表符分開......)

    我沒有從現有的答案中找到我想要的。 下面的代碼將突出顯示所有尾隨空格鮮紅色。 只需將以下內容添加到您的.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()
    

    覆蓋 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灰色)
    • 任何其他空白字符看起來像紅色“

    我喜歡使用特殊字符來顯示空格,這樣更清晰。 即使是要切換的地圖也是一個關鍵功能,可以快速檢查。

    您可以在自 2004 年以來未更新的舊 vim 腳本中找到此功能:

    vim-scripts/cream-showinvisibles@vim.org

    感謝項目vim-scriptsvundle,你可以讓這個插件恢復生機

    vim-scripts/cream-showinvisibles@github

    更好的是,我對此的兩分錢是添加一個可配置的快捷方式(而不是預定義的F4

    所以把它添加到~/.vimrc

    Plugin 'albfan/cream-invisibles'
    
    let g:creamInvisibleShortCut = "<F5>" "for my F4 goto next error
    

    在vim上安裝插件

    :PluginInstall
    

    你去吧

    :match CursorLine /\s\+/
    

    避免了“你必須搜索空間才能讓它們顯示出來”這一點,但 afaict 不能被配置為對空間做非突出的事情。 CursorLine 可以是任何高亮組,在默認主題中它是一個簡單的下划線。

    你可以用

    :set list
    

    真正看到一條線的結構。 您將顯式地看到制表符和換行符。 當你看到一片空白時,它真的是一片空白。

    突出顯示搜索

    :set hlsearch 
    

    .vimrc

    並搜索空格制表符和回車

    / \|\t\|\r
    

    或搜索所有空白字符

    /\s
    

    搜索所有非空白字符(未顯示空白字符,因此您會看到單詞之間的空白字符,但看不到尾隨的空白字符)

    /\S
    

    顯示所有尾隨空格字符 - 在行尾

    /\s$
    

    這些 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
    
    :se list
    :se nolist
    

    :se就足夠了,不需要:set

    您還可以突出顯示空格(用塊替換空格):

    :%s/ /█/g
    

    (在寫之前撤消它)

    將此添加到我的 .vimrc 對我有用。 只要確保你沒有任何其他沖突..

    autocmd VimEnter * :syn match space /\s/
    autocmd VimEnter * :hi space ctermbg=lightgray ctermfg=black guibg=lightgray guifg=black
    

    暫無
    暫無

    聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

     
    粵ICP備18138465號  © 2020-2024 STACKOOM.COM