0

vimgrep はユニコード文字列を検索できますか? 例えば:

a.txtワイド文字列「hello」が含まれていますが、 vimgrep hello *.txt何も見つかりませんでした。もちろん、正しいパスにあります。

4

2 に答える 2

1

この場合、「Unicode」は少し誤解を招きます。あなたが持っているのは、「Unicode標準によって提供される方法に従ってエンコードされた」テキストの典型ではありません。これは、コード ポイント0000または00. 一部の Java プログラムは、そのようなゴミを出力します。

したがって、検索パターンが の場合hello、Vim:vimは (NULL なしで) 完全に検索および検出helloできますが、(NULL を使用すると) 見つけることはありませんhello

一方、h^@e^@l^@l^@o( ^@is ) を検索すると(NULL あり) は見つかりますが (NULLなし) は見つかりません。<C-v><C-@>hellohello

とにかく、そのファイル/バッファを変換するか、そのようなゴミにならないようにすることは、はるかに優れた長期的な解決策です.

于 2014-07-16T13:45:40.617 に答える
1

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 でも同様です。

于 2014-07-16T13:18:35.040 に答える