viコマンドで使いこなしたい操作
viコマンドまとめ
いつもよく使うviエディタ。。。 使いこなせない!!!操作方法すぐに出てこない!!
モード
- Normal(ノーマル)モード # 起動直後のデフォルト。移動・削除・コピペなどの「操作」を行う
- Insert(挿入)モード # 実際に文字を打ち込むモード。i/a/oなどで入る、Escで戻る
- Visual(ビジュアル)モード # 範囲選択して操作するモード。v/V/Ctrl+vで入る
カーソル移動
- h j k l # 左 下 上 右(矢印キーの代わり)
- w / b # 次の単語の先頭へ / 前の単語の先頭へ
- e # 単語の末尾へ
- 0 / ^ / $ # 行頭 / 行頭の最初の非空白文字 / 行末
- gg / G # ファイルの先頭 / 末尾へ
- :42 # 42行目へジャンプ
- % # 対応する括弧( { [ へジャンプ
- Ctrl+f / Ctrl+b # 1画面分 下 / 上へスクロール
編集の基本
- i / a # カーソルの前 / 後ろから挿入モードへ
- I / A # 行頭 / 行末から挿入モードへ
- o / O # 下 / 上に新しい行を作って挿入モードへ
- x # 1文字削除
- dd # 1行削除(カット)
- dw # カーソル位置から単語末尾まで削除
- D # カーソル位置から行末まで削除
- yy # 1行コピー(ヤンク)
- p / P # カーソルの後ろ / 前に貼り付け
- u # 元に戻す(undo)
- Ctrl+r # やり直す(redo)
- . # 直前の編集操作をもう一度繰り返す
検索・置換
- /検索したい文字列 # 前方検索(nで次、Nで前へ)
- ?検索したい文字列 # 後方検索
- :%s/old/new/g # ファイル全体、oldをnewに全置換
- :%s/old/new/gc # 置換の度に確認(y/n)を求める
- :5,10s/old/new/g # 5~10行目だけ置換
- :.,$s/old/new/g # 今の行から最終行まで置換
複数行をまとめて編集 ① Visual Block(矩形選択)モード Ctrl+vで矩形選択モードに入る j/kで複数行分、縦に選択範囲を広げる(横にもlで広げられる) I を押して文字を入力 → Esc すると、選択した全ての行の"同じ位置"に、まとめて同じ文字が挿入される
行末に追加したい場合はIの代わりにA(選択範囲の右端から追加)。行の一部を縦に選択してxやdを押せば、選択範囲だけをまとめて削除できる。
② :normalコマンド
:5,10normal Ihello # 5~10行目、それぞれの行頭に "hello" を挿入 :%normal A; # 全行の行末に ";" を追加 :'<,'>normal $x # ビジュアル選択した範囲、各行の末尾の1文字を削除
③ :g(global)コマンド :g/error/d # "error"を含む行を全部削除 :g/^#/normal A; # "#"で始まる行の末尾にだけ";"を追加 :v/keep/d # "keep"を含まない行を全部削除(逆マッチ、:g!/keep/dと同じ)
④ 数字を連番でインクリメント Ctrl+v で数字が並んでる列を縦に選択 g Ctrl+a
⑤ マクロ qa # レジスタ a に操作の記録を開始 (好きな編集操作) q # 記録終了 @a # 記録した操作を1回再生 10@a # 10回繰り返して再生 @@ # 直前に再生したマクロをもう一度
⑥ レジスタ "ayy # a という名前のレジスタに1行コピー "ap # a レジスタの内容を貼り付け "0p # 直前にヤンクした内容(削除では上書きされない専用レジスタ)を貼り付け :reg # 今使われてる全レジスタの中身を一覧表示
その他
- ma # 今のカーソル位置に印(マーク) a を設定
- `a # マーク a の位置へジャンプ
- :set paste # ペースト時の自動インデント崩れを防ぐ(貼り付け前に設定)
- :set nopaste # 元に戻す
- :%!sort # ファイル全体を外部コマンド(sort)に通して結果に置き換える
- :%!sort -u # 重複行を除きつつソート
- zf + 移動 # 選択範囲を折りたたむ(長いファイルの整理に)
- Ctrl+o / Ctrl+i # カーソル移動履歴を 戻る / 進む(ブラウザの戻る/進むに近い)