Vim初学者に贈る、よく噛み砕いた、でもちょこっと詳しい「Vim」

はじめに|なぜVimを学ぶのか

あなたはVimというテキストエディタをご存知でしょうか?

「少しは知っている」という方も「名前だけなら」という方も、はたまた「まったく知らない!」という方でも大丈夫。

この記事はそんな、初学者エンジニアを自負するあなたに向けて書いた記事となっています。

世の中には使いやすい便利機能満載の、いわゆる“リッチな”テキストエディタがいくつもありますが、そういったテキストエディタと比較をすると、Vimは少し―――いや、かなり不便で使い心地のテキストエディタに感じられてしまうかもしれません。

では、それなのになぜVimの使い方を学ぶのか?

それは、リッチで便利なテキストエディタが使用できない、Vimしか使えない開発環境があったりするからに他なりません。

とくにサーバーの構築や管理、プログラムの編集など、Linux上での作業においてはもはや必須のスキルとなるのがVimの操作です。

Vimを学ぶことで、Linuxやリモート環境での作業において必要なスキルを身に付けることができます。

またVimはキーボード中心の操作に特化しており、マウスを使用せずにテキストを編集することができます。
そのため高速な操作が実現し、ひいては開発効率の向上が期待できます。

学習開始時はなかなかとっつきにくいと感じることの多いエディタかとは思いますが、この記事で初歩の初歩から順を追って学んでいけば、Vimというテキストエディタのおおまかな概要は掴むことができると思います。

さらに、記事全体を読み終えた頃には「もっとVimについて深く知りたい!」と切望する、Vimmerへの一歩を踏み出しているかもしれません。

そのためにもまずは「Vimとは何なのか?」から、一緒に学んでいくことにしましょう。

そもそもVimとは何なのか?

Vim(ヴィム | Vi IMprovedの略)は、テキストエディタのひとつです。

Vi(ヴィーアイ | Visual Editorの略)という初期のテキストエディタを基に開発され、Viをより多機能に、そしてより使いやすくしたバージョンがVimです。

Vimは、さまざまなオペレーティングシステム(Windows、macOS、Linuxなど)で利用することが可能で、テキストファイルの編集やプログラミングのための開発環境として、現在広く利用されています。

またVimはGUIを必要とせず主にCUI上で動くため、Unix系OS(Macなど)には標準のエディタとして搭載されていることが多いようです。

この「CUI上で動く」という部分がいまいちピンとこない部分かと思いますので、以下に簡単にではありますが、GUIとCUIの違いを比較してみました。

CUI(Character User Interface)

  • CUIでは、文字の入力が主な操作の中心となります。
  • CUIでは、ユーザーは主にキーボードを使用し、文字を組み合わせたコマンドなどを入力し(例えば:whなど)操作します。
  • ユーザーが文字の組み合わせによるコマンドをキーボードに入力すると、コンピューターはそれを理解し、対応する処理を実行したり表示したりします。
  • 例:yを2回yyと押す → カーソルがある行の文章をコピーする など

GUI(Graphical User Interface)

  • GUIでは、視覚的な表示と操作が中心となります。
  • GUIでは、ユーザーはマウスなどを使用して画面上に見える視覚的な要素(例えば、ボタン、アイコン、メニューなど)を操作します。
  • ユーザーが画面上のボタンをクリックすると、コンピューターはその操作の意味を理解し、対応する処理を実行したり表示したりします。
  • 例:ユーザーがフォルダのアイコンをクリックする → フォルダの内容がウィンドウ内に表示される など

上記のとおりVimはCUI上で動くため、マウスを使わずキーボードのみの操作が可能です。

そしてその操作のためには、いくつもの「操作方法」を理解し覚える必要があります。
一般的なテキストエディタのように、起動をしたらすぐに文章を書き始めるということはできない仕様になっています。


この操作性が、Vimは初心者には難しいと言われているゆえんでもあり、また一度理解し慣れてしまえば高い生産性を発揮できる要因でもあるのです。

Vimを使うために大事なこと

「タッチ・タイピング」の習得

Vimの操作は、先ほど軽く説明したとおり、主にキーボードを操作することによって行われます。
たとえば、通常であればマウスの操作によって行われるカーソルの移動も、削除する文章の範囲選択も、すべての操作をキーボードのキーを入力して実行します。

そのため、キーボードのキーの場所を把握していないと、操作の難易度が格段に上がってしまいます。
また、キー操作が速く正確であればその分作業効率も上がります。

スムーズなVim操作のためには、「タッチ・タイピング」はぜひとも習得しておきたいスキルです。

Vimの代表的な4つのモード

Vimは複数のモードを用いてテキストの編集などを行います。この独特な機能が、初学者を混乱させる一因でもあります。

Vimには代表的な4つのモードがあります。この「Vimには各種モードがあり、モードを適宜切り替えながら作業を行う必要がある」ということをまずはしっかりと理解しておきましょう。

Vimの代表的な4つのモードは以下の通りです。

モード状態
ノーマルモードVimのデフォルトのモード。
テキストの編集操作やカーソルの移動など、
様々なコマンドを実行することが可能。
挿入モードテキストを入力・編集するためのモード。
ビジュアルモードテキストを選択して編集することが可能。
範囲選択やコピー・切り取り・貼り付けなどの操作ができる。
コマンドラインモードコマンドを入力してVimの機能を使用することが可能。
ファイルの保存や検索・置換など、様々なコマンドを実行することができる。

また、4つのモードを図で表すと以下のようになります。

図で見ても分かる通り、Vimのデフォルトモードである「ノーマルモード」に戻る場合は、どのモードからであってもESCキーひとつで戻ることが可能です。
現在なんのモードで操作をしているか、までは意識する必要はないですが、何らかの操作を始める際には、必ずESCキーでノーマルモードに戻す、ということを肝に銘じておくとその後の操作もスムーズに進みます。

事前確認

Vimの操作に入る前に、まずは事前確認をしておきましょう。確認していただきたい点は以下の4点です。

  • Capsロックがされていないこと(Vimは大文字小文字入力を区別するため)
  • ESCキーでノーマルモードに変換していること
  • コマンドは常に半角英数で入力をすること
  • コマンド入力の後に操作を「実行」したい場合はEnterキーを押すこと

どの確認事項も一見すると当たり前のことに見えますが、操作に夢中になっている時はついうっかり忘れてしまっていることも多い項目です。各操作やコマンド入力の前にしっかりと確認する癖をつけておきましょう。

Vimの起動方法と終了方法

さて、ここからは実際のVimの操作方法に移っていきます。

Vimの操作方法を触りながら覚えようとなった場合、そもそもVimの起動方法を知らなければ操作を開始することもできませんね。
ここではまず、Vimの起動方法と終了方法を説明します。
なお下記説明は、LinuxやMacOSなどUnix系システムで、ターミナルがデフォルトで搭載されている環境にすでにあることを前提条件としています。

Vimの起動方法

  1. ターミナル(コマンドプロンプト)を開きます。
  2. ターミナル上でvim ファイル名 とコマンドを入力し、Enterキーを押します。
  3. 上記のコマンドを実行すると、Vimが起動し、テキスト編集画面が表示されます。

Vim終了方法

また、Vimの終了方法はいくつかあります。
ESCキーでノーマルモードに切り替え済みであることを確認してから、以下のいずれかのコマンドを入力することでVimを終了することができます。

コマンド機能
:qファイルを保存せずに終了します。変更がある場合、エラーメッセージが表示されます。
:q!ファイルを保存せずに強制的に終了します。変更がある場合でも警告なしに終了します。
:wqファイルを保存して終了します。変更がない場合は保存せずに終了します。
Vimの終了コマンド

上記の方法に加えて、ターミナル上でVimを強制終了する方法もあります。一般的にはCtrl + Cキーを押すことで、Vimを強制終了することができます。ただし、この方法は変更が保存されずに終了するため、注意が必要です。

最低限のLinuxコマンドは確認しておこう

ではようやくVimの各種コマンドの詳しい紹介を――と言いたいところですが、その前にもう一つ確認しておきたいことがあります。それは最低限のLinuxコマンドの知識です。

VimはCUI上で動くと前半で説明をしました。が、忘れてはいけないことは、Vimはそもそもの機能がテキストエディタであることです。そのため、テキスト編集や作成以外の作業、たとえばCUI上でのファイルの新規作成や編集、ディレクトリの移動や削除などは、CUI上で直接指示を打ち込み操作する必要があります。

その際に使用するコマンドがLinuxコマンドです。

「Vimだけが単体で使用できればいい!」という場合はさほど必要にはならない知識ではありますが、そういったケースはかなり稀だと思いますので、ここでサクッとLinuxコマンドについても確認をしておきましょう。

Linux全般やLinuxコマンドに関する知識もまたかなりのボリュームがありますので、すべてをご紹介することは難しいのですが、まずは知っておくべきと思われる代表的コマンドを下記にピックアップしてご紹介しますね。

代表的なLinuxコマンド一覧

コマンド効果
ls現在のディレクトリ内のファイルとディレクトリの一覧を表示します。
cdディレクトリを変更します。
例えば、cd Documentsと入力すると、”Documents”という名前のディレクトリに移動します。
pwd現在のディレクトリの場所を表示します。
mkdir新しいディレクトリを作成します。
例えば、mkdir myfolderと入力すると、”myfolder”という名前のディレクトリが作成されます。
touch新しいファイルを作成します。
例えば、touch myfile.txtと入力すると、”myfile.txt”という名前の空のテキストファイルが作成されます。
mvファイルやディレクトリの移動や名前の変更を行います。
例えば、mv oldname.txt newname.txtと入力すると、”oldname.txt”という名前のファイルを”newname.txt”という名前に変更します。
rmファイルやディレクトリを削除します。
例えば、rm myfile.txtと入力すると、”myfile.txt”という名前のファイルが削除されます。
catファイルの内容を表示します。
例えば、cat myfile.txtと入力すると、”myfile.txt”というファイルの内容が表示されます。

何はともあれカーソル移動

さて、ここからはようやくVimの操作に必要なコマンドの説明に移っていきます。実際にVimを起動して、Vimに触れながらコマンドを学んでいくことにしましょう。

カーソル移動

まずはカーソル移動です。
通常Vimを使用しない多くのユーザーの方々は、マウスやカーソルキー(矢印キー)、トラックパッドなどを使用することが多い操作です。

実際カーソルキーを使用してのカーソルの移動も可能ですが、ホームポジション位置にあるhjklを使用する方が、慣れてしまえばより高速に操作することが可能です。

(操作前にESCを押してノーマルモード上の操作であることを確認してください)

コマンド矢印機能
j下に1行移動(折り返し行には移動しない)
k上に1行移動(折り返し行には移動しない)
h左1文字移動
l右に1文字移動
gj下に1行移動(折り返し行にも移動する)
gk上に1行移動(折り返し行にも移動する)

キーボード設定を変えて高速化

またMacの方は、環境設定で 「キーボードの設定」で 「キーのリピート」と「リピート入力認識までの時間」を両方Maxまで上げると、カーソル移動コマンドの操作性がより向上します。

例:lで右に移動する際など、この設定をすれば高速にカーソルが移動できます。

実用的なカーソル移動

左右への動き

(操作前にESCを押してノーマルモード上の操作であることを確認してください。)

コマンド機能
w次の単語の先頭へ移動
e単語の最後の文字へ移動
b前の単語の先頭へ移動
W,や.や;などの記号を除いた次の単語の先頭へ移動
E,や.や;などの記号を除いた単語の最後の文字へ
B,や.や;などの記号を除いた前の単語の先頭へ移動
0(ゼロ)現在の行の先頭へ移動(文字のない空白部分を含む)
^現在の行の先頭へ移動(文字のない空白部分を含まない)
$現在指定している行の行末へ移動

上下への動き

(操作前にESCを押してノーマルモード上の操作であることを確認してください。)

コマンド機能
ggファイルの先頭に移動
Gファイルの最後へ移動
10 Shift-g現在地より10行下へ移動
Shift-g最終行へ移動

行番号を表示

(操作前にESCを押してノーマルモード上の操作であることを確認してください。)

コマンド機能
:set number各行の先頭に行番号を表示する
:set nonumber行番号の表示を解除する
:set relativenumber現在のカーソル位置を基準とした相対行番号を表示する
:set norelativenumber相対行番号の表示を解除する

なお、行番号表示(相対行表示も含む)の設定は解除をしない限りVimのセッション間で保持されます。つまりVimを終了しても、次回Vimを起動した際には表示状態が引き続き継続されるということです。

n行移動する際は相対行表示をすると便利

画像のように、:set relativenumberコマンドを使用すると カーソル位置からの相対的な行数を表示してくれるため、 Shift+nの移動指定が直感的に行いやすくなります。

ページ移動

コマンド機能
Ctrl-b約1画面分上に移動する
Ctrl-f約1画面分下に移動する
Ctrl-u約1/2画面分上に移動する
Ctrl-d約1/2画面分下に移動する
Ctrl-h表示中の画面上の一番上にカーソル移動
Ctrl-m表示中の画面上の真ん中にカーソル移動
Ctrl-l画面上の一番下にカーソル移動
zzカーソル位置を画面の真ん中までスクロールする

オペレータとモーション

テキスト編集に関するコマンドをご紹介する前に、オペレータ(Operator)とモーション(Motion)についても軽く触れておきます。

オペレータ(Operator)

オペレータ(Operator)は、テキスト編集中に特定の操作を実行するために使用されるコマンドのことです。代表的なオペレータには、以下のようなものがあります。

オペレータ意味機能
ddeleteテキストを削除するオペレータ
yyankテキストをヤンク(コピー)するオペレータ
cchangeテキストを変更するオペレータ

モーション(Motion)

モーション(Motion)は、テキストの範囲を指定するために使用されます。いくつかの一般的なモーションには、以下のようなものがあります。

モーション意味機能
wword次の単語の先頭に移動
eend現在の単語の末尾に移動
bback前の単語の先頭に移動
$End of Line行末に移動
j次の行に移動
k前の行に移動

こうしたオペレータとモーションを組み合わせることで、特定の範囲のテキストを対象とした操作を行うことができます。
例えば、dwはカーソルの位置から次の単語の先頭までの範囲を削除しますし、yjは現在の行と次の行をヤンク(コピー)します。

ここでは軽く触れるに留めますが、オペレータとモーションは、さまざまな組み合わせが可能なため、慣れると効率的かつ迅速なテキスト編集が可能となります。

より深く学びたい方は、Vimのドキュメントやチュートリアルなどを参考に、さまざまなオペレータとモーションの組み合わせを学んでみてください。

テキストを編集してみよう

さて、ここからは実際にテキスト編集時によく活用されるコマンドをご紹介します。
挿入モードの切り替えなどを適宜行いながら、操作を行っていきます。

操作開始時は必ずESC を押してノーマルモードであることを確認してからコマンド操作に移ることを忘れずに実行をしてください。

文字の挿入

コマンド機能
iカーソル位置の前から挿入モードを開始
aカーソル位置の後ろから挿入モードを開始
I行の先頭から挿入モードを開始
A行の末尾から挿入モードを開始
o(小文字オー)カーソルの下に新しい行を挿入し、その先頭から挿入モードを開始
O(大文字オー)カーソルの上に新しい行を挿入し、その先頭から挿入モードを開始

貼り付けと削除コマンド

削除コマンドは、削除オペレータdとモーションを組み合わせることで、より効率的な作業を行うことができます。

コマンド機能
p(プット)カーソル位置の下の行に貼り付け
P(プット)カーソル位置の上の行に貼り付け
xカーソル位置の文字を削除
dwカーソル位置から次の単語までを削除
deカーソル位置から単語の末尾までを削除
d$カーソル位置から行の末尾までを削除(Dと同様)
Dカーソル位置から行の末尾までを削除(d$と同様)
dd行全体を削除
xD以外は前述のオペレータとモーションの組み合わせです。

なお補足ですが、yyでヤンク(コピー)した行だけでなく、ddで削除した行などもpPでプット(貼り付け)することができます。

オペレータ[回数]モーション

また削除などのモーションを何度も繰り返すには、数値と組み合わせることでより効率的な操作が可能となります。

「削除コマンド」の一覧でもすでにご紹介していますが、オペレータ[回数]モーションの組み合わせ例を下記でもより詳しくご紹介します。

組み合わせ例オペレータ回数モーション
d2wd(delete・削除)2(繰り返し回数)w(word・単語)
d3ed(delete・削除)3(繰り返し回数)e(単語末尾)
d4$d(delete・削除)4(繰り返し回数)$(行の末尾)

取り消しコマンド

コマンド機能
u直前の操作を取り消す
U行全体の変更を取り消す
Ctrl-R取り消しの取り消しを行う

検索と置換

検索コマンド

/?を使用した検索コマンドです。主にコマンドラインモードで操作を行います。

また、検索後にnキーを押すと次の一致箇所へ、Nキーを押すと前の一致箇所に移動します。

コマンド使い方
// の後に検索したいキーワードを入力カーソル位置からテキストの終わりに向かってキーワードを検索
??の後に検索したいキーワードを入力カーソル位置からテキスト先頭に向かってキーワードを検索

その他色々な検索移動コマンド

コマンド使い方機能補足
ffの後に検索移動したい文字を入力行のなかで文字検索をしかつ移動もする;で次のヒットへ、,で前のヒットへ移動
*検索したい単語にカーソルを置いて*を入力カーソル位置の単語を含む次の出現箇所に移動大文字と小文字の区別はなし
#検索したい単語にカーソルを置いて#を入力カーソル位置の単語を含む前の出現箇所に移動大文字と小文字の区別はなし
%(,),[,],{, もしくは}上にカーソルがある状態で%を入力ペアとなる括弧や引用符などの対応する文字へジャンプカーソルが括弧や引用符内にない場合は、次の対応する括弧や引用符まで移動する

置換

コマンド機能
:s/old/new現在行の最初の old を new に置換する
:s/old/new/g現在行の全ての old を new に置換する
:#,#s/old/new/g2つの # 行の間で語句を置換する
:%s/old/new/gファイルの中の全ての検索語句を置換する
:%s/old/new/gccを加えると置換の度に確認を求める

範囲指定をするビジュアルモード

ビジュアルモードは、テキストの特定の部分に対して編集や操作を行いたいときに非常に便利です。

選択範囲を視覚的に確認できるため、精確な編集やテキストの移動が容易になります。
また、選択範囲に対して一括でコマンドを実行することもできるため、作業効率を向上させることができます。

ビジュアルモード

コマンド種類機能
vビジュアルモード(文字)文字単位の選択を行う
Vラインビジュアルモード(行)行単位の選択を行う
Ctrl-vブロックビジュアルモード(矩形/くけい)矩形範囲の選択を行う

ビジュアルモードの使用例

ご紹介したとおりビジュアルモードはあくまでも範囲の選択をするモードであるため、他の操作と組み合わせることでより威力を発揮します。

以下はビジュアルモードと他コマンドを組み合わせた一例です。他にも様々な組み合わせが可能なため、実行したい操作があればぜひ組み合わせを考えてみてください。

組み合わせ例実行内容説明
Ctrl-v + ^//一括でコメントアウトするCtrl-vの矩形選択で複数行を選択し、^で全ての行の行頭に移動したのち//で一括コメントアウトする。
Ctrl-v + ^ + >一括で字下げをするCtrl-vの矩形選択で複数行を選択し、^で全ての行の行頭に移動したのち>で一括字下げをする。
Ctrl-v + $ + Shift-A + ;一括でセミコロンをつけるCtrl-v+カーソル移動などで行選択+$で末尾まで移動をし、Shift-Aをし、行末に対して入力モードをして、;を入力すると、選択した行すべての行末にセミコロンがつく。

おわりに|より発展的な知識獲得のために

以上、ここまで駆け足での説明が続きましたが、いかがだったでしょうか?

今回は簡単かつ初歩的な、いわゆる入門に値する(と私が勝手に判断をした)Vimの操作方法などをご紹介してきました。

ですが「Vimってなに?」というVimの存在と初対面だった方からすれば、終盤のコマンド操作などはなかなかイメージのしにくい、難しい内容に感じられたかもしれません。すべてのコマンドを一気に覚えようとはせず、実際にVimに触れながら徐々に知識を深めることで、ゆくゆくはVimのオペレータやモーションの組み合わせを意のままに操ることができるようになっていくかと思いますし、考えるよりも行動しながら身体で覚えていく、という方法が一番の近道となるでしょう。

また、Vimにはさらに多くのコマンドがあり、その多くをこの場ではご紹介出来ておりません。

そのため、これ以降のより詳しい説明や、もう一歩踏み込んだより深い学習などは、ぜひ下記のリソースなどをあたり、学習を進めてみてください。

Vimリソースリスト

  1. Vim日本語ドキュメント
    • Vimの公式ドキュメントの日本語訳です。Vimの基本的な使用方法から高度な機能まで、詳細な解説が提供されています。
  2. vim-jp
    • Vimの日本語コミュニティです。ウェブサイト上で日本語のVimドキュメントや情報を提供しており、Vimの使い方やカスタマイズ方法に関する情報を得ることができます。
  3. vimtutor
    • Vimを学ぶための実践型のチュートリアルプログラムです。Vimを初めて使う人や基本的な操作方法を学びたい人にとって非常に便利です。
    • 使い方はとても簡単です。Macの方であればターミナルを開き、ターミナル上でvimtutorとコマンドを実行することで、チュートリアルが開始されます。
  4. Vim Adventures
    • ブラウザ上で遊べるVim学習ゲームです。ゲームを通じてVimの基本的な操作を楽しく学ぶことができます。基本的には英語版のみですが、多くの方が解説の記事もアップしてくださっているようですので、そちらを調べてトライしてみるのもいいかもしれません。

また今回記事を作成するにあたり、下記動画なども非常に参考にさせていただきました。

文章を読むだけではなかなか学習が進まないと感じている方がいらっしゃれば、ぜひ下記動画も併せてご視聴いただくと、Vimmerへの道がより一歩進むかと思います。

Vim参考動画

以上、本記事がどなたかの助けになれば幸いです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です