2013-10-14 9 views
9

Vimで検索レジスタをコマンドラインに貼り付ける方法はありますか?周囲は含まれていません\<ブラケット\>?私はしばしば自分自身がバッファー内で検索をしてから、一致したパターンをgrep(より具体的にはack.vim)の引数として使用したいと思っています。ここでVim:ブラケットなしのコマンドラインで検索レジスタを貼り付けてください

あなたはfooを検索して:Ack '<C-r>/「を入力した場合に何が起こるかです:

:Ack '\<foo\>' 

これは何かを見つけるために失敗します。代わりに私が欲しいのは:

:Ack 'foo' 

これはもちろん単純な例です。これがより価値のある場所は、より複雑な検索結果です。

私は<C-r><C-w><C-r><C-a>という単語をカーソルの下に貼り付けることを認識していますが、これらは多くの場合十分ですが、必ずしもそうではありません。

+1

' /'入力した検索パターンが挿入されます。 'foo \ d'を検索した場合、' /'は' foo9'ではなく 'foo \ d'を挿入することに注意してください。 – romainl

+0

Aha!それは理にかなっている。この場合、 '*'を使ってテストしていたのは、周囲の角括弧が来るところの単語を強調表示するだけでした。私は '/ \ v'にマップされた'/pattern'を以前に試していて、検索レジスタに '\ v'を得ましたが、接続はしませんでした。あなたが答えとしてあなたのコメントを載せたいなら、私はそれを受け入れてうれしいです。 –

+0

これに関心のある人にとっては、 '*'の代わりに 'g *'を使うと '\ <' brackets '\>'のない検索パターンが得られます。 –

答えて

8

<C-r>/は、入力したとおりに検索パターンを挿入します。/fooを実行した場合、検索レジスタにはfooが含まれます。 <C-r>/は、検索パターンではなく、試合を挿入すること

注:foo\dを検索する場合、<C-r>/foo\d、ないfoo9を挿入します。

*または#を使用して検索を単語全体に限定すると、\<\>が追加されました。 g*g#~ではなく、を検索すると、\<\>を避けることができます。ここで

は、おそらく便利なマッピングである:

nnoremap <F6> :Ack '<C-r>=expand("<cword>")<CR>' 
+0

大きな説明は意味があります。 > let g:ack_use_cword_for_empty_search = 1 を私のvimrcで実行すると、現在強調表示されている単語を検索するというこの目的を解決しました。パラメータを指定しなければ、デフォルトで検索バッファにある単語が検索されます。 –

4

あなたは純粋にリテラル検索をやっている場合を除き、検索パターン(正規表現)と一致(のリスト)(違いがありますバッファからの文字列)。

後者に興味がある場合は、PatternComplete pluginはすべての一致の挿入モードの完了を提供し、<C-R>&の最後の検索パターンの最初の一致を挿入することもできます。

+0

ありがとう、これはよさそうだ。 GitHubリポジトリか、それとも病原体と互換性のある形式で、すべての依存関係とともにプラグインを含むものがありますか?そうでなければ、自分で作ってGitHubに貼ってもいいかもしれません。 –

+0

これはhttp://vimscripts.org/で提供されています。[here](https://github.com/vim-scripts/PatternComplete)と[依存関係](https://github.com/vim-scripts/ingo) -としょうかん)。 –

関連する問題