vi、vim これだけは知っておけコマンドモード操作 10選
12月ももう折り返し、皆さんいかがお過ごしでしょうか。
FFXIVエオルゼアカフェにどうにか年内に行けないかと予約フォームを周回している、ムックです。
今回はlinuxに標準でインストールされているテキストエディタviのコマンドモードの操作を紹介します。
紹介するのはコマンド操作のみでvi自体の説明や使い方、設定について紹介しません。
目次
保存、終了
1 2 |
:q = 保存 :w = 終了 |
':wq'
と連続で打つことで、保存して終了できます。
カーソル移動
1 2 3 4 5 |
hjkl = ←↓↑→各方向移動 w = 単語単位で移動 :0 = 行の先頭に移動 :$ = 最終行に移動 :{数字} = {数字}行に移動 |
'hjkl'
は覚えてしまうとevernoteやWebの入力フォームでも間違えて使ってしまうほど便利です。(?)
1 |
% = 括弧移動 |
括弧の始まり(or終わり)で'%'
入力することで括弧の終わり(or始まり)に移動します。
地味ですがネクトしまくってる箇所だったり、関数の引数に関数入れてたりするときにこの括弧どこで始まって(終わって)るんだ?ってときに便利です。
インプットモード切替
1 2 3 4 5 6 7 |
i = カーソル位置でインプットモード切替 I = 行の先頭でインプットモード切替 s = 一文字削除してインプットモード a = カーソル位置の一つ後ろでインプットモード切替 A = 行末でインプットモード切替 o = 改行してインプットモード切替 O = カーソル行を改行してインプットモード切替 |
インプットモードの切替だけでも結構な数ありますが、どれも使うし覚えるととても楽できます。
特に'I'
,'A'
はよく使うカーソル移動なので便利です。
カット、コピー&ペースト系
1 2 3 4 5 6 |
x = 一文字削除 yl = 一文字コピー yy = 行コピー dd = 行カット p = ペースト r = 一文字削除して一文字入力すると、コマンドモードに戻る |
'r'
は何のためにあるんだ!とはじめは思っていましたがめっちゃ使います。
検索、置換
検索
1 2 3 |
/{検索文字列} n = 次へ移動 N = 前へ移動 |
簡単なコマンドですが、必須です。
置換
1 2 3 4 5 6 7 8 |
ファイル内全置換 :%s/{変換前}/{変換後}/g 行数指定(例:4〜10行目) :4,10s/{変換前}/{変換後}/ 確認しながら置換 :%s/{変換前}/{変換後}/cg |
また置換前文字列には正規表現が利用出来ます。
とても柔軟に置換を行えます。
1 2 |
5〜10行目の先頭に"echo "をつける :5,10s/^/echo / |
文字列連結
1 |
J |
知ってると地味に便利。
直前のコマンドをもう一度実行
1 |
. |
これも強力です。
部分的な文字列置換は、'4s'
で文字修正、'hjkl'
で移動して、'.'
で置換というような使い方を良くします。
繰り返し
1 |
{数字}コマンド |
いろいろなコマンド操作を紹介してきましたがほとんどでこの 繰り返し が使えます!
この繰り返しを使うことによってよりviの操作がより強力になります。
5文字コピー
1 2 3 4 5 6 |
5yl 例 Japanese "J"で'5yl' Japan |
2文字削除して1文字入力からのコマンドモードに戻る
1 2 3 4 5 6 |
2r{入力} 例 10万人 "10"の箇所で'2r'して"2" 2万人 |
10行削除
1 |
10dd |
3行文字連結
1 2 3 4 5 6 7 8 |
3J 例 1, 2, 3, "1,"の行から'3J'を入力 1, 2, 3, |
インクリメント、デクリメント
1 2 |
Control-a = インクリメント Control-x = デクリメント |
マクロ
1 2 3 |
q{英字} 開始 q 終了 @{英字} マクロ実行 |
1 2 3 4 5 6 7 8 9 10 11 |
マクロ例 1〜10まで改行しつつ入力するとき "1" 入力 escでコマンドモード 'qa'でマクロ開始 'yy'でコピー 'p'でペースト 'Control-a'でインクリメント 'q'でマクロ終了 '8@a'でマクロ実行 |
お手元のvimで確認してみてください。
ほんの少し多くなってしまいましたが、これだけ覚えればターミナル上で簡単なスクリプト組むくらいの操作は出来るかと思います。
最近では、linuxの設定ファイルはchefやansibleなどで管理されてターミナルで直接操作する機会は少ないかもしれませんが、この程度の操作は必須だと思います。
それでは、また。