37987


以下のように記述されたファイルがあり

[code]

    ln -sf ~/dev/dotfiles/.profile ~/
    ln -sf ~/dev/dotfiles/.pryrc ~/
    ln -sf ~/dev/dotfiles/.vimrc ~/
    ln -sf ~/dev/dotfiles/.zshrc ~/
    
[/code]

`/dev`の部分を削除して、以下の状態にしたいと思います。

[code]

    ln -sf ~/dotfiles/.profile ~/
    ln -sf ~/dotfiles/.pryrc ~/
    ln -sf ~/dotfiles/.vimrc ~/
    ln -sf ~/dotfiles/.zshrc ~/
    
[/code]

`vim`の繰り返し操作`.`を使い、`dev`の上で`dw`,`x`,`j`,`.`してみたんですが、これだと最後の`x`での一文字分の削除が繰り返されてしまいました。

もちろん置換を使って一括で変換するのが一番だとは思うのですが、繰り返し処理を使う場合はどのようなキーストロークを使えばいいのでしょうか？


CC BY-SA 3.0
2017-09-16T07:06:15.600
37986
2017-09-18T08:34:31.313
2017-09-16T08:23:18.550
19110
3271
question
vim vi
vimの繰り返し操作を使って文字列を削除する方法


  * `df/`  
次の / まで削除

  * `4x`  
4文字削除

  * `vwd`  
ヴィジュアルモードで単語一つとカーソル位置の文字を選択状態にして削除

などでしょうか。  
レコーディング（マクロ）を使うならば、  
`qa` `dwx` `j` `q`  
で 下の行への移動までレジスタ `a` に記録されますから、後は `@a`（あるいは `@@`）の連打で繰り返せます。


CC BY-SA 3.0
2017-09-16T07:47:01.163
37987
2017-09-16T07:47:01.163
3054
37986
answer


vimの **マクロ** 機能を使っては如何でしょうか。

* * *

1.`dev`の前にカーソルを移動して`qa`でマクロの記録を開始。  
2\. `dw`, `x`,`j`で`dev`の文字列を削除、次の行まで移動します。  
3.行に対する一連の操作を終えたら、`q`でマクロの操作を終了します。  
4.`@a`で記録したマクロを実行します。あらかじめ実行回数が分かっていれば`3@a`の様な繰り返し指定も可能です。

* * *

`qa`の1文字目`q`がマクロで、2文字目は`[a-z]`から任意の文字を指定可能。  
`@a`が記録したマクロの再生です。2文字目には記録した時の文字を指定します。  
マクロで記録した一連の操作はまとめて1つの操作とみなされるので、`.`で繰り返すことも出来ます。


CC BY-SA 3.0
2017-09-16T07:50:55.167
37988
2017-09-16T07:50:55.167
3060
37986
answer


gn を使うといいかと思います（`:h gn`）

  * `/\/dev<Enter>` '/dev'を検索
  * `dgn` 次のマッチを削除する
  * `.` 繰り返し(必要な回数押す)


CC BY-SA 3.0
2017-09-16T08:47:52.623
37989
2017-09-16T08:47:52.623
9575
37986
answer


繰り返しを意識するなら、  
vwd  
dgn  
のどちらかでしょうが、実際にこの削除をするなら  
<C-v>f/4jd  
等の矩形選択を使った削除をしますね  
もちろんこの方法では、f/を4jはどちらが先でも構いませんし、最後のdはxでもOKです


CC BY-SA 3.0
2017-09-18T08:34:31.313
38013
2017-09-18T08:34:31.313
22867
37986
answer