2

*コマンドと同じように、ビジュアルモードで選択したパターンを検索したいと思います。

デフォルトでレジスターを埋めるビジュアルモードヤンキングと、レジスター(- 、 )の内容を検索してから- (取得)してパターンを検索として貼り付ける0可能性を認識しています。/CtrlR0CtrlR0

物事は、私は最初にヤンクしたくありません、私はすでに何かをヤンクしました、私はただ今ビジュアルモードで選択されたものを検索したいです。

どうすればいいですか?さまざまな「Nを登録するためのヤンク」トリックをいじることなくそれを行うことはできますか?

4

3 に答える 3

1

Xサポート('guioption'利用可能かどうかを確認)で構築されたgvimまたはコンソールvimを使用していて、にa存在する場合は、レジスター'guioptions'から現在の選択を取得できます*。そうでなければ、VimL関数を記述せずにそれを行う簡単な方法はないのではないかと思います。VimL関数は、<>マークの値に基づいて選択を抽出します。その関数はCTRL-R =、検索プロンプトで使用できます。

于 2012-07-22T14:18:12.183 に答える
1

概説したすべてのステップを組み合わせてマッピングしてみませんか?欠落しているのは、名前のないレジスタを保存して復元することと、少しエスケープすることだけです。

" Atom \V sets following pattern to "very nomagic", i.e. only the backslash has special meaning.
" As a search pattern we insert an expression (= register) that
" calls the 'escape()' function on the unnamed register content '@@',
" and escapes the backslash and the character that still has a special
" meaning in the search command (/|?, respectively).
" This works well even with <Tab> (no need to change ^I into \t),
" but not with a linebreak, which must be changed from ^M to \n.
" This is done with the substitute() function.
" gV avoids automatic reselection of the Visual area in select mode.

vnoremap <silent> * :<C-U>let save_unnamedregister=@@<CR>gvy/\V<C-R><C-R>=substitute(escape(@@,'/\'),"\n",'\\n','ge')<CR><CR>:let @@=save_unnamedregister<Bar>unlet save_unnamedregister<CR>gV
于 2012-07-22T14:45:49.490 に答える
0

ビジュアルモードで*作業するために機能するソリューションは次のとおりです。[count]

vnoremap * :call <SID>VisualSearch()<cr>:set hls<cr>
fun! s:VisualSearch() range
   let unnamed = @"
   let repeat = v:count
   exe 'norm gv"zy' | let @/ = @z
   for x in range(repeat)
      call search(@/, 'ws')
   endfor
   let @" = unnamed
endfun

5行目の「z」を使用しないレジスタに変更します。

于 2012-07-22T19:56:10.670 に答える