2010-11-30 7 views
27

次のような操作パターンが繰り返されることがよくあります。貼り付けられたテキストを選択するvimコマンドはありますか?

私は通常、ビジュアルモードに入り、いくつかの行またはブロックを選択します。その後、yを使用してそれらをヤンクし、pまたはPを使用して貼り付けます。次のステップは、貼り付けられたテキストを選択すること、変数または関数名を置き換えること、またはインデントを変更することです。

私はgvを使用して "origin"を再選択できることを知っていますが、私が望むのは "destination"を選択する同様のコマンドです。
After using "p" or "P" in Visual mode the text that
was put will be selected.

をしかし、あなたは、まったく新しいブロックを挿入されているわけではないレジスタの内容によって選択を交換するときにのみ有効です。

:help gvが言及しています。あなたは

`[v`] 

答えて

42

私は

nnoremap <expr> g<c-v> '`[' . strpart(getregtype(), 0, 1) . '`]' 

ブノワの関数に以下の単純なマッピングを好む表現マップ詳細については、こちらをご覧ください:

:h :map-expression 

@ZyXが指摘したようにstrpartは不要で、次のように書き直すことができます。

nnoremap <expr> g<c-v> '`[' . getregtype()[0] . '`]' 
+0

うわー、これらのマークを知りませんでした、あなたは本当に教祖です。 – Benoit

+1

私はそれを 'gp'に再マップしました。助けて!私はその情報を掘り起こすことができなかったと思うので、これは素晴らしいことです。ありがとう!コピー後もインデントを変更するのは素晴らしいことです。 –

+0

:)テンプレートエクスパンダプラグインで数年前に発見され、使用されました。それは私が毎日使うマークではありません。それらをすべて覚えておくのは難しいです。 –

8

を探している

+0

はい、選択範囲が最後の行よりも大きい場合は、ブロック単位選択でも機能するかどうか疑問に思っていますか? – Benoit

+0

@Benoit疑いはしないで、ただテストしてください。 'set virtualedit + = block'で動作するはずです。ブロックワイズの選択vimを貼り付けるときにスペースが足りない長さを埋めるので、' set virtualedit'が必要な状況は決してありません。 []印)。 – ZyX

関連する問題