14

私は Ack ( https://github.com/mileszs/ack.vim ) を--literalフラグ付きで使用して、Vim でプロジェクトを検索しています。%または#文字を含む文字列を検索するたびに、検索が期待どおりに一致しないことに気付きました。いくつかの調査を行ったところ、Vim がコマンドでこれらの文字を展開するためであることがわかりました (%は現在のファイルであり#、何か他のものであることがわかりません)。

これらのシンボルがコード内でかなり頻繁に出てくることを考えると、これは検索を実行するときのかなり迷惑な動作です。検索が期待どおりに機能するように、できれば自動的にそれらをエスケープする方法はありますか? 私の現在のマッピングは次のとおりnnoremap <leader>al :Ack --literal<space>です。

CSS ファイルのどこかにセレクター#bodyがあり、それを見つけたいとします。これらは私が試したことです(うまくいきませんでした):

:Ack --literal #body
:Ack --literal \#body
:Ack --literal "#body"
:Ack --literal "\#body"

ここでエスケープが通常どおり機能しない理由、またはこれが何を探しているのかについてのアイデアはありますか? これらの例は何にも一致しませんでした。

解決

文字をダブルエスケープすることで機能するようになりました。たとえば、結果ウィンドウのステータスラインに:Ack --literal "\\#body"表示され、期待される結果が表示されます。:ack -H --nocolor --nogroup --column --literal "#body"引用符も必要なようです。

4

4 に答える 4

11

バックスラッシュを前に付けるだけです

:!echo %

現在のバッファのファイル名を出力します

:!echo \%

単独の '%' 文字を出力します

于 2011-04-14T22:18:27.267 に答える
5

どうやらack.vim issueで述べられているように、複数回エスケープする必要があります:

:Ack \\\#foo
于 2014-04-07T22:36:33.023 に答える
4

@seheの答えに1つ追加があります:あなたがそうする!...か、 vimがそれ自体でsystem('...')は処理しないが、次のようにシェルを呼び出すとき: . ack 呼び出しの場合、これは のようなものになるため、 はコメント文字であるため、bash は後のすべてを無視します。引用符で囲まれた文字列内ではコメントができないため、そうしません。...{shell} {shellcmdflag} {shellxquote}...{shellxquote}["/bin/bash", "-c", "ack -H --nocolor --nogroup --literal #body"]--literal#'#body'

于 2011-04-15T19:48:49.587 に答える
3

これは ack.vim のバグです。どういうわけか、実行しても ack プログラムが呼び出されません。:Ack --literal \#body

しかし、私は使用しました

`strace -f -o-e trace=process gvim | tee /tmp/log`

そして、:Ack --literal '\#body'(余分な引用符に注意してください)実行すると期待どおりに機能するようです:

[pid  3833] execve("/usr/bin/ack", ["ack", "-H", "--nocolor", "--nogroup", "--literal", "#body"], [/* 25 vars */] <unfinished ...>

私は実際にそれをテストしていません...

于 2011-04-15T07:04:48.790 に答える