1. hyuki
Changes in body
Source | HTML | Preview
@@ -1,59 +1,80 @@
Vimで、文字列を別のところに「持って行って置換する」効率的な方法は?
##前置き
これは私が答えを知っているパズルではなく、Vimmer諸氏への純粋な質問です。
「Vimで文字列を別のところに「持って行って置換する」効率的な方法は?」
意味がよく伝わるように例で説明します。
## 例
たとえば、以下のような文章を書いているとき。
> **BEFORE:**
> Lorem ipsum dolor sit amet, consectetur adipisicing elit,
sed do eiusmod tempor incididunt **ut labore et dolore** magna
aliqua. Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure **dolor in reprehenderit** in voluptate velit
esse cillum dolore eu fugiat nulla pariatur. Excepteur
sint occaecat cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
カーソルは現在 **BEFORE:**の **dolor in reprehenderit** の初めの **d** にあるとし、モードはノーマルモードだとします。
**BEFORE:** で太字にした中ほどの **dolor in reprehenderit** を、三行上の **ut labore et dolore**の箇所に「持って行って置換する」ということをやりたいのです。つまり編集後は以下の **AFTER:** のようになっていてほしいということです。
> **AFTER:**
Lorem ipsum dolor sit amet, consectetur adipisicing elit,
sed do eiusmod tempor incididunt **dolor in reprehenderit** magna
aliqua. Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure **dolor in reprehenderit** in voluptate velit
esse cillum dolore eu fugiat nulla pariatur. Excepteur
sint occaecat cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
どのようなキーシーケンスで編集するのが効率的かという問題です。終了時のカーソル位置はどこにあってもかまいません。
##素朴な解答例
素朴な解答例としては
* 3yw(持って行く文字列をコピーする)
* 3k2w(目的地に移動する)
* P(ペーストする)
* 4de(不要な部分を削除)
という11キーが考えられますが、もっと短くならないのかなと思っています。
ご教示いただければありがたいです。
## 追記
上に書いた「例」はあくまで例でして、私が特に疑問に思っているのは P や p でペーストして d でデリートするしかないのかな、ということでした。言葉足らずだったので補足します。
テキストを編集していてよく出会う状況なので何か改善の余地はないかなと思って書いています。
+
+## コメント欄で紹介された各種方法
+
+コメント欄でいろんな方法やTipsをご教示くださり、ありがとうございます。
+
+* 3k2w で目的地に行く代わりに、g# の「現在の単語を含む文字列を上方向に検索」で "dolor" から "dolore" まで行ける。
+* 4cwで挿入モードに入り、<Ctrl-R>0<ESC> で「レジスタ0からペースト」を使う手がある。ピリオドキーでの反復ができる。
+* 「ヴィジュアルモードでpを打つとヤンクした文字列で選択範囲が置換される」
+
+なぜか結城の環境では「ヴィジュアルモードでpを打つとヤンクした文字列で選択範囲が置換される」が効かなかったです。実は私が求めていたものはこの機能のような気がします。何か設定があるのかしら。
+
+プラグインの紹介もありがとうございます。
+
+* プラグイン: vim-operator-replace
+* プラグイン: vim-visualstar
+
+「カーソル下の一単語とヤンクしてきた文字列を置き換える」キーシーケンスを割り当てる。
+
+```
+nnoremap ciy ciw<C-r>0<ESC>
+```