
book1
下のテキストでおよびをにbook2
置き換えるには、2行目と3行目の先頭に移動してクリックしますpen
。pen
(ドット)は単語を置き換えます。
pen;
book1;
book2;
book3;
しかし、複数の単語をインポートされたテキストに置き換える方法は?たとえば、私はbook 1
andをbook 2
次に変更したいと思います。pen
今後:
pen;
book 1;
book 2;
book 3;
後ろに:
pen;
pen;
pen;
book 3;
単語を2回引っ張らずに交換しbook 1
て交換できますか?キーバインディングがいいと思いますか?book 2
pen
答え1
この機能があまりにも頻繁に必要であるため、これを簡素化し、最大速度を可能にするプラグインを作成しました。レジスタと交換。
プラグインは、gr
{モーション}/テキストオブジェクト、全行、または現在の選択に含まれるテキストをレジスタの内容に置き換える2-in-1コマンドを提供します。前のテキストはブラックホールレジスタから削除されます。つまり、消える。多くのエッジケースを透過的に処理し、.
標準コマンドを使用して迅速な繰り返しを可能にします。気に入らない場合は、そのページに代替案へのリンクがあります。 (@s1n7azのコードスニペットのように動作しますが、プラグインとしてはより複雑で強力です。)
答え2
このRedditコメント私が得た最高のソリューションです。とても簡単です。
基本レジスタを変更せずにテキストを置き換えるコマンドを定義しました。たぶんこれはあなたにも役立ちます。おそらくこれをベースにしたようですが、どこでアイデアを得たのかはよく覚えていませんが、実装する前にどこかが見たようです。
nnoremap <silent> cp :let g:substitutemotion_reg = v:register \ <bar> set opfunc=SubstituteMotion<CR>g@ " substitute {motion} text with contents of a register function! SubstituteMotion(type, ...) let l:reg = g:substitutemotion_reg if a:0 " visual mode, use '< and '> marks silent exe "normal! `<" . a:type . "`>\"_c\<c-r>" . l:reg . "\<esc>" elseif a:type == 'line' " linewise silent exe "normal! '[V']\"_c\<c-r>" . l:reg . "\<esc>" elseif a:type == 'block' " blockwise-visual silent exe "normal! `[\<C-V>`]\"_c\<c-r>" . l:reg . "\<esc>" else " characterwise silent exe "normal! `[v`]\"_c\<c-r>" . l:reg . "\<esc>" endif endfunction
これを使用するには、cpi(など)を入力すると、最も近い角かっこペア内のテキストがデフォルトのレジスタの内容に置き換えられます。