Vimにすべての空白を文字として表示させる方法が見つからない。私が見つけたのはタブ、末尾のスペースなどだけでした。
他の人が言ったように、あなたは使うことができます
: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>
有効にするには:set list
。
無効にするには:set nolist
。
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
私はここで他の答えがより包括的だと思うが、私は視覚的にタブとスペースを区別するために私が使うトリックを共有することを考えた:
:syntax on
:set syntax=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>
NB: / colorschemeが設定された後にvimrcで関数を定義してください。
現在のバッファの構文規則によっては、次のようなものがうまくいく可能性があります。
: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を作る必要があることを意味します)。conceallevel
とconcealcursor
はウィンドウローカルオプションです。つまり、それらはウィンドウによって異なる可能性があります(そしておそらくファイルタイププラグインや他のプラグインスクリプトによっても設定されます)。BufWinEnter
またはおそらくSyntax
またはさらにFileType
オートコマンドを使って行うことができます。 (私はどれが実際に動くのかテストしていない)。最後の2つの項目は、構文規則とそれに対応するオプションをリセットする自動コマンドを設定する必要があることを意味します。最初の方法では、ColorScheme
オートコマンドを使って強調表示を設定したいと思うかもしれません(色スキームが実際に設定するものとは無関係に、隠された文字が常に同じに見えるように)。完全な解決策については、romainlの回答を調べてください。機能を設定すると、特殊な強調表示のオン/オフを切り替えるトグルコマンドを簡単に設定できます。
2014年10月26日更新 この質問から プラグイン を作成しました。
更新04/22/2015 list
オプションを使ってこれを可能にするパッチがVimに含まれています。単にset list listchars+=space:␣
を設定するこれは Vim 7.4.711 の時点で動作します。
これを使う
/\s
:set hlsearch
空白を強調表示します。すべての空白を検索し、ハイライトを有効にしてそれらを飛び出させます。ただし、notは特殊文字を表示します。
空白文字で「」という文字を意味する場合、私の提案は単に検索/置換になります。他の人が示唆したように、set list
は非印刷文字をlistchars
で設定されている目に見える文字に変更します。
スペースを他の文字として明示的に表示するには、以下のような方法でうまくいくはずです。
:%s/ /█/g
その後、変更を元に戻して再度戻るだけです。
(█を得るために、私はこの正確なキーシーケンスを押しました: :%s//CTRL-KFB/g)
スペースを強調表示するには、単にそれを検索します。
/ <スペース>
ノート:
スペースとタブを強調表示するには:
/[<スペース> <タブ>]
ハイライトを削除する簡単な方法は何か他のものを検索することです:/ 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
構文グループに何かがあると、中点が表示されなくなります。そのソリューションをより信頼性の高いものにする方法はわかりません(まだ?)。
私はこの質問に対する他のすべての回答に不満を感じました。それらのどれもが有用な方法で空白文字を強調していないからです。スペースを文字として表示することは、タブとスペースを混在させるのが有害な空白形式の言語に特に役立ちます。
私の解決策はタブを表示し、複数のスペースに下線を引くことです。 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]')
結果:
│
"のように見えます(2文字:長いパイプ、次に序数のスペース。それらはcolorscheme murphy
では灰色です)。·
"のように見えます(1文字。colorscheme murphy
ではグレーです)。:match CursorLine /\s\+/
「スペースを表示して表示させるにはスペースを検索する必要がある」というビットは避けられますが、afaictはそのスペースに隠されていないことをするようには設定できません。 CursorLineは任意の強調表示グループにすることができ、デフォルトのテーマではそれは普通の下線です。
空白を表示するために特殊文字を使用するのが好きですが、もっと明確です。簡単に確認できるように、トグルマップも重要な機能です。
この機能は2004年以降更新されていない古いvimスクリプトにあります。
プロジェクトのおかげで 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
そしてそこに行く
あなたが使用することができます
:set list
実際に線の構造を見るために。タブと改行が明示的に表示されます。あなたが空白を見るとき、それは本当に空白です。
ハイライト検索
:set hlsearch
.vimrc
では、
スペースタブとキャリッジリターンを検索
/ \|\t\|\r
またはすべての空白文字を検索する
/\s
空白以外のすべての文字を検索します(空白文字は表示されないため、単語の間に空白文字は表示されますが、末尾の空白文字は表示されません)。
/\S
末尾のすべての空白文字を表示する - 行末に
/\s$
それらのハック をコメントとして.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
スペースを強調表示することもできます(スペースをブロックで置き換えます)。
:%s/ /█/g
(元に戻す前に)
:se list
:se nolist
:se
で十分です、:set
は必要ありません。
これを私の.vimrcに追加するとうまくいきます。他に競合するものがないことを確認してください。
autocmd VimEnter * :syn match space /\s/
autocmd VimEnter * :hi space ctermbg=lightgray ctermfg=black guibg=lightgray guifg=black