Vimに非ASCII文字を強調表示させようとしています。利用可能な設定、正規表現検索パターン、またはプラグインはありますか?
検索で[]
文字クラスの範囲を使用すると、exclude ASCII 16進文字範囲ができるはずです。したがって、他のすべてを強調表示(hlsearch
が有効になっていると仮定)横になっている文字外側 ASCIIの範囲:
/[^\x00-\x7F]
これは、ASCII [^]
とASCII 0x00
(0-127)の間の文字に対してnegativeマッチ(0x7F
を介して)を行います。 、そして私の簡単なテストで動作するようです。もちろん、拡張ASCIIの場合、\xFF
を使用して、\x7F
ではなく/[^\x00-\xFF]
まで範囲を拡張します。
\d
で10進数で表現することもできます:
/[^\d0-\d127]
印刷できない文字の除外など、より具体的なものが必要な場合は、それらの範囲を文字クラス[]
に追加する必要があります。
はい、一致した文字列を強調表示するネイティブ機能があります。 Vim内で、次の操作を行います。
:help highlight
:help syn-match
syn-match
は、グループに一致する文字列を定義します。 highlight
は、グループで使用される色を定義します。 vimrcファイルの構文強調表示について考えてください。
したがって、.vimrcファイルで以下のコマンドを使用できます。
syntax match nonascii "[^\x00-\x7F]"
highlight nonascii guibg=Red ctermbg=2
検索エンジンを介してここにたどり着き、非ASCII文字の強調表示を達成できない他の(これからは不運な)人々のために、これを試してください(これを.vimrcに入れてください):
highlight nonascii guibg=Red ctermbg=1 term=standout
au BufReadPost * syntax match nonascii "[^\u0000-\u007F]"
これには、通常の(ファイルタイプ[ファイル拡張子]ベース)構文定義と衝突しないという利点があります。
non printable文字にも興味がある場合は、これを使用してください:/[^\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
この正規表現も機能します。これは、 briceolion.com から「非ASCII文字を削除するvim」の最初のGoogleヒットであり、:set hlsearch
が強調表示されます:
:/[^[:alnum:][:punct:][:space:]]/g
このトピックに関する他の回答と私が得た回答に基づいて here.vimrc
にこれを追加したので、<C-w>1
と入力して非ASCII強調表示を制御できます。また、内部のコメントも表示されますが、使用するファイル構文ごとにコメントグループを追加する必要があります。つまり、zshファイルを編集する場合は、zshComment
を行に追加する必要があります
au BufReadPost * syntax match nonascii "[^\x00-\x7F]" containedin=cComment,vimLineComment,pythonComment
それ以外の場合、非ASCII文字は表示されません(すべてのグループで非ASCII文字を表示したい場合は、containedin = ALLを設定することもできます)。別のファイルタイプでコメントがどのように呼び出されるかを確認するには、目的のタイプのファイルを開き、vimで:sy
と入力してから、コメントの構文項目を検索します。
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文字(または問題の構文グループ)を強調表示する別の解決策があります。それは最善ではありませんが、一時的な修正です。
試すことができます:
:syntax match nonascii "[^\u0000-\u007F]" containedin=ALL contained |
\ highlight nonascii ctermfg=yellow guifg=yellow
これには、他のソリューションのパーツが混在しています。 contained
を削除してもかまいませんが、ドキュメントからは、再帰自体の問題が発生する可能性があります(私は理解しています)。他の定義済みパターンを表示するには、syn-contains
セクションに含まれます。
:help syn-containedin
:help syn-contains
複製された問題: vimでアイテムをハイライト優先度に設定