Vimを使う上で最低限覚えておきたい操作法
あなたがこのページを読んでいる時、もしかしたら、あなたは Vimのチュートリアルを終わらせているかもしれません。
とはいえ、 Vim付属のチュートリアルはあくまで基礎的な内容のため、 Vimの暗黒のパワーを引き出しているとは言えません。
そこで、このページではチュートリアルの内でも使用できないと操作もおぼつかないようなコマンド(と少しの追加のコマンド)を復習したあと、「熟語」の概念について少しだけ触れます。
・ 記法について
以下ではそれぞれのコマンドについて、
* 「コマンド」
「説明」
と表記します。
また、キーAとBの同時押しを <A-B> で表し、 SHIFT、CTRL、RETURNをそれぞれS、C、<CR>と表記します。ただし、「,」についてはキーではなく区切りとして用います。
全てのコマンドはノーマルモードから使用することを前提としています(そのため、 Exモードで入力するコマンドは「:"command"<CR>」と表記されています)。
以下のコマンドのいくつかは実行回数を指定できますが、詳しくは各自WEB検索してください。
・ 本当に最低限のコマンド
hjkl: 左下上右にカーソルを動かします。
ESC: ノーマルモードに戻ります。
i: カーソルの手前からインサートモードに入ります。
v: ビジュアルモードに入ります。
:w<CR>: ファイルを保存します。
yおよびd: (ビジュアルモード時)選択範囲をコピー/カットします
yyおよびdd: 一行コピー/カットします。
p: コピーした文字をペーストします。
:q<CR>:Vim を終了します。
・ 基礎のコマンド
* i, <S-i>, a, <S-a>, o, <S-o>
インサートモードに入るコマンドです。それぞれ、
「カーソルの手前」「カーソル行の頭」(i, <S-i>)
「カーソルの後ろ」「カーソル行の末尾(a, <S-a>)
「カーソル下に追加した空行」「カーソル上に追加した空行」(o, <S-o>)
から編集を始めます。
* v,<S-v>, <C-v>
ビジュアルモードに入るコマンドです。それぞれ、
「文字選択モード」(v)
「行選択モード」(<S-v>)
「矩形選択モード」(<C-v>)
を開始します。
* :, <S-q>, g<S-q>
Exモードに入るコマンドです。それぞれ、
「コマンドラインモード」(:)
「Exモード」(<S-q>)
「Exモード(拡張)」(g<S-q>)
を開始します。
* <C-[>
ノーマルモードに入るコマンドです。
同様に、ノーマルモード以外のすべてのモードから、 ESCキーを押すことでノーマルモードに戻ることができます。
* :cd "dpath"<CR>
"dpath"というフォルダ(ディレクトリ)へ移動します(この"dpath"を「ディレクトリのパス」と呼びます)。
以下で説明するwやeは暗黙的に、このcdで移動したフォルダ内のファイルに対して作用します。
例えば Windowsでは、デスクトップに移動する場合は :cd ~/Desktop<CR> とタイプします。
"dpath"の調べ方は各OSごとに調べてください。
* :e "fname"<CR>, :e.<CR>
ファイルを開くコマンドです。
:e "fname"<CR>は"fname"という名前のファイルを現在のフォルダから検索し、なければ作成します。
:e.<CR>はファイラー(デフォルトでは内臓のnetrw)を開始し、視覚的にファイルを選択します。
netrwの使い方はnetrwを開始した状態でF1キーを入力することで見ることができます。
* :w<CR>, :w "fname"<CR>
ファイルを保存するコマンドです。
:w<CR>は上書き保存、 :w "fname"<CR>は"fname"という名前をつけて保存します。
* :q<CR>, :q!<CR>
現在のバッファ(ウィンドウ)を非表示にし、全てのバッファが非表示になると終了します。
:q<CR>は保存されていない変更が存在する場合に警告します。
:q!<CR>は保存されていない変更を破棄し、強制終了します。
* h, ,j, k, l
カーソルを一文字分ずつ移動します。それぞれ、
「左」(h) 「下」(j)「上」(k)「右」(l)
へ移動させます。通常のカーソルキーも(おそらく)使えます。
* <C-u>, <C-d>
カーソルを半ページ分移動します。
<C-u>は上に、 <C-d>は下にそれぞれ移動します。
* gg, G
カーソルをそれぞれ、
「ファイルの先頭」(gg)「ファイルの末尾」(G)
へ移動します。
(Tips: "x"Gで"x"行目に移動できます)
* zz
可能ならば、カーソルのある行が中央になるようにスクロールします。
* 0, b, $, w
カーソルをそれぞれ、
「行頭」(0)「前の単語の頭」(b)
「行末」($)「次の単語の頭」(w)
へ移動します。
* (, {, ), }
カーソルをそれぞれ、
「前の文(.や で区切られた部分)の頭へ移動」(()
「前の段落(空行で区切られた部分)の頭へ移動」({)
「次の文の頭へ移動」())
「次の段落の頭へ移動」(})
します。
* y, d, yy, dd, <S-d>, p, <S-p>
それぞれ、
「(ビジュアルモード時)選択している範囲をコピー(yank)」(y)
「(ビジュアルモード時)選択している範囲をカット(delete)」(d)
「カーソルがある行をコピー」(yy)
「カーソルがある行をカット」(dd)
「カーソルから行末までをカット」(<S-d>)
「コピーしたテキストをカーソルの後ろ(範囲)もしくは下(行)にペースト」(p)
「コピーしたテキストをカーソルの前(範囲)もしくは上(行)にペースト」(<S-p>)
します。
* :reg<CR>, "[n]p
レジスタ操作です。レジスタはコピーやカットの履歴と考えてもらって構いません。
それぞれ、
「レジスタを表示」(:reg<CR>)
「[n]レジスタの内容をペースト」("[n]p)
します。
(Tips: "[n]y or "[n]yy or ... を用いることで、任意のレジスタに文字列を格納できます)
* *, /"word"<CR>, n, <S-n>
それぞれ、
「カーソル下の単語を検索」(*)
「ファイル内の"word"を検索」(/"word"<CR>)
「検索の次のマッチへ移動」(n)
「検索の前のマッチへ移動」(N)
します。
* :s/"hoge"/"hoga"/g<CR>, :%s/"hoge"/"hoga"/g<CR>
それぞれ、
「カーソルのある行の"hoge"を"hoga"に置換」(:s/"hoge"/"hoga"/g<CR>)
「ファイル内の"hoge"を"hoga"に置換」(:%s/"hoge"/"hoga"/g<CR>)
操作を行います。
置換にあたってワイルドカードを使うこともできます。予約された記号(/, ., ...)は「\」でエスケープすることができます。
また、/gを省くと、最初にマッチした単語のみが置換されます。
(Tips: ビジュアルモード中に「:」を押すことで、選択中の範囲内に対する置換を開始することができます)
* ., u, <C-r>
それぞれ、
「直前の変更を繰り返す」(.)
「1つ前の変更を取り消す」(u)
「取り消した変更を1つ戻す」(<C-r>)
操作を行います。
* :buffers<CR>, :b"x"<CR>, :bd<CR>
それぞれ、
「非表示になっているものを含めたバッファ一覧を表示」(:buffers<CR>)
「一覧に書かれた"x"番のバッファを開く」(:b"x"<CR>)
「現在のバッファを完全に閉じる(一覧からも削除)」(:bd<CR>)
操作を行います。(Tips: bd"x"で"x"番のバッファを消去できます)
* :split<CR>, :vert split<CR>
それぞれ、
「現在のウィンドウを上下に分割」(:split<CR>)
「現在のウィンドウを左右に分割」(:vert split<CR>)
します。
分割されたウィンドウには現在と同じバッファが表示されます。
(Tips: vertは実際には「左右方向」を表す修飾語です)
* <C-w>w, <C-w><C-w>, <C-w><S-w>
分割したウィンドウ間の移動を行います。
それぞれ、
「次のウィンドウへ移動」(<C-w>w, <C-w><C-w>)
「前のウィンドウへ移動」(<C-w><S-w>)
を行います。
(Tips: <C-w>s, <C-w>v でも、上下分割と左右分割が可能です)
* :tabnew<CR>, :tabcolse<CR>, :tabs<CR>, "x"gt, g<S-t>
タブ関連の操作です。
それぞれ、
「タブを作成」(:tabnew<CR>)
「タブを閉じる」(:tabclose<CR>)
「タブ一覧を見る」(:tabs<CR>)
「一覧における"x"タブへ移動or次のタブへ移動("x"を省略した場合)」("x"gt)
「前のタブへ移動」(g<S-t>)
を行います。
(Tips: qは現在カーソルがあるバッファを非表示にしますが、 tabcloseはタブの中のバッファを全て非表示にします)
・ Vimの熟語
上に上げたコマンドで薄々お気付きの方もいらっしゃるかもしれませんが、 Vimのコマンドの多くは英単語の頭文字から来ており、それらを組み合わせて「熟語」あるいは「文章」を作ることで複雑な操作が可能です [17] 。
例えば、以下のような「単語」があります。
* 動詞
d: delete(削除する)
c: change(変更する)
y: yank(コピーする)
p: paste(ペーストする)
v: visual(ビジュアルモードに入る)
w: write(書く)
q: quit(出ていく)
* 名詞
w: word(単語)
s: sentence(文)
p: paragraph(段落)
b: block(ブロック)
G: ground(地面 = 最下部)
* 修飾語
i: inside(内側)
a: around(周囲)
NUM: number(数)
t: to(までの)
f: finded(見つかった)
これらを組み合わせることで、ある程度複雑なコマンドを直感的に実行することが可能なことがあります(上で紹介したいくつかのコマンドもこの熟語に当たります)。
以下にいくつかの例を上げておきます。
・ d2w
「2」つの「単語」を「消去」
Delete two words
・ cis
「内側」の「文」を「変更」
Change inside sentence
・ yfi
「見つかった」「i」までを「コピーする」
Yank finded i
・ vipdGp
「ビジュアルモードに入り」「内側」の「段落を」「削除」し「最下部」に「ペーストする」
Visual inside paragraph delete (and move to) ground (and) paste
の様に、 Vimと「対話」しながら編集することが可能です。
tやfは英字をターゲットにしますが、 tは文字を含まず、fは文字を含みます。また、日本語の場合はヘボン式の読みで検索されます。 t,fのマッチ結果が複数ある場合は、最も近いマッチ場所までが対象になります。
最後に、熟語ではありませんが、小説の執筆で役に立つかもしれないコマンドを1つだけ紹介します。
* g<C-g>
このコマンドは、カーソルのある位置の情報を表示します。表示は「列、行、単語、文字、データサイズ」の量を「現在位置の値/ファイル全体での値」形式で行います。
文字数制限のある文章を書いている場合は有用でしょう。
ただし、注意したいのは「文字数には改行も含まれること」と「Windowsでは改行1つが2文字としてカウントされること」です。
そのため、一般的な意味での文字数をカウントする場合は、文字数から行数を(Windowsの場合は行数の二倍を)引く必要があります。
この改行周りの事情は突き詰めるとOS戦争に至るのですが、簡単に説明すると、ファイル中で改行は「改行コード」と呼ばれる文字として表現されています。そしてWindowsは改行コードにCR(Carriage Return)+LF(Line Feed)を採用し、 Macは最初はLFを用いていましたが、後にCRを採用し、 Linux(Unix)はLFを採用しました。そのため、文字数を厳密にカウントしようとすると、 MacとLinuxのファイルは改行分、 Windowsのファイルは改行の二倍だけ文字が余分に含まれていることになるのです。
VimではファイルのCR+LF, CR, LFを切り替えることができ、「:set ff=」の後に「dos」(CR+LF)「mac」(CR)「unix」(LF)と入力し、 Exコマンドを実行することでバッファ内の改行コードを変更できます。永続化したい場合は、ファイルを保存することでファイルそのものの改行コードが変更されます。
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます