Hirologue

年齢を理由にエンジニアになることを諦めないミドルの成長記録

EP 2: Vimを使いこなしてデキるエンジニアになりたい

さあ、Vimをはじめよう

そもそも Vim ッテ ナンダ?

Vim」というワードはこれまで何度か耳にしたことがありましたが、面倒そうなのでスルーしていました。
なぜなら、VSCodeのように便利なエディターが周りにあるからです。

しかし最近になって、Vimはエンジニアにとって非常に重要なツールの一つであるという事実を知りました。

Vimについて調べると、次のような特徴があることがわかりました。

  • サーバーの構築の際にVimしか使えない環境もある
  • マウスを使わずに作業をするため、作業効率が上がる
  • VSCodeなどのエディターでもプラグインで使用できる など

そして、これが大事です。「デキるエンジニアは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では直前に削除(xd)した内容を保持していて、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 現在の行で最初にヒットした oldnew に置換
:s/ old / new /g 現在の行の oldnew にすべて置換
: 開始行 , 終了行 s/ old / new /g 行を指定して oldnew にすべて置換
:%s/ old / new /g ファイル内の oldnew にすべて置換
:%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を使いこなしてデキるエンジニアを目指しましょう!

では、また