Vimですべての空白を文字として表示する方法が見つかりません。私が見つけたすべては、タブ、末尾のスペースなどに関するものでした。
list
とlistchars
考えるすべての人にとって。この状況ではほとんど見えません。ほとんどの状況を把握できることに同意しますが、すべてのスペースを適切に強調表示できると便利です。
Vimですべての空白を文字として表示する方法が見つかりません。私が見つけたすべては、タブ、末尾のスペースなどに関するものでした。
list
とlistchars
考えるすべての人にとって。この状況ではほとんど見えません。ほとんどの状況を把握できることに同意しますが、すべてのスペースを適切に強調表示できると便利です。
回答:
他の人が言ったように、あなたは使うことができます
: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>
.vimrc
ファイルに追加することをお勧めします。これにより、この非表示の文字を表示する簡単な方法を:set list
いつでも簡単に有効にできます(このページを再度グーグルする必要はありません)。
パッチ7.4.710以降、listcharsを使用して、スペースの代わりに表示する文字を設定できるようになりました。
:set listchars+=space:␣
したがって、すべての空白文字を文字として表示するには、次のようにします。
:set listchars=eol:¬,tab:>·,trail:~,extends:>,precedes:<,space:␣
:set list
メーリングリストに関するディスカッション:https : //groups.google.com/forum/?fromgroups#!topic / vim_dev / pjmW6wOZW_Q
:help listchars
は、「space」が「listchars」の有効なオプションであるかどうかを確認するために入力します。そうでない場合は、指定した@brettanomycesのパッチにvimをアップグレードしてください。または、スペースを表示したくない場合は、「スペース」をsetコマンドから除外してください。
space:·
ことがなどMS Wordやメモ帳++、次のようになりますよう、)
<C-K>.M
vimと入力し·
ます。詳細:h digraph
については、を参照してください。
:set list
有効にする。
:set nolist
無効にします。
: set list!
:)
Shift
との!
両方で入力するのが困難ですno
。.vimrcに入れている場合は、exclamフォームの方が読みやすいことに同意します。
:set list!
を入力する必要なしに切り替えますnolist
。!
単純に現在設定されているものの反対を行います。特にを使用する場合は、これを常に使用し:set paste!
ます。私は見つけるために、矢印キーを押す嫌い:set paste
か:set nopaste
笑
ここでの他の答えはより包括的だと思いますが、タブとスペースを視覚的に区別するために通常使用するトリックを共有したいと思いました。
:syntax on
:set syntax=whitespace
これらは、Whitespaceプログラミング言語の構文強調表示ルールです。タブは緑で表示され、スペースは赤で表示されます。:)
:set list
他の多くの回答で述べられているように組み合わせることができますが、タブは緑色のハイライトなしで^ Iとして表示されますが、スペースは赤色で表示されます。
:set list
すべての空白を文字として表示します。すべてが、スペースは、まだ昔ながらのスペースを見れば、それは本当に昔ながらのスペースの手段だと通常の状態よりも異なります。:)
:set nolist
!
終わり:set list!
:se hls | /\_s
。すべてを取得しますが、set list
スペースは無視します。もう一度オフにし:se nohls
ます。この記事にそれについての詳細:albertech.blogspot.com/2015/02/...
設定した場合:
: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
これには、+ conceal機能を備えたvim 7.3が必要です。
2014 年10月24日更新少し拡大します。もちろん、conoredキャラクターの強調表示を定義することも可能です。
隠された文字がどのように見えるかを構成できます。強調表示するには、少なくとも1回は「非表示」の強調表示グループ: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の回答を調べてください。機能を設定する場合、トグルコマンドを簡単に設定して、特別なハイライトの表示のオンとオフを切り替えることができます。
アップデート10/26/2014この質問からプラグインを作成しました。
更新2015年4月22日list
オプションを使用してこれを可能にするパッチがVimに含まれています。単に設定するset list listchars+=space:␣
これはVim 7.4.711以降で機能します
.vimrc
ますか?
Æ
これは奇妙な性格の選択ですが、なぜ·
ですか?
私はこれを使います
/\s
:set hlsearch
空白を強調表示します。すべての空白を検索し、ハイライトを有効にしてそれらを飛び出させます。ただし、特殊文字は印刷されません。
nnoremap <leader><space> :noh<cr>
)
空白によって「」文字を意味する場合、私の提案は検索/置換にすぎません。他の人が示唆したように、非印刷文字をで設定された表示文字にset list
変更します。listchars
スペースを他の文字として明示的に表示するには、以下のようなものがうまくいくはずです。
:%s/ /█/g
次に、変更を元に戻し、再び元に戻します。
(█私はこの正確なキーシーケンスを押し取得します:%s/ /CTRL-KFB/g)
:set list
私に逆のように見え、可視文字( 'スペース')を_non priting_(??)に変更します。私はこれが内部のマッチを使うことができるかどうか疑問に思う例えば:match MyBlackBlockChar "appropriate_regex
それはトリックをするべきであるね?
スペースを強調表示するには、それを検索するだけです。
/ <スペース>
ノート:
スペースとタブを強調表示するには:
/ [<space> <tab>]
ハイライトを削除する簡単な方法は、他のものを検索することです:/ asdf
(ランダムな文字の短いリストを入力するだけです)
/<space>
対/\s
。ここでの提案を使用することは自明ではなく、より速いと思います。
以下のコードは、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
いくつかの言語の構文グループに何かがあると、中央のドットが表示されません。そのソリューションの信頼性を高める方法は(まだ?)わかりません。
skipwhite
は構文ルールの引数であり、構文グループが一致しないようにします(ただし、すべてのグループに含めることが許可されている必要があります)。
私はこの質問に対する他のすべての答えに不満を感じました。なぜなら、それらのどれもスペース文字を有用な方法で強調していないからです。文字としてスペースを表示することは、タブとスペースを混在させることが有害な、空白でフォーマットされた言語で特に役立ちます。
私の解決策は、タブを表示して複数のスペースに下線を引くことです。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()
:match CursorLine /\s\+/
「スペースを表示するためにスペースを検索する必要があります」というビットは避けますが、スペースにハイライトしないことを実行するようにafaictを構成することはできません。CursorLineは任意のハイライトグループにすることができ、デフォルトのテーマではプレーンな下線です。
空白を表示するために特殊文字を使用するのが好きです。簡単に確認できるように、切り替えるマップも重要な機能です。
この機能は、2004年以降更新されていない古いvimスクリプトにあります。
vim-scripts/cream-showinvisibles@vim.org
プロジェクトのvimスクリプトとバンドルのおかげで、このプラグインを復活させることができます
vim-scripts / cream-showinvisibles @ github
さらに良いことに、これに対する私の2セントは、(事前定義されたの代わりに)構成可能なショートカットを追加することです。F4
これを〜/ .vimrcに追加します
Plugin 'albfan/cream-invisibles'
let g:creamInvisibleShortCut = "<F5>" "for my F4 goto next error
vimにプラグインをインストールする
:PluginInstall
そこに行く
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
)
」のように見えますset listchars=tab:»\ ,space:·
はあなたの参照のために使用しました。
gvim
との両方で機能しvim
ます。
これらのハックをコメントとして.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
:set list
。それは私たちの質問に答えません。(他のコーナーへ:以下のmrucciの回答は役に立ちますが、実際の解決策ではありません。)