前提
- OSはOS X El Capitanを使用
- Vimは7.3を使用
- 必要な知識としてはUNIXコマンドを用いたディレクトリ移動
- 対象者は「Vimを初めて触る人」
はじめに
バージョン確認
下記コマンドをターミナルから実行することで現在のVimのバージョンを確認することができます。
$ vim --version
チュートリアル
下記コマンドをターミナルから実行することでチュートリアルを閲覧することができます。また、:q[ENTER]
で元に戻れます。
$ vimtutor
ファイルを開く
下記コマンドをターミナルから実行することで既にあるファイルをVimエディタで編集することができます(Finderからファイルを開くときのようなイメージ)。まだないファイル名を記述すると、新しいファイルを作成しつつVimエディタが立ち上がります(Finderで新しいファイルを作成するときのようなイメージ)。
$ vim <path>/<file>
モードについて
Vimにはモードという概念があります。一般的なテキストエディタ(AtomやSublime Textなど)にはない概念なので、最初はとっつきにくいかもしれません。しかし、使っているうちに慣れていきます。ここでは簡単な概要説明に留めて、詳しい使い方や機能は後述します。具体的には、以下の4つのモードがあります。
- ノーマルモード
- 開いたばかりのとき
- コマンドモード
- ノーマルモードで
:
を押下したとき(下の方に:
と表示)
- ノーマルモードで
- 入力モード
- ノーマルモードで
i
を押下したとき(下の方に--INSERT--
と表示)
- ノーマルモードで
- ビジュアルモード
- ノーマルモードで
v
を押下したとき(下の方に--VISUAL--
と表示)
- ノーマルモードで
ちなみにノーマルモード以外のモードからノーマルモードに戻るには[ESC]
を押下します。わからなくなったらとにかく[ESC]
を押せばOKです。
ファイル操作
ファイルの編集
まずはファイルを編集して保存してみましょう。下記コマンドで適当なファイルをVimで開いてみましょう。
$ vim <path>/<file>
そしてi
を押して入力モードに入りましょう。こうすることで一般的なテキストエディタのように文字を入力することができます。適当な文字を入力したら、次に[ESC]
でノーマルモードに戻りましょう。
ファイルの保存
:w
でファイルを上書き保存することができます。
また、:w <file>
でという名前で保存することができます。
おそらくw
はwriteの略だと思います。
終了の方法
:q
で終了することができます。
ただし、変更点があって上書き保存をせずに:q
を実行することはできません。:w
で保存してから終了するか、:q!
で変更点を保存せずに終了しましょう。
また、:wq
で上書き保存しつつ終了できます。
おそらくq
はquitの略だと思います。
そしてよくある操作として、あるファイルを編集したあと別のファイルを開きたいときがよくあると思います。もちろん、その都度:wq
を使ってvim <path>/<file>
で開いてもいいのですが他の方法もあります。
それは、:e <path>/<another_file>
です。これでVimを一度終了させずに別のファイル<another_file>を開くことができます。
ノーマルモード
文字単位の移動
普通の矢印キーでも移動できますが以下のコマンドでも移動することができます。
- h
で左に一文字移動
- j
で下に一文字移動
- k
で上に一文字移動
- l
で右に一文字移動
個人的にj
とk
が曲者だと思うのですがj
が下矢印に似ているという良い意味でのこじつけをどこかで耳にして以来混乱することがなくなりました。
単語単位の移動
w
で一文字前の単語に移動b
で一文字後ろの単語に移動^
で行頭に移動$
で行末に移動f+<character>
で<character>まで移動(この状態で;
を押すと次の<character>に移動)- ex.
fa
で「a」まで移動
- ex.
おそらくw
はword、b
back word、f
はfindの略だと思います。
行単位の移動
gg
で1行目に移動G
で最終行に移動<number>G
で<number>行目に移動- ex.
123G
で123行目に移動
- ex.
ページ単位の移動
[CTRL]+b
で一画面上に移動[CTRL]+f
で一画面下に移動 おそらくb
はback、f
はforwardの略だと思います。
その他の移動
- 任意の括弧の上で
%
で対応する括弧に移動
検索
/<word>
で<word>を検索- 下方向への検索は
n
- 上方向への検索は
N
- 下方向への検索は
- 任意の単語にカーソルが乗っている状態で
*
でカーソルが乗っている単語を上方向に検索 - 任意の単語にカーソルが乗っている状態で
#
でカーソルが乗っている単語を下方向に検索
操作の取り消し
u
でundo(取り消し)[CTRL]+r
でredo(undoの取り消し)
コマンドの繰り返し
.
で直前のコマンドを繰り返す
カット、コピー、貼り付け
x
でカーソル上の文字をカットdd
でカーソル上の行をカットp
でカーソル上の行下にペーストP
でカーソル上の行上にペーストyy
でカーソル上の行をコピー
ここで便利なテクニックとしては<number><command>
というものがあります。これは<command>を<number>回繰り返すという意味です。たとえば12dd
とすれば12行カット(削除)することができます。x
やp
なども同様です。
また、削除コマンドが見当たらないと思いますが、クリップボードに保持するかどうかを無視すれば「カット」も「削除」と同様といえるので問題ないという風に考えられると思います。
入力モード
補完機能
[CTRL]+n
で補完機能
たとえば$helloWorld
という変数があったとき$hel
あたりで[CTRL]+n
を押下すれば$helloWorld
が出てきます。
コマンドモード
置換
:s/<old_word>/<new_word>/
で<old_word>を<new_word>で1つ置換:s/<old_word>/<new_word>/g
で<old_word>を<new_word>で置換(範囲は選択行のみ):s%/<old_word>/<new_word>/g
で<old_word>を<new_word>で置換(範囲はファイル全体):s%/<old_word>/<new_word>/gc
で一つ一つ置換するかどうかを確認しつつ置換できるy
で置換するn
で置換しないa
で全て置換(All)q
で置換をやめる(Quit)
:tabdo s%/<old_word>/<new_word>/g
で<old_word>を<new_word>で置換(範囲はタブで開いているファイル全体)
※タブに関しては後述
ウィンドウ分割
:sp
で上下に分割(split):vs
で左右に分割(vertical split)[CTRL]+w+w
でウィンドウ移動:close
でウィンドウを一つ閉じる
ウィンドウ分割したときは同じファイルが複数開かれている状態になるので任意のウィンドウで:e <path>/<file>
で別ファイルを開いて編集しましょう。もちろん、片方のウィンドウでコピーしたものをもう片方のウィンドウにペーストなども可能です。
タブ
:tabnew
で新しいタブを開く:tabe <path>/<file>
でfileを開きつつタブを開くgt
でタブ間を移動(ノーマルモード):tabclose
でタブを閉じる
また、ターミナルにいる状態でvim -p <file_1> <file_2> <file_3>
とすれば一気に<file_1><file_2><file_3>をタブで開くことが可能です。
Vimの設定
:set number
で行番号を表示:set nonumber
で行番号を非表示:syntax on
でコードを色分けする:syntax off
でコードを色分けしない:set tabstop=<number>
でタブの文字数を<number>にする(デフォルトでは8個):set ignorecase
で検索の際に大文字小文字を区別しないで検索:set noignorecase
で検索の際に大文字小文字を区別して検索(デフォルト)
ビジュアルモード
ビジュアルモードの種類
v
を押下したときに入れるビジュアルモード(下の方に--VISUAL--
と表示)V
を押下したときに入れるビジュアルラインモード(下の方に--VISUAL LINE--
と表示)[CTRL]+V
を押下したときに入れるビジュアルブロックモード(下の方に--VISUAL BLOCK--
と表示)
ビジュアルモードでは文字単位で選択することができます。
ビジュアルラインモードでは行単位で選択することができます。
ビジュアルブロックモードでは矩形選択をすることができます。
インデントを揃える
- 範囲を選択して
=
でインデントを揃える - 範囲を選択して
<
で左方向にインデントを揃える - 範囲を選択して
>
で左方向にインデントを揃える
おそらく<
は左矢印、>
は右矢印を示していると思います。
矩形選択後の編集
[CTRL]+v+選択+I+入力+[ESC]
で矩形選択後の編集
たとえば、複数行の先頭にsample
を付けることなどができます。
テキストオブジェクト
<c>OR<d>OR<y> + <i>OR<a> + <t>OR<}>OR<]>OR<)>OR<">OR<'>OR...etc
- <c>はchange+insert
- <d>はdelete
- <y>はyank(copy)
- <i>はinner
- <a>はall
- <t>はタグ
意味不明だと思うので例を出します。たとえば、<p>Hello World</p>
に対してcit
を実行するとHello World
が削除されてpタグの中で入力モードに入ります。また、同じ条件でdat
を実行すると<p>Hello World</p>
を全て削除します。
さいごに
基本的な知識としてはこの辺かと。他にもテーマをmonokaiっぽくしたり設定ファイルを作成したりできるのですが、そのあたりはまた別でまとめます。まだまだVim初心者ですがVimmerになるべく頑張ります。