この記事でのキーの記述方法
<C-v>
はCtrl
を押しながらv
を押す<CR>
はEnterキー<Esc>
はEscapeキー<Tab>
はタブキー
入門編
ノーマルモード
カーソル移動やテキストの削除,コピー,ペーストなどの簡単な操作を行うモード
移動
コマンド | 移動先 |
---|---|
文字単位 | |
h | 左 |
j | 下 |
k | 上 |
l | 右 |
ジャンプ | |
^ | 行の先頭の非空白文字 |
0 | 行の先頭 |
$ | 行末 |
gg | 最初の行 |
G | 最後の行 |
スクロール | |
C-d | 半ページ下 (down) |
C-u | 半ページ上 (up) |
C-f | 1ページ下 (forward) |
C-b | 1ページ下 (backward) |
zz | カーソルキーを画面中央へ |
削除・コピー
キー | 範囲 |
---|---|
削除 | |
x | カーソル下の文字 |
dd | 行 |
D | カーソルから行末 |
削除してインサート | |
s | カーソル下の文字 |
cc | 行 |
C | カーソルから行末 |
コピー(ヤンク) | |
yl | カーソル下の文字 |
yy | 行 |
Y | 行 |
ペースト
コマンド | 貼り付け先 |
---|---|
p | カーソル右(行単位のコピーの場合は,1行下) |
P | カーソル左(行単位のコピーの場合は,1行上) |
Undo & Redo
undo: u
redo: C-r
インサートモード
実際にテキストを入力するモード
コマンド | ノーマルモードからのインサート先 |
---|---|
i | カーソルの左 |
a | カーソルの右 |
I | 行の先頭の文字の前 |
A | 行末 |
o | 改行してインサート(下方向) |
O | 改行してインサート(上方向) |
ビジュアルモード
テキストを選択するモード
コマンド | 単位 |
---|---|
v | 文字 |
V | 行 |
C-v | ブロック |
選択後d
, c
, y
で,それぞれ削除,削除してインサート,ヤンク
コマンドラインモード
ファイルを開いたり,検索・置換などの様々な指示を行うモード
ファイル操作
コマンド | 効果 |
---|---|
:e {パス} | {パス} を開く |
:q | 閉じる |
:w {パス} | 保存する({パス} がある場合は名前をつけて保存) |
!
を付ければ強制的に実行する(例えば:q!
は保存せずに閉じる)
検索
- ファイル内で
{text}
を前方検索:/{text}<CR>
- ファイル内で
{text}
を後方検索:?{text}<CR>
n
で次の候補に進み,N
で前の候補に戻る
置換
:s/{before}/{after}
: 現在の行の最初の{before}
を{after}
に置換:s/{before}/{after}/g
: 現在の行の全ての{before}
を{after}
に置換:%s/{before}/{after}/g
: 現在のファイルの全ての{before}
を{after}
に置換
指定行へジャンプ
:{number}
基本編
インデント
下げる:>>
上げる:<<
ビジュアルモード選択後も可能
小回りを効かす
構文:{operator}
+ {motion}
結果:{motion}
の範囲を{operator}
する.
{operator} | 効果 |
---|---|
d | 削除 |
c | 削除してインサートモード |
v | 選択 |
y | ヤンク |
{motion} | 範囲 |
---|---|
w | カーソル位置から単語の終わり |
aw | カーソル下の単語と左右どちらかのスペース (a word) |
iw | カーソル下の単語 (inner word) |
ジャンプキー | カーソル位置からジャンプ先まで(入門編のノーマルモードのジャンプ参照) |
上記のモーションにおいて,大文字W
を使えば記号で区切らない
(text)
, {text}
, [text]
, 'text'
, "text"
, <text>
への操作
構文:{operator}
+ {i
ora
} + {symbol}
「小回りを効かす」での{motion}
のw
が{symbol}
になったと考えてもOK
{operator}
は前項「小回りを効かす」と同じi
の場合は{symbol}
の内部(inside)a
の場合は{symbol}
を含む(arround)
例:ci(
は(text)
内のtext
を削除してインサート
検索
移動にも便利
- 行内の
{character}
を前方検索:f{character}
- 行内の
{character}
を後方検索:F{character}
これらは{motion}
化される
素早い検索
- カーソル下の単語を前方検索:
*
- カーソル下の単語を後方検索:
#
置換モード
r
: 一文字のみ置換R
: 連続で文字を置換
インサートモードで素早い編集
<C-h>
:バックスペース<C-w>
:直前の1単語を削除<C-u>
:行頭までを削除<C-r>"
:ペースト(ノーマルモードでのp
と同じ)
リピートコマンドとその取り消しコマンドを対で覚える
リピートするもの | リピートコマンド | 取り消しコマンド |
---|---|---|
変更 | . | u |
行内検索(f ,F ) | ; | , |
ファイル内検索(/ ,? ) | n | N |
置換(:s/{before}/{after} ) | & | u |
挿入モード時にカーソルを画面中央に持ってくる
<C-o>
zz
ビジュアルモードの始点を反転
ビジュアルモード時にo
電卓を使う
インサートモードで<C-r>=
行の連結(join)
スペースあり:J
スペースなし:gJ
元いた場所にジャンプする
戻る:C-o
進む:C-i
応用編
指定単語数を一気に編集
d{count}w
, c{count}w
(gifではc3w
を使用)
コマンドラインモードでの特殊文字の入力
- 改行:
<C-v><C-M>
または<C-v><CR>
- タブ:
<C-v><Tab>
ea
は一つのコマンドとして覚える
append at the end of word
複数行の先頭に{text}
を挿入
リピートコマンド.
を使う
I
{text}<Esc>
.
を使い他の行でリピート
ビジュアルブロックを使う
- ビジュアルブロック
<C-v>
で対応する行頭を選択 I
{text}<Esc>
コマンドラインモードを使う
- いずれかのビジュアルモードで対応する行を選択
:normal I{text}<CR>
複数行の行末に{text}
を挿入
リピートコマンド.
を使う
A
{text}<Esc>
.
を使い他の行でリピート
ビジュアルブロックを使う
- ビジュアルブロック
C-v
で対応する行を選択 $
A
{text}<Esc>
コマンドラインモードを使う
- いずれかのビジュアルモードで対応する行を選択
:normal A{text}<CR>
確認しながら置換
コマンドラインモードの置換を使う
:%s/{before}/{after}/gc
検索とリピートコマンドを使う
/{before}<CR>
cw
などで{after}
に変更(gifではs
を使用)n
と.
でリピート(置換しない場合はn
でスキップ)
練習問題
Mon
Tue
Wed
Thu
Fri
Sat
Sun
から
days = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
を作り,その逆もやってみてください(元ネタ:vim-multiple-cursors).手段は問いませんが,プラグインを使っては意味がないです..解答例を載せておきます(これが正解という訳ではありません).紹介したコマンドのみで実現しています.