回答:
[]
検索で文字クラスの範囲を使用すると、ASCII 16進文字範囲を除外できるため、ASCII範囲外にあるhlsearch
他のすべての文字が強調表示されます(有効になっている場合)。
/[^\x00-\x7F]
これは、ASCII とASCII (0-127)の間の文字に対して(を介して)否定的な一致を行い、私の簡単なテストで機能するように見えます。もちろん、拡張ASCIIの場合、を使用する代わりに、範囲をまで拡張します。[^]
0x00
0x7F
\xFF
\x7F
/[^\x00-\xFF]
また、次のように10進数で表すこともできます\d
。
/[^\d0-\d127]
印刷できない文字の除外など、より具体的なものが必要な場合は、それらの範囲を文字クラスに追加する必要があります[]
。
はい、一致した文字列を強調表示するネイティブ機能があります。Vimの内部で、次の操作を行います。
:help highlight
:help syn-match
syn-match
一致する文字列をグループに分類します。
highlight
グループが使用する色を定義します。vimrcファイルの構文強調表示について考えてみてください。
したがって、.vimrcファイルで以下のコマンドを使用できます。
syntax match nonascii "[^\x00-\x7F]"
highlight nonascii guibg=Red ctermbg=2
:
vimrcでコマンドの前にを置く必要はありません。
termbg
Ubuntu Server 12.10にインストールされているVIM 7.3の合法的なコマンドではないようです。
termbg
場合、Ubuntu Server 12.10にインストールされているVIM 7.3では有効なパラメーターではないようです。
term
は背景色を持つことができませんが、カラー端末cterm
は持つことができます。
検索エンジンを介してここに到達し、ASCII以外の文字の強調表示を実行できない他の(これから不運ではない)人々は、これを試してください(これを.vimrcに入れてください)。
highlight nonascii guibg=Red ctermbg=1 term=standout
au BufReadPost * syntax match nonascii "[^\u0000-\u007F]"
これには、通常の(ファイルタイプ[ファイル拡張子]ベースの)構文定義と衝突しないという追加の利点があります。
E319: Sorry, the command is not available in this version: au BufReadPost * syntax match nonascii "[^\u0000-\u007F]" Press ENTER or type command to continue
Linuxのミント17.3
containedin=ALL
、最終行の終わりに追加して、にすることができますau BufReadPost * syntax match nonascii "[^\u0000-\u007F]" containedin=ALL
。(Unicodeが許可されている場合)私は価値のある注意散漫を見つけます、ここでの元の答えはステートメント内の非ASCIIコードなどのことをキャッチしませんif
...
autocmd BufRead ....
Vimのautogroupに自分を含めることは常に安全です。ただし、特別な理由がない限り...
この正規表現も機能します。これはbriceolion.comからの「vim非ASCII文字の削除」の最初のGoogleヒットであり、次の点:set hlsearch
が強調表示されます。
/[^[:alnum:][:punct:][:space:]]/
:%s/[^[:alnum:][:punct:][:space:]]//gc
、最初に強調表示してから置き換えるものでした。
印刷できない文字にも関心がある場合は、次の文字を使用してください。/[^\x00-\xff]/
私はそれを関数で使用します:
function! NonPrintable()
setlocal enc=utf8
if search('[^\x00-\xff]') != 0
call matchadd('Error', '[^\x00-\xff]')
echo 'Non printable characters in text'
else
setlocal enc=latin1
echo 'All characters are printable'
endif
endfunction
enc
してみてくださいfenc
。デフォルトのエンコーディングは(2013年では)latin1であるため、エンコーディングを変更しました。文字セットがlatin1の場合、関数は印刷不可能な文字を強調表示しません。ハイライトを表示するにERROR
は、カラー構文ファイルにキーが必要です。これは私のものです:hi Error guifg=Black guibg=Orange
このトピックに関する他の回答と私がここで得た回答に基づいて、これをに追加した.vimrc
ので、と入力してASCII以外の強調表示を制御できます<C-w>1
。使用するファイル構文ごとにコメントグループを追加する必要がありますが、内部コメントも表示されます。つまり、zshファイルを編集する場合は、次zshComment
の行に追加する必要があります。
au BufReadPost * syntax match nonascii "[^\x00-\x7F]" containedin=cComment,vimLineComment,pythonComment
そうでない場合、非ASCII文字は表示されません(すべてのグループで非ASCII文字を確実に表示したい場合は、containsin = ALLを設定することもできます)。別のファイルタイプでコメントがどのように呼び出されているかを確認するには、目的のタイプのファイルを開い:sy
てvim と入力し、構文項目でコメントを検索します。
function HighlightNonAsciiOff()
echom "Setting non-ascii highlight off"
syn clear nonascii
let g:is_non_ascii_on=0
augroup HighlightUnicode
autocmd!
augroup end
endfunction
function HighlightNonAsciiOn()
echom "Setting non-ascii highlight on"
augroup HighlightUnicode
autocmd!
autocmd ColorScheme *
\ syntax match nonascii "[^\x00-\x7F]" containedin=cComment,vimLineComment,pythonComment |
\ highlight nonascii cterm=underline ctermfg=red ctermbg=none term=underline
augroup end
silent doautocmd HighlightUnicode ColorScheme
let g:is_non_ascii_on=1
endfunction
function ToggleHighlightNonascii()
if g:is_non_ascii_on == 1
call HighlightNonAsciiOff()
else
call HighlightNonAsciiOn()
endif
endfunction
silent! call HighlightNonAsciiOn()
nnoremap <C-w>1 :call ToggleHighlightNonascii()<CR>
どういうわけか、上記の答えはどれもうまくいきませんでした。
だから私は :1,$ s/[^0-9a-zA-Z,-_\.]//g
それは私が興味を持っているキャラクターのほとんどを保持します。
誰かがすでに質問に答えています。ただし、まだ問題がある他の人のために、コメント(または問題の構文グループ)で非ASCII文字を強調表示する別のソリューションを次に示します。それは最善ではありませんが、一時的な修正です。
1つ試すことができます。
:syntax match nonascii "[^\u0000-\u007F]" containedin=ALL contained |
\ highlight nonascii ctermfg=yellow guifg=yellow
これには、他のソリューションの部分が混在しています。を削除することはできますcontained
が、ドキュメンテーションから、(私が理解しているように)再帰自体の潜在的な問題がある可能性があります。他の定義済みパターンを表示syn-contains
するには、セクションにそのパターン が含まれます。
:help syn-containedin
:help syn-contains
複製された問題:vimでアイテムをハイライトの優先順位を高く設定する
/[^\d0-\d127]