基本コマンド

Last Update:2014/02/13

挿入モードに移行

以下の3つでどうにかなる。

  • i
    カーソル位置で挿入
  • a
    カーソルの次の位置から挿入
  • o
    次の行へ挿入

アンドゥ,リドゥ

CはCtrlです。

  • u
    undo
  • C-r
    redo

移動

とりあえず0,^,$,C-f,C-bを覚えておけばどうにかなる。

  • gg
    ファイルの先頭に移動
  • G
    ファイルの末尾に移動
  • %
    対応する括弧にカーソル移動
  • +
    空白を除いた次の行の先頭にカーソル移動
  • -
    空白を除いた前の行の先頭にカーソル移動
  • $
    行末に移動
  • ^
    空白を除く行頭に移動
  • 0
    行頭に移動
  • C-f
    1スクロール下に移動 (fは多分forward?)
  • C-b
    1スクロール上に移動 (bは多分back?)
  • w
    単語単位で前に移動
  • b
    単語単位で後ろに移動
  • 4w
    4単語前に移動
  • 4b
    4単語後ろに移動

コピー,カット,ペースト

とりあえずyy,”ayy,dd,pを覚えておけば問題ない。

  • yy
    1行コピー
  • 3yy
    3行コピー (要は数字yyでその行数コピー)
  • “ayy
    aレジスタに1行コピー (aじゃなくても好きな文字を使えば良い)
  • y$
    カーソル位置からカーソル行の行末までコピー
  • c^
    カーソル位置から空白を除くカーソル行の先頭までを削除してインサートモードに移行。
  • dd
    1行カット
  • 3dd
    3行カット (要は数字ddでその行数カット)
  • “add
    aレジスタに1行カット
  • p
    レジスタに入っている文字列をペースト
  • “ap
    aレジスタに入っている文字列をペースト (aじゃなくても好きな文字を使えば良い)

検索

とりあえず/とnだけ覚えておけば問題ない。

  • f[文字]
    カーソルより前方のカーソル行に[文字]が存在する時、そこに移動する。 例えばpainという文字列がカーソル行にある時、カーソルの位置がpより前にあるならfaコマンドでaまでカーソルが移動する。
  • F[文字]
    カーソルより後方のカーソル行に[文字]が存在する時、そこに移動する。 例えばpainという文字列がカーソル行にある時、カーソルの位置がpより後方にあるならfaコマンドでaまでカーソルが移動する。
  • /[文字列]
    文字列をカーソル位置の後方で検索する。
  • n
    /[文字列]で検索した後、次の検索結果に移動する。nはnextの頭文字? ファイルの最後まで到達した時は1番上に戻る。
  • N
    /[文字列]で検索した後、一つ前の検索結果に移動する。ファイルの最初に到達した場合はファイル終端に戻る。
  • *
    カーソル位置の単語に対して/検索を行う。 文章ではわかりにくいので使ってみると良い。

置換

  • %s/置換前文字列/置換後文字列/
    カレント行の文字列を検索して置換する
  • %s/置換前文字列/置換後文字列/g
    ファイルの最初から最後まで検索して置換する。gの後ろにcを付けると置換するかどうかを確認する。
  • %s;/usr/bin/python;/usr/local/bin/python;gc
    区切り文字には/だけでなく;なども使えるので、パスの置き換えをするときに便利。

複数ファイルで一括置換

:args * .py
:argdo %s/hoge/foo/g | update

ビジュアルモード

まずC-vでビジュアルモードに移行する。 よく使うのは複数行のインデント調整なので、ここではそれを例にしてコマンドを順番通り書くことにする。:

aaaaa
bbbbb
ccccc
ddddd

という文字列が存在する時、bbbbb、cccccを1つ分インデントし:

aaaaa
    bbbbb
    ccccc
ddddd

としたい。 カーソル位置はaaaaaの先頭にあるものとする。

  1. bbbbbの先頭にカーソル移動
  2. C-v
  3. 範囲選択になるので、bbbbbとcccccの一文字目だけ縦に選択する。
  4. Shift-i
  5. Tabキーを一回押し、bbbbbの行だけが一つ分インデントされる。
  6. そのままEscを押す。

すると自動的にcccccも一つ分インデントされる。

このように範囲選択をしてからコマンドを使う。 矩形で挿入、削除できるので色々と使い道がある。

レジスタの内容確認

“ayyとしてaレジスタにコピーされた内容を確認。 :reg a と打つと次のように確認できる。

:reg a
--- レジスタ ---
"a   .. code-block::
続けるにはENTERを押すかコマンドを入力してください

画面分割

小さいディスプレイで作業している場合は逆に見にくくなることもあるので、ある程度ディスプレイが大きい場合に使った方がいい。

  • :sp
    画面を上下分割
  • :vsp
    画面を左右分割
  • :sp ファイル名
    指定したファイルを分割した画面に表示(上下)
  • :vsp ファイル名
    指定したファイルを分割した画面に表示(左右)
  • C-ww
    分割した画面のもう片方にカーソルを移動
  • C-wp
    同上

文字コード指定読み込み

  • :e ++enc=utf-8 今開いているファイルの文字コードをUTF-8で再読み込み

複数行コピー、カット

一番簡単なのはyyやddといったコマンドで1行カットすること。 その他ビジュアルモードなどもあるが、目測でコピー、カットする場合 vimはちょっと面倒くさい。

例えば下記のような文章がある時:

aaaaa
bbbbb
ccccc
ddddd

この文章のうち2行目から4行目までカットしたい場合どういった手順を取るか。

一つは2行目にカーソルを合わせて3ddとする。行数が目測ですぐに分かる場合は簡単に使える。 二つ目はビジュアルモードでカットやコピーをする。これはCtrl-vから範囲指定でできる。 ただペーストするときにautoindentがonになっているとちょっと面倒。

というわけで手を動かしながら(メモ帳とかでコピー、カットするときに多くの人が使うような方法で)コピーしたい。 具体的に言うと、カーソルを開始箇所から終わりの行まで移動させる方法でコピーする方法。

コピー開始行でms、そのままカーソルをコピー終わり行まで移動し、me。 その後はコピーならy’s、カットならd’sでそれぞれ可能。