🌐

Envaderを利用して、vimについて学んだ事のまとめ。

2022/03/12に公開

どうも、kobakichiです。
今回は、Linux環境で必ず触る事になるであろうテキストエディタ、vimについて学んだので、その振り返りになります。

学習するにあたり利用したのが、環境構築不要で、オンラインでLinux環境が学べてしまうEnvaderを利用しました。

気になる方は下記にリンクを貼っておきますので、参考までに。。。

Envader

コース一覧

vim入門シナリオ

はじめに

今回はEnvaderを利用して、vimについて学びました。
その中でも重要だと思ったことをここにまとめています。
すぐに思い出せるように、未来のエンジニアである自分へ向けて。。。

vimとは

vim・・・正式名称 Vi IMitation(viの模倣)の略とされていたみたいですが、現在はVi IMproved(viの改良)というようにされているようです。(Wikipedia調べ)

何と、オランダ人のプログラマー、ブラム・モールナールさんという方が開発したらしいです。(Wikipedia調べ)
勝手にアメリカの人が作ったのかと思ってた。。。。

メリットとして良く言われるのは、テキスト編集をキーボードのみで完結できるため、素早く編集できるのがメリットとされていますね。

正直私は、VSCodeを多用するためこのメリットをまだ感じていません。
が、しかし、キーボードのみでマウスを使うことなく、ソースコードを書いたりできたらかっこいいなとの憧れは抱いています。
ただ、VSCodeに比べると、補完機能や拡張機能の設定などが若干複雑なため、まだメインはVSCodeを使用しています。
vim用のプラグインなどをインストール、設定することで補完機能などを使う事ができるようになるため、今後勉強しながらvimに移行して行けたらと。。。。

vimのモードという概念

vimにはモード、と呼ばれる考え方があります。
以下四つに分かれます。

  • ノーマルモード(カーソル移動、テキスト削除などができる)
  • ビジュアルモード(範囲選択をして何かやる)
  • 挿入モード(文字を入力する事ができる)
  • コマンドラインモード(ノーマルモードの時に:を入力するとこのモードになる)

vimはこのモードを切り替える事で編集したり、範囲選択したりするんですね!
ここだけ見ても、VSCodeとは違う事がはっきりと分かります。

vimに関してはできる事がたくさんあり紹介しきれない部分がありますので、良く使うであろうコマンドをモード別にまとめてみます。

vimを起動する。

vimを起動するには、

vim test.txt

と入力すると、test.txtというファイルが存在していなければ新規にtest.txtというファイルを作成してvimを起動する事ができます。

もしすでに存在しているファイルを編集したい時には

vim 存在しているファイル名

で指定したファイルをvimで開く事ができます。

注意点

この時、自分が居るディレクトリに指定したファイルが無く、他のディレクトリにファイルが存在している場合にはエラーになります。

その場合には、相対パスか絶対パスで指定してあげるか、cdでディレクトリを移動する必要があるので注意しましょう。

ノーマルモード

vimを立ち上げて最初に自分がなっているのがこのノーマルモードです。
カーソルの移動やテキストの削除、コピー&ペーストが主な機能。

Envaderに詳細が書かれていて、初めて知ったのがオペレーターモーションテキストオブジェクトリピートカウントという機能がある、考え方がある、という事です。
ただモードを変更して内容を編集するという考え方ではないんですね〜。

オペレータ一覧

以下 infinitloop様より引用させていただきました。

マッピング 動作
c 変更する
d 削除する
y yankする
~ 大文字小文字を入れ替える (‘tildeop’がセットされていれば)
g~ 大文字小文字を入れ替える
gu 小文字にする
gU 大文字にする
! 外部プログラムでフィルターする
= インデントを整形する
gq テキストを整形する(幅を80に収めたり)
g? ROT13で暗号化する
> 右にインデントする
< 左にインデントする
zf foldを定義する
g@ ‘operatorfunc’に設定された関数を呼び出す

正直、オペレータと呼ばれるものだけでもこんなにあるの?と衝撃です。。

自分で試してみましたが、guで小文字にしてみたり、gUで大文字にしてみたりするのが便利なんじゃなかろうかと感じました。
vimmerと呼ばれる方々はこれを使いこなしているんでしょうかね〜。すごい。。。

テキストオブジェクト

上記のオペレータの後を入力した後に入力するコマンド。

以下 人生シーケンスブレイク様より引用
非常に分かりやすかったので、サイトの方もぜひ覗いてみてください。

テキストオブジェクトのaとiコマンド

コマンド 意味 対象
a an object まとまり(記号を含む)
i inner まとまりの内側(記号を含まない)

aとiコマンドの後に利用可能な移動コマンド

コマンド 意味 対象
w word カーソル前後の単語
W WORD カーソル前後の単語(ホワイトスペース含む)
s sentence カーソル前後の文
p paragraph カーソル前後の段落
[ ] カーソル前後の[]block
( ) または b block カーソル前後の()block
< > カーソル前後の<>block
t tag カーソル前後のtag block. ここでいうタグとはhtmlの<div>...</div>など
{ } または B Block カーソル前後の{}block
" や ' や ` カーソル前後の " や ' や ` それぞれのquote block

私がよく使うのは、ciwをよく使います。
上記の意味を考えると、c変更する、iwまとまりの内側のカーソル前後の単語、と言った意味になるはず。。。

モーション

カーソル移動のコマンド。
ノーマルモードの時に使えます。

以下 さくらのナレッジ様より引用

キー 説明
u 戻る(アンドゥ)
ctrl + r 戻るを戻る(リドゥ)
0(ゼロ) 行頭に移動(空白文字も含む
^ 行頭の非空白文字に移動
$ 行末に移動(カウントがある場合は[count]-1行)
g_ 行末の非空白文字に移動(カウントがある場合は[count]-1行)
f{char} 右に向かって[count]番目の{char}に移動
F{char} 左に向かって[count]番目の{char}に移動
t{char} 右に向かって[count]番目の{char}の1つ左の文字に移動
T{char} 左に向かって[count]番目の{char}の1つ右の文字に移動
; [count]回、最後のf、F、t、Tを繰り返す
, [count]回、最後のf、F、t、Tを反対方向に繰り返す
G [count]行目の最初の非空白文字に移動、カウントを指定しないときはファイルの最終行に移動
gg [count]行目の最初の非空白文字に移動、カウントを指定しないときはファイルの先頭に移動
w 次の[count]個目のword(*1)の先頭に移動
W 次の[count]個目のWORD(*2)の先頭に移動
b 前の[count]個目のwordの先頭に移動
B 前の[count]個目のWORDの先頭に移動
e [count]個目のwordの末尾に移動
E [count]個目のWORDの末尾に移動
} 次の[count]個目の段落(*3)に移動
{ 前の[count]個目の段落に移動
% 対応する記号に移動(デフォルトは([{}]))
[count]go ファイルの先頭から[count]バイト目に移動

ggでファイルの先頭に移動とか、Gでファイルの末尾に移動とか、毎回ググって調べていたので、もういい加減覚えようと思います。

ビジュアルモード

ノーマルモードの状態で、vを押すとビジュアルモードへ切り替わり、選択したテキストの範囲に対して操作する事ができる。
shift押しながら矢印キーで範囲選択するイメージですね。

vを押してから下記のキーを押すと色々できる。

キー 意味
y 選択範囲をコピー
d 選択範囲を削除
c 選択範囲を削除してインサートモードに移動
= 選択肢範囲を整形
I 矩形の時、選択範囲の全ての行先頭にテキストを入力
J 選択範囲を全て連結する
ip カーソル位置の段落全体を選択
ap カーソル位置の段落全体を選択(後続の空行も含めて選択)
iw カーソル位置の単語全体を選択
aw カーソル位置の単語全体を選択(後続のスペースも含めて選択)

インサートモード

ノーマルモードからiaを押すとインサートモードになり、文字を入力できるようになります。

こちらの記事が分かりやすかったです。
【備忘録】Vimの操作

コマンド 動作
esc ノーマルモードに移行
ctrl-c escと同じ
i カーソルの前で挿入モード
a カーソルの後ろで挿入モード
I 先頭に移動して挿入モード
A 末尾に移動して挿入モード
O 前に改行して挿入モード
o 後ろに改行して挿入モード
ctrl-y 上の行のカーソル位置の文字を挿入
ctrl-e 下の行のカーソル位置の文字を挿入
ctrl-t 1タブ入力
ctrl-d 1タブ削除
ctrl-g j 下の行に移動
ctrl-g k 上の行に移動
ctrl-h 1文字削除
ctrl-x,-n 開いているファイル

ctrl - cでもノーマルモードへ移行できるなんて初めてしりました。。。

コマンドラインモード

ノーマルモードの時に以下を入力するとコマンドラインモードへ移行し、保存や保存しないで終了などができるようになります。

コマンド 説明
:w 変更した内容を保存
:q vimを終了
:wq 変更した内容を保存して終了
:q! 強制終了

まとめ

  • vimはオランダ人のプログラマー、ブラム・モールナールさんという方が開発した!
  • vimにはモード、と呼ばれる考え方がある。
  • ノーマルモード(カーソル移動、テキスト削除などができる)
  • ビジュアルモード(範囲選択をして何かやる)
  • 挿入モード(文字を入力する事ができる)
  • コマンドラインモード(ノーマルモードの時に:を入力するとこのモードになる)

これだけでもほんの一部しか紹介できていないので、全部覚えるのは無理そうですね。
随時やりたいことをググりながら進めて言く事が最善策かと感じました。

でも、使いこなせたらかっこいいだろうな。。。

最後まで読んでいただきありがとうございました。

参考にさせていただいた記事一覧

wikipedia

infiniteloop様

さくらのナレッジ様

人生シーケンスブレイク様

まくまくvimノート様

【備忘録】Vimの操作

Discussion