Vim にすべての空白を文字として表示させる方法が見つかりません。私が見つけたのは、タブ、末尾のスペースなどに関するものだけでした.
23 に答える
他の人が言ったように、あなたは使うことができます
: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 で関数を定義してください。
私はこれを使います
/\s
:set hlsearch
空白を強調します。すべての空白を検索し、ハイライトを有効にしてそれらを飛び出させます。ただし、特殊文字は出力されません。
空白で「 」文字を意味する場合、私の提案は単なる検索/置換です。他の人が示唆しているように、印刷されていない文字を で構成されている可視文字にset list
変更します。listchars
スペースを他の文字として明示的に表示するには、以下のようなものがうまくいくはずです:
:%s/ /█/g
次に、変更を元に戻すだけで元に戻ります。
(█ を取得するために、私はこの正確なキー シーケンスを押しました: :%s/ /CTRL-KFB/g)
以下のコードは 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
いくつかの言語の構文グループの何かによって、中央のドットが表示されなくなります。そのソリューションをより信頼できるものにする方法を(まだ?)知りません。
スペースを強調表示するには、検索するだけです。
/<スペース>
ノート:
スペースとタブをハイライトするには:
/[<スペース><タブ>]
ハイライトを削除する簡単な方法は、他のものを検索することです: /asdf
(ランダムな文字の短いリストを入力するだけです)
この質問に対する他のすべての回答には不満がありました。スペース文字を有用な方法で強調しているものがないからです。スペースを文字として表示することは、タブとスペースを混在させることが有害な空白形式の言語で特に役立ちます。
私の解決策は、タブを表示し、複数のスペースに下線を引くことです。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 / \+/
これを使用すると、タブは として表示され|
、スペースは として表示されます_
。これにより、コード スタイルを混在させている場合に非常に簡単にわかります。
私が見つけた唯一の欠点は、このスニペットがコンテキストに合わせて背景色を調整しないことです (コメントのように)。
上記のすべての回答は、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()
:match CursorLine /\s\+/
「スペースを表示するにはスペースを検索する必要があります」ビットを回避しますが、スペースに対して非強調表示を行うように構成することはできません。CursorLine は任意の強調表示グループにすることができ、デフォルトのテーマではプレーンな下線です。
ハイライト検索
:set hlsearch
その中.vimrc
で
スペースタブと改行を検索します
/ \|\t\|\r
またはすべての空白文字を検索します
/\s
すべての非空白文字の検索 (空白文字は表示されないため、単語間の空白文字は表示されますが、末尾の空白文字は表示されません)
/\S
すべての末尾の空白文字を表示するには - 行末に
/\s$
あなたが使用することができます
:set list
ラインの構造を実際に見ることができます。タブと改行が明示的に表示されます。ブランクを見ると、それは本当にブランクです。
スペースを強調表示することもできます (スペースをブロックに置き換えます)。
:%s/ /█/g
(書き込む前に元に戻す)
これを .vimrc に追加するとうまくいきます。他に競合するものがないことを確認してください..
autocmd VimEnter * :syn match space /\s/
autocmd VimEnter * :hi space ctermbg=lightgray ctermfg=black guibg=lightgray guifg=black