Vimについて

基本的なこと

  • vim で概要が見られる
  • vimtutor で日本語チュートリアルが読める
  • vi [ファイル名] で開始する
    • ファイルが存在しない場合は新規作成される
モードについて

vi 入ってすぐの何もしていない状態が「ノーマルモード」。

ここから下記のモードに入れる。抜けるときは ESC キーを押す。

コマンドモード : で入る。各コマンドが打てる。
入力モード(insert) i で入る。文字の入力・編集ができる。
ビジュアルモード(visual) v で入る。文字の選択などができる。

表示設定

:set number/nonumber 行番号を表示する/表示しない
:set ignorecase/noignorcase 検索時に大文字小文字を区別しない/する
:syntax on/off コードの色分けをする/しない
:set tabstop=[n] タブ1個の幅を[n]文字分にする

ファイル操作

:w 上書き保存
:w [ファイル名] 名前をつけて保存
:q 終了
:q! 変更点を無視して強制的に終了
:e [ファイル名] 他のファイルを開く
タブ
:tabnew 新しいタブを開く(新規ドキュメント)
:tabe [ファイル名] 指定したファイルを開く
gt タブ間を移動する
:tabclose タブを閉じる
vi -p [ファイル名] … 複数ファイルを一気にタブで開く
:tabdo %s/鈴木/田中/g 開いているタブにある全ての鈴木を田中にする
分割ウィンドウ
:sp 上下に分割する(split)
:vs 左右に分割する(vertical split)
control+w+w 分割したウィンドウを移動する
:close 分割したウィンドウを閉じる

検索/置換

検索

基本的に完全一致のみマッチする。

/[文字] 直後に入力した文字列を検索する。更に「n」で下方向、「N」で上方向へ。
* 今カーソルのある単語を下方向に検索
# 今カーソルのある単語を上方向に検索
置換

コマンドモードで「s (substitute)」を使う。

例)「鈴木」を「田中」にしたいとき

:s/鈴木/田中 今カーソルのある行の1番目の鈴木を田中にする
:s/鈴木/田中/g 今カーソルのある行のすべての鈴木を田中にする
:%s/鈴木/田中/g 編集中のファイル内にあるすべての鈴木を田中にする(gを忘れると同じ行に鈴木が2つある場合に1つ目しか置換されない)
:%s/鈴木/田中/gc 置換する前に確認したいときは「c (confirm)」オプションをつける

移動/選択

移動
gg 一番上に戻る
G 一番下に戻る
control+f 画面単位で進む
control+b 画面単位で戻る
w 単語単位で進む
b 単語単位で戻る
^ 行頭に移動する(キャレット)
$ 行末に移動する(ドルマーク)
f [文字] 直後の[文字]に飛ぶ。更に : でその次の[文字]に飛ぶ
% プログラムの { の上で % を押すと、対応する } まで飛ぶ
選択
v 文字単位で選択
V 行単位で選択
gg→V→G 全選択(先頭へ移動→行単位で選択→末尾へ移動)
矩形選択
control+v 矩形単位で選択

矩形選択した箇所を一気に編集したいときは

control+v(矩形選択) → I(入力モード) → [編集] → ESC

編集

直前の操作を○○する
u 取り消す(UNDO)
control+r やり直す(REDO)
. 繰り返す(例:3dd→. 3行まとめて消去を繰り返す)
カット・コピー・ペースト

削除したものはクリップボードに記憶される。

デフォルトのVimではクリップボードはOSと連携していないので別途対応が必要。

x 文字単位で削除
dd 行単位で削除
[n]dd n行まとめて削除
y 選択範囲をコピー
yy 行単位でコピー
[n]yy n行まとめてコピー
p カーソル位置の直後にペースト。コピーした内容が行単位なら直後の行にペースト。
特定範囲の選択&編集

下記から1つずつ選んで連続入力する。

  1. やること
    • c = change(削除して入力モードに入る)
    • d = delete(削除)
    • y = copy(コピー)
  2. 範囲指定
    • i = in(中身)
    • a = all(すべて)
  3. 基準になるもの
    • t = tag(タグ)
    • )
    • ]

例) [t]titleタグの [i]中身を [c]削除して入力モードに入る

<title>タイトル</title> の上で「cit」
↓
<title></title> ※入力モードになりカーソルはタグの中

例) [t]liタグの [a]すべてを [d]削除する

<li><a href="#top">トップ</a></li> の<a>~</a>の上で「dat」
↓
<li></li> ※ノーマルモードのまま

例) [“]”で括られた [i]中身を [y]コピーする

<a href="http://hoge.com">リンク</a> の上で「yi"」
↓
クリップボードに「<a href="http://hoge.com">http://hoge.com</a>」が入る

その他メモ

= インデントを揃える(HTMLファイルだと全選択実行は行頭揃えになるだけ)
[文字]→control+n ファイル中で使った関数名・変数名・タグ名etc…を補完する