はじめに
最近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.インサートモード(テキスト挿入モード)
ノーマルモードで編集したい位置に移動したら、i
やa
でインサートモードへ切り替えます。インサートモードではテキストの入力や編集ができます。
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 で終了) |
ファイルの一部を保存する
v + 移動キー
で保存したい範囲を選択する- 選択した状態で
:
を押すと、画面最下部に:'<,'>
が表示される - 続けて
w
と保存したいファイル名(既存ファイル名と重複しない)を入力
(:'<,'>w ファイル名
)
ファイルを取り込む
ファイルを取り込みたい位置にカーソルを置き、:r ファイル名
+ENTERキー
で取り込む
おわりに
今回は自分用のメモも兼ねて、vimの基本的な操作をまとめました。
これから何度も見返しながら練習し、身につけていきたいと思います!