2011-01-22 10 views
4

私はあなたが入力する必要がvimの中の全単語を検索することを知っている:Vimの全単語検索 - しかし、より速く

/\<word\><CR> 

、私がやりたいことに、この動作をマップするのですか? (私は後ろ向きに検索しないので、必要ならば前向きに検索してからNNを検索することができます)。私。私は次のようにタイプします:

?word<CR> 

と同じ結果があります(vimは単語全体を検索します)。私は数週間前からvimのコマンドとマッピングを手伝ってきましたが、これをどうやって実現するかはわかりません。何か助けてくれてありがとう。

更新:(insead of?私は\ nowを使用しています)

答えて

11

私は(ブライアンアグニューにより示唆されるように)*#を使用する傾向があるが、あなたは

?word<CR> 

を入力する必要の方法をしたい場合は、このような何か行うことができます:

function! SearchWord(word) 
    let @/ = '\<' . a:word . '\>' 
    normal n 
endfunction 
command! -nargs=1 SearchWord call SearchWord(<f-args>) 
nmap ? :SearchWord 

注意を最後の行にSearchWordの後にスペースがあります。

説明:

マッピングが?は、コマンドプロンプトを開き作るとSearchWord(スペースを含む)を入力します。コマンドはSearchWord mywordcall SearchWord('myword')と等価にします(つまり、文字列にするために引数の周りに引用符を置きます)。この関数は、検索レジスタ@/を、\<\>で囲まれた単語と等しく設定し、通常モードnを実行して、検索レジスタの内容の次のインスタンスを検索します。

もちろん、これを行うとインクリメンタルサーチのメリットが失われますが、とにかく便利です。

+0

これは、ありがとうございます。 –

8

*#(前方と後方)を使用してカーソルの下の単語を検索できます。 g*g#は同じことを行いますが、最初にカーソルの下にあるを含む単語を探します。

明らかに(!)これは既に動作するための最初のインスタンスを見つけ出す必要がありますが、連続検索では非常に効果的です。

+0

ありがとう、私はすでにこの可能性を知っていたことを言及しておきたい - 言葉がすでにカーソルの下にあるときはもちろんどちらでもよい。 –

4

Al's solutionはとてもいいですが、\<\>パターンを入力してからカーソルを2回戻しても簡単ではないでしょうか?これは私の作品:

nmap ? /\<\><Left><Left> 

この方法では、あなたはまだインクリメンタルサーチ(ちょっと)を取得します。

関連する問題