vimgrep はユニコード文字列を検索できますか? 例えば:
a.txt
ワイド文字列「hello」が含まれていますが、 vimgrep hello *.txt
何も見つかりませんでした。もちろん、正しいパスにあります。
この場合、「Unicode」は少し誤解を招きます。あなたが持っているのは、「Unicode標準によって提供される方法に従ってエンコードされた」テキストの典型ではありません。これは、コード ポイント0000
または00
. 一部の Java プログラムは、そのようなゴミを出力します。
したがって、検索パターンが の場合hello
、Vim:vim
は (NULL なしで) 完全に検索および検出hello
できますが、(NULL を使用すると) 見つけることはありませんhello
。
一方、h^@e^@l^@l^@o
( ^@
is ) を検索すると(NULL あり) は見つかりますが (NULLなし) は見つかりません。<C-v><C-@>
hello
hello
とにかく、そのファイル/バッファを変換するか、そのようなゴミにならないようにすることは、はるかに優れた長期的な解決策です.
Vim がファイルのエンコーディングを検出できる場合、はい、Vim はファイルを grep できます。:vimgrep
最初にファイルを通常どおり (autocmds を含めて) 隠しバッファーに読み込み、次にバッファーを検索することによって機能します。
ファイルはリトルエンディアンの UTF-16 で、バイト オーダー マーク (BOM) がないようです。Vimはこれを検出できますが、デフォルトでは検出しません。
まず、Vim が Unicode の内部サポートで実行されていることを確認してください。これを行うに:set encoding=utf-8
は、.vimrc の先頭に. 次に、Vim はこのファイルのエンコーディングを検出できる必要があります。'fileencodings'
オプションはこれを制御します。
デフォルトでは、'encoding' を utf-8 に設定すると、Vim の 'fileencodings' オプションには、UTF-16 を検出する "ucs-bom" が含まれますが、BOM が存在する場合のみです。BOM が存在しないときにも検出するには、目的のエンコーディングを「fileencodings」に追加する必要があります。8 ビット エンコーディングの前に、ucs-bom の後に配置する必要があります。.vimrc の先頭でこれを実行して、Vim を再起動して使用します。
set encoding=utf-8
set fileencodings=ucs-bom,utf-16le,utf-8,default,latin1
これで、目的のエンコーディングでファイルをロードすると、編集には問題なく動作するはずです。したがって、vimgrep でも同様です。