web-dev-qa-db-ja.com

Vimにすべての空白を文字として表示させる

Vimにすべての空白を文字として表示させる方法が見つからない。私が見つけたのはタブ、末尾のスペースなどだけでした。

708
Matt

他の人が言ったように、あなたは使うことができます

:set list

これは、と組み合わせて

:set listchars=...

目に見えない文字を表示します。
現在、 show whitespaceに使用できる明示的なオプションはありませんが、listcharsでは、すべてのBUT空白文字に対して表示する文字を設定できます。例えば、私のものはこんな感じです

:set listchars=eol:$,tab:>-,trail:~,extends:>,precedes:<

だから、今、あなたが使用した後

:set list

他のものとして明示的に示されていないものはすべて、実際には、単純で古い空白です。

いつものように、listcharsがどのように機能するかを理解するためには、ヘルプを使用してください。それはどの文字が表示されることができるかについてのすばらしい情報を提供します(例えば、末尾のスペースのように)そしてそれをどのようにするか:

:help listchars

編集中に変更を簡単に確認できるように、トグルを追加すると便利な場合があります(source: VIM:set list!.vimrcのトグルとして )。

noremap <F5> :set list!<CR>
inoremap <F5> <C-o>:set list!<CR>
cnoremap <F5> <C-c>:set list!<CR>
636
Rook

有効にするには:set list

無効にするには:set nolist

237
Marcin

Patch 7.4.710 で、listcharsを使ってスペースの代わりに表示する文字を設定できるようになりました。

:set listchars+=space:␣

したがって、 _ all _ の空白文字を文字として表示するには、次のようにします。

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

メーリングリストに関する議論: https://groups.google.com/forum/?fromgroups#!topic/vim_dev/pjmW6wOZW_Q

227
Brett Y

私はここで他の答えがより包括的だと思うが、私は視覚的にタブとスペースを区別するために私が使うトリックを共有することを考えた:

:syntax on
:set syntax=whitespace

これらは 空白プログラミング言語の構文強調表示規則です - タブは緑色で、スペースは赤色で表示されます。 :)

他の多くの回答で述べられているように:set listと組み合わせることができますが、タブは緑色の強調表示なしで^ Iと表示されますが、スペースは赤色で表示されます。

172
Eliot

:set listはすべての空白を文字として表示します。 しかし スペースはすべて、通常の状態とは異なるように見えます。つまり、まだ古いスペースが見えても、それは本当に古いスペースです。 :)

85
Ether

設定した場合:

: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>

NB: / colorschemeが設定された後にvimrcで関数を定義してください。

73
mrucci

現在のバッファの構文規則によっては、次のようなものがうまくいく可能性があります。

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

これには+隠蔽機能付きのvim 7.3が必要です

2014年10月24日更新 その上で少し拡張する。円錐形の文字を強調表示するように定義することはもちろん可能です。

  • あなたは、隠された文字がどのように見えるか、設定することができます。ハイライトするには、 'Conceal'ハイライトグループを少なくとも一度設定する必要があります(:h hl-Concealのヘルプを参照してください。これはカラースキームで行うことができます。その後、再度設定する必要はありません)。あなたの構文スクリプトはさらにいくつかの項目を隠します、それらはあなたの空白文字として表示されます)。

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

  • 構文スクリプトがskipwhiteキーワードを使用している場合、Vimはスペースを強調表示しないという特殊性があるようです。回避策はないでしょう(おそらくこれは修正されるでしょう、私は パッチを投稿しました

  • あちこちに浮かぶパッチがあるように思われます、それはスペースがlistモードでどう見えるかをカスタマイズすることを可能にするでしょう。本稿執筆時点での最新のものは これ のようです。 (これはこれを使うためにあなた自身のVimを作る必要があることを意味します)。
  • conceallevelconcealcursorはウィンドウローカルオプションです。つまり、それらはウィンドウによって異なる可能性があります(そしておそらくファイルタイププラグインや他のプラグインスクリプトによっても設定されます)。
  • 構文強調表示グループは、構文定義ファイルが再ロードされるたびに実行する必要があります。これはBufWinEnterまたはおそらくSyntaxまたはさらにFileTypeオートコマンドを使って行うことができます。 (私はどれが実際に動くのかテストしていない)。

最後の2つの項目は、構文規則とそれに対応するオプションをリセットする自動コマンドを設定する必要があることを意味します。最初の方法では、ColorSchemeオートコマンドを使って強調表示を設定したいと思うかもしれません(色スキームが実際に設定するものとは無関係に、隠された文字が常に同じに見えるように)。完全な解決策については、romainlの回答を調べてください。機能を設定すると、特殊な強調表示のオン/オフを切り替えるトグルコマンドを簡単に設定できます。

2014年10月26日更新 この質問から プラグイン を作成しました。

更新04/22/2015 listオプションを使ってこれを可能にするパッチがVimに含まれています。単にset list listchars+=space:␣を設定するこれは Vim 7.4.711 の時点で動作します。

45

これを使う

/\s
:set hlsearch

空白を強調表示します。すべての空白を検索し、ハイライトを有効にしてそれらを飛び出させます。ただし、notは特殊文字を表示します。

30

空白文字で「」という文字を意味する場合、私の提案は単に検索/置換になります。他の人が示唆したように、set list非印刷文字をlistcharsで設定されている目に見える文字に変更します。

スペースを他の文字として明示的に表示するには、以下のような方法でうまくいくはずです。

:%s/ /█/g

その後、変更を元に戻して再度戻るだけです。

(█を得るために、私はこの正確なキーシーケンスを押しました: :%s//CTRL-KFB/g

22
Randy Morris

スペースを強調表示するには、単にそれを検索します。

/ <スペース>

ノート:

  • <スペース>はスペース文字を入力することを意味します。
    • Set hlsearch で検索結果の強調表示を有効にします。

      スペースとタブを強調表示するには:

      /[<スペース> <タブ>]

      ハイライトを削除する簡単な方法は何か他のものを検索することです:/ asdf

      (ランダムな文字の短いリストを入力するだけです)

  • 16
    vimmer

    以下のコードは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構文グループに何かがあると、中点が表示されなくなります。そのソリューションをより信頼性の高いものにする方法はわかりません(まだ?)。

    14
    romainl

    私はこの質問に対する他のすべての回答に不満を感じました。それらのどれもが有用な方法で空白文字を強調していないからです。スペースを文字として表示することは、タブとスペースを混在させるのが有害な空白形式の言語に特に役立ちます。

    私の解決策はタブを表示し、複数のスペースに下線を引くことです。 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 /  \+/
    

    これを使用すると、タブは|として、スペースは_として表示されます。これにより、コードスタイルを混在させているときにわかりやすくなります。

    私が見つけた唯一の欠点は、このスニペットが背景色をコンテキストに合わせて調整しないことです(コメントのように)。

    11
    Wylie

    上記の答えはすべて、vimの中からスペースを見えるようにすることです。あなたが本当にドットとして見えるスペースを持つことを主張するならば、別のアプローチがあります...

    それがvimでできない場合は、フォント全体を変更してください。 Ubuntu One MonoフォントをコピーしてFontForgeで編集しました。別のフォントとして使用するには、フォントのフルネーム、ファミリー、優先ファミリー、互換性のあるフル(FontFogeではフォント情報のTTF名の下にあります)を変更することを忘れないでください。スペース文字を編集して、中央にドットを入れてフォントを〜/ .fontsに保存します。これで、gvimまたは端末全体に使用できます。「!」をコピーしました。文字、行を削除し、中央にドットを移動しました。 5分以上かかりました...

    注意:空白文字(0x20)を変更すると、vimの画面全体にドットが表示されるという不都合が生じます。

    8
    chef

    私は既存の答えから私が望むものを正確に見つけることができませんでした。以下のコードは、すべての末尾のスペースを明るい赤で強調表示します。以下を.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()
    
    7
    thedanotto

    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)は "│ "のように見えます(2文字:長いパイプ、次に序数のスペース。それらはcolorscheme murphyでは灰色です)。
    • 通常の改行なしのスペース(U + 00A0)は "·"のように見えます(1文字。colorscheme murphyではグレーです)。
    • 他の空白文字は赤い ""のように見えます
    5
    Kirill Bulygin
    :match CursorLine /\s\+/
    

    「スペースを表示して表示させるにはスペースを検索する必要がある」というビットは避けられますが、afaictはそのスペースに隠されていないことをするようには設定できません。 CursorLineは任意の強調表示グループにすることができ、デフォルトのテーマではそれは普通の下線です。

    5
    ldrg

    空白を表示するために特殊文字を使用するのが好きですが、もっと明確です。簡単に確認できるように、トグルマップも重要な機能です。

    この機能は2004年以降更新されていない古いvimスクリプトにあります。

    vim-scripts/[email protected]

    プロジェクトのおかげで vim-scripts そして vundle あなたはこのプラグインを生き返らせることができます

    vim-scripts/cream-showinvisibles @ github

    さらに良いことに、これに関する私の2つのポイントは、 設定可能なショートカット (定義済みの代わりに)を追加することです。 F4

    そのため、これを〜/ .vimrcに追加します。

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

    vimにプラグインをインストールする

    :PluginInstall
    

    そしてそこに行く

    5
    albfan

    あなたが使用することができます

    :set list
    

    実際に線の構造を見るために。タブと改行が明示的に表示されます。あなたが空白を見るとき、それは本当に空白です。

    4
    tangens

    ハイライト検索

    :set hlsearch 
    

    .vimrcでは、

    スペースタブとキャリッジリターンを検索

    / \|\t\|\r
    

    またはすべての空白文字を検索する

    /\s
    

    空白以外のすべての文字を検索します(空白文字は表示されないため、単語の間に空白文字は表示されますが、末尾の空白文字は表示されません)。

    /\S
    

    末尾のすべての空白文字を表示する - 行末に

    /\s$
    
    3
    MichaelMoser

    それらのハック をコメントとして.vimrcに保存してください。シェルでは、単に:

    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
    
    2
    Yordan Georgiev

    スペースを強調表示することもできます(スペースをブロックで置き換えます)。

    :%s/ /█/g
    

    (元に戻す前に)

    1
    Federico Bucchi
    :se list
    :se nolist
    

    :seで十分です、:setは必要ありません。

    1
    sjas

    これを私の.vimrcに追加するとうまくいきます。他に競合するものがないことを確認してください。

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