SOFTELメモ

</> 技術者募集

【vim】複数行をカット、ヤンク(コピー)、ペースト

問題

viって、指定した範囲の複数行のカットや、複数行のコピペがものすごい面倒ですよね?

答え

mコマンドを使うと、割と簡単。

mコマンドはマークをつけるコマンド。「この行から、この行まで」ができるようになる。

マークはa-zの任意の文字を使えるが、開始(start)のsと、終了(end)のeぐらいがあれば、ほぼ事足りる。マーク1つで対応するときは何でも押しやすいキーでよい。

1、カット(もしくはヤンク)したい範囲の開始の行にカーソルを移動。
2、マークする(msと入力)。
3、カット(もしくはヤンク)したい範囲の終了の行にカーソルを移動。
4、マークする(meと入力)。
5、「:'s,'ed」+ Enter でカット、「:'s,'ey」+ Enter でヤンクできる。

もうちょっと短くすると、

1、カット(もしくはヤンク)したい範囲の開始の行にカーソルを移動。
2、マークする(msと入力)。
3、カット(もしくはヤンク)したい範囲の終了の行にカーソルを移動。
4、d's でカット、y's でヤンクできる。範囲はマークsの行から、現在のカーソルの行まで。

目測で行数を数えて、11行かな12行かな? → y12j などしていると、すごく面倒。

開始のマーク付け(ms)、終了のマーク付け(me)、カット、ヤンクのコマンド(:'s,'edy's) に慣れるべし。

関連するメモ

コメント(3)

lisper 2013年12月11日 10:14

visualモードじゃだめなんですかいの。

yoshimura 2013年12月11日 10:42

vi,vim,どこまで機能のあるvimかの表現があいまいですみません。
visualモードが使える環境で、visualモードを使いこなしている場合はそれでよいと思います。
redhat系のパッケージだと、vim-minimalかvim-enhancedではできることが違うので、vim-minimalでもできる方法を書きました。

yukimura1227 2014年7月12日 16:19

「vi 複数行 切り取り」で調べていたらたどり着きました。
参考にさせていただいたのでしばらく使っていたのですが、edコマンドを使ったらもっとシンプルにできたので、共有させていただきます。
例えば、20行目~30行目まで切り取るのであれば、以下のコマンドで実現できました。
「:20,30d]
※「:se nu」で行数を表示しておけば、さらに便利です。