Vimの「最後の検索」レジスタ(「/」)に「ヤンク」する簡単な方法はありますか?
Vimのドキュメントから、答えは「いいえ」のようですが、「let」コマンドを使用して割り当てることができます。
It is writable with ":let", you can change it to have 'hlsearch' highlight
other matches without actually searching. You can't yank or delete into this
register.
理想的には、私がしたいことは次のようなものです:
"/5yw
カーソルの下の次の5ワードをヤンクして、最後の検索バッファーに入れます。
あるいは、名前付きレジスターの内容を検索する方法がある場合、それも機能します。言い換えれば、私ができるなら:
"A5yw
次に、レジスタAの内容を検索します。これも機能します。
私が来ることができる最も近いのは、名前付きレジスタにヤンクして、そのレジスタを最後の検索レジスタにコピーすることです。
"A5yw
:let @/=@A
長い質問が長くなるリスクがありますが、「ヤンクして検索」したいのは常に5語ではないことを述べたいと思います。17文字の場合もあれば、行末までの場合もあります。そのため、ハードコーディングされたマクロでは、必要な柔軟性が得られません。
/
を押して検索文字列を入力したら、Ctrl-R
を使用して、使用するレジスタを表す文字を入力できます。
例えば。
"Ayw
でWordをレジスタAにヤンクします。/ ^R A
を使用して、レジスターAの内容を検索ストリングに入れます。ヤンクテキストを格納するためにレジスターを使用しなかった場合、vimは0
レジスターを使用します。 Ctrl-R 0
の後に/
と入力すると検索できます。
より複雑な例。別のバッファで、現在カーソルの下にある引用符内のテキストを検索するとします。
yi"
(ヤンクインナークォート)でそれを行うことができます/Ctrl-R 0
そのために次のコードを使用しています。
vnoremap <silent>* <ESC>:call VisualSearch('/')<CR>/<CR>
vnoremap <silent># <ESC>:call VisualSearch('?')<CR>?<CR>
function! VisualSearch(dirrection)
let l:register=@@
normal! gvy
let l:search=escape(@@, '$.*/\[]')
if a:dirrection=='/'
execute 'normal! /'.l:search
else
execute 'normal! ?'.l:search
endif
let @/=l:search
normal! gV
let @@=l:register
endfunction
つまり、基本的には#および*コマンドの拡張バージョンです。カスタムオペレーター(モーションを期待するコマンド)を定義したいようです。私は実際にこれを行ったことはありませんが、- plugin を見つけたので、それが簡単になりそうです。いくつかの例が提供されています。
選択の検索:
最初に行のセクションをヤンクしたい場合は、「v」を使用してカーソルで移動し、必要なものをマークしてから、yを押してヤンクします。これで、選択はレジスター0にあります。
次に、/Ctrl-R 0