vimの基本操作を学ぶ

はじめに

最近vimについて学習しました。 最初は「覚えることが多くて難しそう…」と思っていましたが、学んでいくうちに、「使いこなせたらめちゃくちゃ便利なのでは?」と感じるようになりました。
vimにはコマンドがたくさんあり一気に全てを覚えるのは難しいので、やりたい操作が出てきたら都度調べて、ひとつずつ身につけていくのがいいかと思います。
私自身もまだ全然使いこなせていない初心者なので、自分用のメモも兼ねて、基本の使い方やコマンドについて学んだことをここにまとめておきます。
また、これからvimに触れてみようという方の参考になれば幸いです。
※この記事ではmacOSを使用しています

目次を表示

vimってなに?

vimはターミナル上で動く高機能なテキストエディタで、次のような特徴があります。

  • Linux環境にはほぼ標準でインストールされている
  • 基本的にキーボードだけで操作が可能で、マウスを使わずに高速で編集できる
  • サーバー環境ではGUIが使えないことが多いため、CUIで動作するvimを使えることは必須スキルのひとつ
  • vimでプログラムファイルを開いてコードを書くことができる。また、VSCodeなどのエディタにはvimの操作を再現できる拡張機能がある。

サーバー環境で作業する人には必須スキルであるというのもそうですが、軽快なテキスト編集ができたりプログラムコードを編集するのに特化していることから、世界中には数多くのvim愛好家(vimmer)が存在しているそうです。

学習方法

私は最初に「vimtutor」というチュートリアルで学習しました。実際に手を動かしながら学べたので操作感が分かりやすく、初心者におすすめです。
vimtutorは、ターミナルに$ vimtutorと入力してENTERキーを押すと起動します。起動後は、チュートリアルの指示に従って進めていってください。

vimの基本的な使い方

まずはvimの基本的な使い方についてイメージを掴みましょう。

1.起動する

ターミナルを開いて$ vim memoと入力してENTERキーを押します。これで新規のmemoファイルが作成され、vimで編集できる状態になります。
(既存のファイルも$ vim ファイル名で開くことができます)

2.ノーマルモード

vimは最初はノーマルモードになっていて、このモードがvimのコマンドを使える状態です。コマンドでカーソルの移動や、テキストの削除・コピーなどができます。
jでカーソル移動、dでテキスト削除など)

3.インサートモード(テキスト挿入モード)

ノーマルモードで編集したい位置に移動したら、iaでインサートモードへ切り替えます。インサートモードではテキストの入力や編集ができます。

4.ノーマルモードへ戻る

編集が終わったらEscキーノーマルモードに戻ります。編集を続ける場合はノーマルモードのまま次の編集箇所に移動して、インサートモードに切り替えて編集を行います。

5.ファイルを保存して閉じる

編集が終わったら、:wqで上書き保存して終了します。


以上がvimの基本的な使い方になります。
「コマンドを使うときはノーマルモード」「テキストを編集するときはインサートモード」のように、モードを行ったり来たりするということを覚えておきましょう。

コマンド操作

それでは、コマンドの説明をしていきます。
なるべく同じような動作でまとめています。

4種類のモード

vimには主に4種類のモードがあります

モード 入り方 できること
ノーマルモード Esc
Ctrl+c
デフォルトのモード
(移動・削除・コピー・貼り付けなどを行う)
インサートモード i a 文字を入力するモード
ビジュアルモード v V テキストを選択するモード
コマンドモード : コマンドを入力するモード
(保存・終了・検索・置換などを行う )
基本操作

カーソルの移動

コマンド 操作
h 左方向へ移動
j 下方向へ移動
k 上方向へ移動
l 右方向へ移動

テキストの削除・挿入

コマンド 操作
x カーソル上の一文字を削除
i カーソルの位置にテキストを挿入
a カーソルの右側にテキストを挿入
I カーソルがある行の先頭にテキストを挿入
A カーソルがある行の末尾にテキストを挿入
o カーソルのある行の下に行を挿入してテキスト挿入モードにする
O カーソルのある行の上に行を挿入してテキスト挿入モードにする
ファイル操作
コマンド 操作
vim vimを開く
vim ファイル名 vimでファイルを開く
:w 上書き保存
:w ファイル名 名前をつけてファイルを保存する
(同名ファイルが存在する場合は上書きされる)
:q 閉じる(ファイル内容に変更がある場合は警告が出る)
:wq
ZZ
上書き保存して閉じる
:q! 保存せずに強制終了(破棄)

※全て最後にENTERキーを押す
※末尾に!をつけると強制的に処理を行う

やりなおし
コマンド 操作
u 直前の操作を取り消す(操作を一つ戻す)
U 行全体の操作を取り消す
Ctrl+r 取り消し操作を取り消す(操作を一つ進める)


💡オペレータとモーション

テキストに変更を加える多くのコマンドはオペレータとモーションの組み合わせから成っています。
モーション単体はカーソルの移動ですが、オペレータと組み合わせることで、モーションを範囲とした処理ができるようになります。

例:dwコマンド(カーソル位置から次の単語までを削除する)

コマンド オペレータ(何をするか) モーション(どこまでの範囲か)
dw d(削除する) w(次の単語まで )
モーション(単体ではカーソル移動)
コマンド 操作
w 次の単語の先頭に移動
e 次の単語の末尾に移動
b 前の単語の先頭に移動
$ 行末に移動
0 行頭に移動
削除
コマンド 操作
dw カーソル位置から次の単語までを削除
de カーソル位置から単語の末尾までを削除
d$ カーソル位置から行末までを削除
d0 カーソル位置から行頭までを削除
dd 行を削除
daw カーソル上の単語を削除(空白を含む)
diw カーソル上の単語を削除(空白を除く)

aw = "a word"(単語と空白含む)
iw = "inner word"(空白除く単語のみ)

コピー&ペースト
コマンド 操作
yw カーソル位置から単語の終わりまでをコピー
yy 行をコピー
dd 行を切り取り(削除と同じ)
yaw 単語をコピー(空白を含む)
yiw 単語をコピー(空白を除く)
p ペースト
置き換え・変更
コマンド 操作
r + 文字 カーソル上の文字を一文字置き換える
R + 文字 カーソル上の文字を複数文字置き換える
ce カーソル上の文字から単語の末尾までを削除しテキスト挿入モードにする
c$ カーソル上の文字から行末までを削除しテキスト挿入モードにする
c0 カーソル上の文字から行頭までを削除しテキスト挿入モードにする
cc 行全体を削除しテキスト挿入モードにする
ciw カーソル上の単語を削除しテキスト挿入モードにする
行の連結
コマンド 操作
J カーソルのある行に一つ下の行を連結する
繰り返し

数値 + コマンドで回数分のコマンドを繰り返すことができます

コマンド 操作
. 直前の操作を繰り返す
2j 2行下へ移動
2w 2つめの単語の先頭へ移動
2e 2つ目の単語の末尾に移動
d2w 2単語を削除
c2w 2単語を削除してテキスト挿入モードにする
2dd 2行を削除
2yy 2行をコピー
選択

vまたはVでビジュアルモードに移行、移動キーで範囲を選択します。
vは文字単位、Vは行単位で選択)

コマンド 操作
ggVG 全て選択
v(V) + 移動キー 範囲選択
v(V) + 移動キー + d 選択範囲を削除
v(V) + 移動キー + y 選択範囲をコピー
v(V) + 移動キー + c 選択範囲を削除してテキスト挿入モードにする
括弧
コマンド 操作
% カーソル上の括弧と対応する括弧へ移動する
di( () の中身だけ削除
da( () を中身ごと削除
ci( () の中身を削除してテキスト挿入モードにする
ca( () を中身ごと削除してテキスト挿入モードにする

※コマンドの括弧は< " [ {などに変えられる
i= "inner"(括弧の中)
a = "around"(括弧ごと)

HTML
コマンド 操作
cit タグ間のテキストを削除してテキスト挿入モードにする
ci タグの属性値を削除してテキスト挿入モードにする
dat タグを中身ごと削除
shift+> 段落を下げる
検索
コマンド 操作
/ + 検索語句 + ENTER 下方向に検索し、最初の検索結果へ移動
? + 検索語句 + ENTER 上方向に検索し、最初の検索結果へ移動
n 次の検索結果へ移動
N 前の検索結果へ移動

以下で検索オプションを変更可能です

コマンド 操作
:set is 部分一致を検索
:set ic 大文字と小文字を区別しない
:set noic 大文字と小文字を区別する
:set hls 検索結果を強調表示
:set is 文字を打つたびに検索結果を表示
:set nohlsearch 強調表示をやめる(setをつけなければ一時的に解除)
置換

文字列oldを文字列newに置き換えます

コマンド 操作
:s/old/new/g カーソルがある行の文字列を置き換える
:#,#s/old/new/g 指定範囲内の文字列を置き換える
#,#には置き換える範囲の開始と終了の行番号を指定する。
:%s/old/new/g ファイル全体の文字列を置き換える
:%s/old/new/gc ファイル全体の文字列をひとつずつ確認しながら置き換える
ページ移動
コマンド 操作
gg ファイルの先頭へ移動
G ファイルの最下行へ移動
Ctrl + g ファイル内での位置(何行目か)を画面下に表示
行番号 + G 指定の行番号へ移動
H 表示画面の一番上へ移動
M 表示画面の中央へ移動
L 表示画面の一番下へ移動
可視領域の操作
コマンド 操作
zt カーソル行が画面最上部になるようスクロール
zz カーソル行が画面中央になるようスクロール
zb カーソル行が画面最下部になるようスクロール
Ctrl + b 画面一つ分上へ
Ctrl + f 画面一つ分下へ
Ctrl + u 画面半分上へ
Ctrl + d 画面半分下へ
外部コマンド
コマンド 操作
:! + shellコマンド vim内でshellコマンドを使用する
ENTERで終了)
ファイルの一部を保存する
  1. v + 移動キーで保存したい範囲を選択する
  2. 選択した状態で:を押すと、画面最下部に:'<,'>が表示される
  3. 続けてwと保存したいファイル名(既存ファイル名と重複しない)を入力
    :'<,'>w ファイル名) 
ファイルを取り込む

ファイルを取り込みたい位置にカーソルを置き、:r ファイル名+ENTERキーで取り込む

おわりに

今回は自分用のメモも兼ねて、vimの基本的な操作をまとめました。
これから何度も見返しながら練習し、身につけていきたいと思います!

参考URL