さあ、Vimをはじめよう
そもそも Vim ッテ ナンダ?
「Vim」というワードはこれまで何度か耳にしたことがありましたが、面倒そうなのでスルーしていました。
なぜなら、VSCodeのように便利なエディターが周りにあるからです。
しかし最近になって、Vimはエンジニアにとって非常に重要なツールの一つであるという事実を知りました。
Vimについて調べると、次のような特徴があることがわかりました。
そして、これが大事です。「デキるエンジニアはVimを華麗に使いこなす」らしい。
デキるエンジニアを目指したい私としては、Vimをイチから学ぶことにしました。
本記事では、はじめてVimを使ってみて、必要な基本操作を私なりにまとめてみました。
Vimの起動
Vimを起動するには、ターミナルを起動して次のコマンドを入力するだけです。
$ vim
ファイル名を併記すればVimが起動してファイルを開きます。
例えば、sample.txtと言う名前のテキストファイルを開くなら
$ vim sample.txt
と入力します。
Vimの終了
Vimを終了するには、変更があるかどうかで入力するコマンドが違います。
キー入力 | 説明 |
---|---|
:q | Vimを終了(変更がある場合は終了できません) |
:q! | 変更を破棄してVimを終了 |
変更した内容の保存
Vimではファイルの内容に変更があっても、自動的に保存されません。
内容を変更した場合は、忘れずに保存しましょう。
キー入力 | 説明 |
---|---|
:w | 変更した内容を保存 |
:w ファイル名 | ファイル名に保存(指定のファイルがなければ新規作成) |
:wq | 保存して終了 |
3つのモード
Vimには、3つのモードがあります。 このモードを切り替えながら作業をします。
モード | キー入力 | 説明 |
---|---|---|
NORMAL | esc |
エディターを操作するときに使うモード |
INSERT | i |
文字を入力するときに使うモード |
VISUAL | v |
範囲を指定して操作するときに使うモード |
基本的な操作は、NORMALモードで行います。
ここからは、特に断りがなければNORMALモードで操作を行います。
Vimを学ぶ際の注意点が2つあります
- caps lock は OFF にしましょう(大文字と小文字で挙動が違うことがあります)。
- 日本語入力ONのままではモードの切替ができません。かならず 英数入力 にしましょう。
特に日本語入力ONのまま操作してしまうのは 「Vimあるある」 だと個人的に思います。
意のままにカーソルを動かそう
基本のカーソル移動
Vimでは、マウスを使わずにキー入力によってカーソルを移動させます。
使うキーは、 h
j
k
l
キーです。
キーボードをよく見てください。これらのキーは一列に順番に配置されていますね。
それぞれのキーを押すとカーソルが一つ移動します。
キー入力 | 移動方向 |
---|---|
h |
左 |
j |
下 |
k |
上 |
l |
右 |
便利な移動方法
1文字ずつカーソルを移動させましたが、なんだか移動が面倒だなと感じますね。
Vimには便利な移動方法があります。
キー入力 | 移動方向 |
---|---|
w |
次の単語の先頭に移動 |
e |
現在の単語の末尾に移動 |
b |
前の単語の先頭に移動 |
$ |
行末に移動 |
0 |
行頭に移動 |
これまで紹介した移動の方法をVimでは、モーションと呼びます。
この他にもモーションはたくさんありますが、ここにあげたモーションはマスターしましょう。
モーションの前に数字を付け加えることで、その数字の分だけ繰り返してくれます。
例えば、
2l
2文字分右へ移動
2w
次の次の単語の先頭に移動
といった具合です。
数字
+ モーション
の組み合わせはものすごく便利ですので、キッチリ使いこなせるようにしましょう!
効率的なテキスト編集を学ぼう
カーソルの移動方法がわかったところで、次は入力済みの内容を編集する方法を学びましょう。
1文字だけ消す
消したい文字の上にカーソルを移動させます。
x
を入力することで、カーソルの下の文字を削除できます。
また、 x
の前に数字をつけると指定した文字数を削除することができます。
例)
3x
カーソルの位置から3文字削除
削除(オペレータ: d)
単語単位で削除をしたりする場合、x
をポチポチしているようでは作業効率が良くありません。
単語や行単位で削除したいときには、d
に続けてモーションを入力するとまとめて削除できます。
代表的な組み合わせをまとめました。
キー入力 | 説明 |
---|---|
dw |
カーソル位置から単語の末尾まで削除(空白を含む) |
de |
カーソル位置から単語の末尾まで削除(空白を含まない) |
d$ |
カーソル位置から行末まで削除 |
d0 |
カーソル位置の左から行頭まで削除 |
もちろん、モーションの前に数字を付け加えて、d2w
のようにすることもできます。
このようにモーションの前につくコマンドのことをオペレータ(またはオペレータコマンド)と呼びます。
オペレータは二重に入力することで、行全体に作用させることができます。
例えば、dd
と入力すると行全体を削除します。
これを使えば、0
と入力してカーソルを行頭に移動させて、d$
と入力しなくてもいいんです。
すごく便利ですね!
INSERTモードへの切り替え方法
NORMALモードからINSERTモードへ切り替える方法は、冒頭で紹介した方法の他にもいくつかあります。
カーソル移動を伴う切替方法をまとめました。
キー入力 | 説明 |
---|---|
i |
カーソル位置の左にカーソルが移動し、INSERTモードに切り替わる |
I |
行頭にカーソルが移動し、INSERTモードに切り替わる |
a |
カーソル位置の右にカーソルが移動し、INSERTモードに切り替わる |
A |
行末にカーソルが移動し、INSERTモードに切り替わる |
o |
カーソルの下に1行追加して、INSERTモードに切り替わる |
O |
カーソルの上に1行追加して、INSERTモードに切り替わる |
変更(オペレータ: c)
修正したい箇所にカーソルを移動させ、削除して、INSERTモードに切り替えて内容を変更する場面も多いと思います。
でも、何だか手数が多い気がしますね。
修正したい箇所を削除したらINSERTモードに自動で切り替わって欲しい。
そんな願いを叶えてくれるのが c
という変更を行うオペレータです。
オペレータですので、削除の d
と同じくモーションと組み合わせて使用します。
モーションとの組み合わせの一例をまとめました。
キー入力 | 説明 |
---|---|
cw |
カーソル位置から単語の末尾まで削除(空白を含む)し、INSERTモードに切り替わる |
ce |
カーソル位置から単語の末尾まで削除(空白を含まない)し、INSERTモードに切り替わる |
c$ |
カーソル位置から行末まで削除し、INSERTモードに切り替わる |
c0 |
カーソル位置の左から行頭まで削除し、INSERTモードに切り替わる |
cc |
行全体を削除し、INSERTモードに切り替わる |
もちろん、モーションの前に数字を付け加えて、c2w
のようにすることもできます。
1文字だけ置き換え
コードを書けばかならず発生するタイポ、これを修正するときに便利なのが置き換えのコマンドです。
修正したい箇所にカーソルを移動させます。
r
に続けてタイプした文字に置き換わります(1文字だけ)
タイポを発見して、1文字消して、INSERTモードに切り替えて修正といった手間を減らすことができるので、すごく便利ですね。
undoとredo
文字の編集を行えば、操作を誤ることもあります。
Vimでは、元に戻す(⌘
+ Z
)、やり直す(⌘
+ Shift
+ Z
)と同じことをできます。
キー入力 | 移動方向 |
---|---|
u |
最後の変更を元に戻す(undo) |
U |
行全体の変更を元に戻す(undo) |
control +r |
元に戻した変更をやり直す(redo) |
コピー(ヤンク)してペースト(プット)する
Vimでは、私たちが慣れ親しんだコピーとペーストのことをそれぞれ、ヤンクとプットと呼ぶようです。
それはさておき、ヤンクはオペレータです。
ヤンク(yank)の頭文字である y
とモーションを組み合わせて使用します。
例によって組み合わせの一例をまとめました。
キー入力 | 説明 |
---|---|
yw |
カーソル位置から単語の末尾までヤンク(空白を含む) |
ye |
カーソル位置から単語の末尾までヤンク(空白を含まない) |
y$ |
カーソル位置から行末までヤンク |
y0 |
カーソル位置の左から行頭までヤンク |
yy |
行全体をヤンク |
コピーした内容をプットするには、p
を入力します。
また、Vimでは直前に削除(x
や d
)した内容を保持していて、p
でプットすることもできます。
VISUALモードへの切り替え方法
NORMALモードからVISUALモードへ切り替える方法は、冒頭で紹介したとおり v
です。
VISUALモードに切り替えた後でカーソルを移動させると移動した軌跡が強調表示されます。
ちょうど、マウスを使ってドラッグして範囲指定をするのと同じ感じです。
例えば、この状態で
d
を入力すると、指定した範囲の文字を削除します。
y
を入力すると、指定した範囲の文字をヤンクします。
VISUALモードを使うことで、普段マウスを使って範囲を選択して、コピペするという作業がVimでできますね。
もっと便利に使うために
画面のスクロール
画面に表示されていない部分を見たいとき、画面をスクロールさせたくなりますよね。
マウスを使わないVimでも画面スクロールができます。
キー入力 | 説明 |
---|---|
control + e |
画面を下方向にスクロール |
control + y |
画面を上方向にスクロール |
指定した位置にカーソルを移動
先頭行、最終行、あるいは指定した行番号まで一気にカーソルを移動させることもできます。
キー入力 | 説明 |
---|---|
gg |
ファイルの先頭行に移動 |
G |
ファイルの最終行に移動 |
行番号 g |
指定した行番号に移動 |
特に 行番号
g
の移動はエラーの修正時に一気に飛べて便利そうですね。
対応する括弧の検索
コードを書いて括弧のネストが深くなると括弧の閉じ忘れでエラーになることがあります。
そんなときは、調べたい括弧にカーソルを移動して %
を入力するだけです。
そうすると(), [], {} に対応する括弧を検索することができます。
この機能は括弧のデバッグに威力を発揮しそうですね。
検索
ファイルの中から探したい語句を検索するには、/
探したい語句
enter
と入力します。
同じ語句をもう一度下方向に検索するときは n
を押します。
同じ語句を現在位置から上方向に検索するときは N
を押します。
置換
修正前の語句(old)を修正後の語句(new)に置換する方法をまとめました。
キー入力 | 説明 |
---|---|
:s/ old / new |
現在の行で最初にヒットした old を new に置換 |
:s/ old / new /g |
現在の行の old を new にすべて置換 |
: 開始行 , 終了行 s/ old / new /g |
行を指定して old を new にすべて置換 |
:%s/ old / new /g |
ファイル内の old を new にすべて置換 |
:%s/ old / new /gc |
ファイル内の old を1つずつ確認しながら new に置換 |
検索・置換のオプション設定
検索・置換のオプション設定も用意されています。
キー入力 | 説明 |
---|---|
:set ic or :set ignorecase |
検索時に大文字小文字の区別をしない |
:set is or :set incsearch |
検索フレーズに部分マッチしている部分を表示 |
:set hls or :set hlsearch |
マッチするすべてを強調表示 |
設定したオプションを無効にするには、set
のあとに no
をつけます。
例 :set noic
REPLACEモード
冒頭でVimにはモードが3つあるといいましたが、ごめんなさい。
実は4つ目のモードがあります。
NORMALモードで R
を入力すると、REPLACEモードに切り替わります。
このモードでは、カーソルの下にある文字を直接変更できます。
REPLACEモードを抜けるには esc
を押します(NORMALモードに切り替わります)。
いかがだったでしょうか。
この基本を抑えたらあとは、実践あるのみです。
Vimを使いこなしてデキるエンジニアを目指しましょう!
では、また