Torihaji's Growth Diary

Little by little, no hurry.

Vimを使って書いてみた(in サクラのvps)

はじめに

みなさん、こんにちは

torihaziです

さて今回は Vimを使ってこの記事を書いてみることにしました。

ただ画像埋め込みはこっちでやりました。

vimとはなんぞや

という方に説明すると linuxとかのCLIでよくお世話になるテキストエディタのことです。

慣れないと扱いが難しいですが、慣れたら頼もしい子なので

ぜひ勉強してあげてみてください。

目次(ここをクリック)

Vimを使う前に

私の環境について

今回の私の環境は下記の通りです。

Linux初学者の方はふーんと読み飛ばしてください。

仮想2Core/1GB メモリ/SSD 50GB

AlmaLinux release 9.3 (Shamrock Pampas Cat)

Vimがあるか

vimがあるかないかは次のコマンドで確認できます。

ある場合は次のような表示が出ます。

# dnf list installed vim-enhanced
vim-enhanced.x86_64      2:8.2.2637-20.el9_1               @appstream

入っていない場合(ここをクリック)

私は最初入っていなかったのでインストールを行いました。

その際はvim-enhanced.x86_64という人がいるので

その人を下記コマンドでダウンロードしてみてください。

# dnf search vim (<= 対象があるか調べるコマンド)
~~
vim-enhanced.x86_64 : A version of the VIM editor which includes recent enhancements
~~
# dnf install vim-enhanced (<= 対象をインストールするコマンド)
インストール状況を示す表示がなされます。

しばらく経つとインストール完了を示す表示がなされます。

# dnf list installed vim-enhanced(<=インストールされているか確認するコマンド)
vim-enhanced.x86_64      2:8.2.2637-20.el9_1               @appstream

# dnf repoquery --list vim-enhanced (<=インストールしたことによって追加されたファイルを確認するコマンド)
~~~
/usr/bin/vim (<=今回のメイン)
~~~
/usr/bin/vimtutor(<=vimのチュートリアルをするのに必要)

Vimを使ってみる(vimtutorを通して)

インストールもできたことなので、実際に使ってみましょう。

今回はvimtutorというvimチュートリアルができるものがあるので

それを元に説明していきます。(読むだけじゃ慣れないので実際に使いましょう)

ターミナルで vimtutorと入力して実行してみましょう。

すると次のような画面が表示されます。

(英語なんですね。日本語って書いてあったのに。)

Lesson 1 vimの基礎

Lesson 1.1 カーソルを動かす

ご存知のようにCLIではマウスが使えません。

そのため普段テキストファイルをいじる要領で

違う行の違う文字をマウスでクリックしてもだめです。

キーボード上のキーを押すことで移動します。

移動方法は次の通りです。

  • kもしくは矢印上キーを押すと、カーソルが上に移動
  • lもしくは矢印右キーを押すと、カーソルが右に移動
  • jもしくは矢印下キーを押すと、カーソルが下に移動
  • hもしくは矢印左キーを押すと、カーソルが左に移動

この項目のレッスン内容は次の通りです。

慣れるまでカーソルを動かしてみんしゃい。

j を押し続けると次のレッスンに行けまっせ。

矢印下を押しても行けまっせ。

後述しますが、vimには幾つかのモードがあります。

もしvimをいじっていておかしいなと思ったら escキーを押してください。

そうするとインサートモードでもビジュアルモードでもなく通常のモードに戻ります。

ちなみに矢印キーよりもhjklの方が早いみたいです。(本当でしょうか。信じ難いです)

※vimのモードについて(ここをクリック)

vimのモードについて最初から容赦なくバシバシ使われるので

各モードの見分け方について簡単に説明します。詳細は後述します。

vimには

  • 通常モード
  • 挿入モード(インサートモードともいう)
  • ビジュアルモード

の3つのモードがあります。

この3つの見分け方は vimの画面の左下を見てください。

通常モードでは何も表示されませんが、

挿入モードであればINSERT、ビジュアルモードであればVISUALと画面左下に表示されます。

通常モードであると後述する保存するコマンド:wqが入力できます。

VISUALモードは:wqなどが入力できません。

INSERTモードは:wqなどが入力できません。ファイルにそのまま追記されます。

1.1の総括

  • vimを使ったカーソル移動手段はhjklキー矢印キー

  • 不安に感じたら escキーで通常モードへ

Lesson 1.2 vimから抜ける

vimから抜ける手段は次の通りです。

以下はvimtutorの説明と少し違いますがこれだけではだめなので追加説明です。

  1. escキーを押して、通常モードへ
  2. 次のいずれかで閉じる
    • vimで開いたファイルを何もせず閉じる場合は:qを入力してEnterを押す
    • 追記修正したものを保存して閉じる場合は:wqを入力してEnterを押す
    • 追記修正したものを保存せずに閉じる場合は:q!を押してEnterを押す

自分が行いたいことによってコマンドを使い分けてください。

またこれ以外にも閉じる方法はあります。

ただこれだけでも実務は可能なので興味がある人は調べてみてください。

1.2の総括

vimを抜ける場合は通常モードに移ってから:q:wq:q!のいずれかを入力してEnter

Lesson 1.3 テキストの編集 - 削除編

1.3の総括

カーソル下のテキストを削除するためには通常モードxキーです。

Lesson 1.4 テキストの編集 - 挿入編

1.4の総括

カーソル下にテキストを追加するためには通常モードiキーです。

挿入モードから戻る場合はescキーです。

Lesson 1.5 テキストのの編集 - 追記編

1.5の総括

行末にテキストを追加するためには通常モードAキーです。

挿入モードから戻る場合はescキーです。

Lesson 1.6 ファイルを編集する

1.6の総括

新規ファイルを編集するには ターミナルでvim 新規ファイル名です。

すでにあるファイルを編集するには ターミナルで vim 編集対象ファイル名です。

編集したファイルを保存するためには通常モード:wqキーです。

Lesson1の総括

Lesson 2 へ行く前にさらっとおさらいしましょう。

  • vimでカーソルを動かすには?
  • そもそもファイルをvimで開くには?
  • カーソルが当たっている箇所の文字を削除するには?またそれは何モードで?
  • カーソルが当たっている箇所に文字を挿入するには?
  • 行末に文字を追記するには?
  • 保存しないで閉じる、保存して閉じるためには?

これがさらっとできれば次に行きましょう

Lesson2

Lesson2.1 削除のd - その1

ここからはテキストを削除するための他の方法を学びます。

今回は dwです。(コロン:はいらないので注意)

dw通常モードで使用し、カーソルが当たっている単語を削除します。

areを削除するために通常モードdと打つと、画面右下にdと表示されます。

続けてwと入力すると、areが削除されます。

もしdを押して、やっぱやめたとする場合はescキーを押すと入力を初期化できます。

削除してしまって、戻す!!となったら通常モードu押せば戻ります。

2.1の総括

単語を削除するには 通常モードでdw

戻す際は u

Lesson2.2 削除のd - その2

カーソルが当たっている行でカーソル以降の文章行末までを丸々削除することができます。

やり方は 通常モードで任意の場所でd$を入力します。

例示されているSomeのeにカーソルを当てて d$を入力してみた結果です。

2.2の総括

カーソルがある行でカーソルが当たっている文字以降を削除するには 通常モードでd$

Lesson2.3 削除の dの仕様について

ここではこれまで学んできた削除コマンドであるdの仕様に関する説明となります。

削除コマンドdは後ろにew$をつけることで挙動が異なります。

  • w: カーソルが当たっているところから次の単語の初めの文字を除くところまで削除します。
  • e: カーソルが当たっているところからその単語の最後まで削除します。
  • $: カーソルが当たっている文字以降を行末まで削除します。

このうち、wとeがわかりづらいかと思うので解説します。

今、Pressingのeにカーソルが当たっている状態です。

dwはPressingのessing(just前のスペース含む)まで、

deはPressingのessing(just前のスペースは含まない)まで削除します。

必要に応じて使い分けてください

2.3の総括

削除コマンドには dwded$がある

Lesson 2.4 回数を付与する

もっと早くカーソル移動したいというそこのあなた

朗報です。もっと早く移動できる方法があります。

  • wで次々と単語の先頭に行けるが、2wとすると2単語先の先頭に行ける
  • eで次々と単語の末尾に行けるが、3eとすると3単語先の末尾に行ける
  • 0とすれば、行頭に行ける

2.4の総括

回数を表す数字を付与するとその回数分コマンドを実行してくれる

Lesson 2.5 回数をつける - その2

※これは私も初めて知りました。

d2wとすることで、dwを2回分してくれるそうです。

ちなみに2dwでも同じ挙動でした。

2.5の総括

d2w2dwも同じ。dw2回分

Lesson 2.6 行削除

行を消したいなら、ddでカーソルがある行を丸々削除できます。

これも2行消したいなら 2ddです。

2.6の総括

行削除は dd、2行削除は2dd

Lesson 2.7 戻すコマンド

エクセルとかでも1つ戻るってありますよね。あれです。

1つ戻るにはu、全戻しはU(大文字)とあります。

※個人的にはuは使いますが、全戻しなら:q!で最初からやり直すことがほとんどです。

2.7の総括

戻りたければ u押しとけば OK。

Lesson 2 の総括

  • dwded$は何が違う?
  • 1行削除をするのは? じゃあ2行なら?
  • 1つ戻りたいなら、何を押せばいい?

さらっとやって次に行きましょう。

最初から全てを理解する必要はありません。

私もまだ全ては理解しきれていません。一緒に頑張りましょう。

Lesson 3 vim編集編(個人的に最もためになった)

Lesson 3.1 貼り付けの p

タイトルの如く、テキストの貼り付けが pで行うことができます。

例えばddで1行削除したものを別の箇所に挿入したい場合は

通常モードで挿入したい箇所の1行上にカーソルを当ててpを入力します。

※これは個人的によく使います。

3.1の総括

通常モードにおけるテキスト貼り付けは pを入力する

なお入力前にdd等でテキストを切り取っておくことが必要。

Lesson 3.2 置き換えの r

※これは革命でした。知らなかったです。

カーソルが当たっている箇所の文字G を Hに変えたいという場合

そんな時は Gにカーソルを当てて rHと打てば解決

3.2の総括

文字置き換えは置き換え対象にカーソルを当ててr○(○は置き換えたい文字)

Lesson 3.3 単語書き換え

wptfd じゃなくて wordとしなければならない時

pからdをxで消して、iを押してordを追記する。

ということはせずにpにカーソルを当ててceを押してください。

そうするとptfdが消えかつインサートモードにまでなります。

3.3の総括

単語書き換えであればce、一文書き換えならccが早い

Lesson 3.4 変更の c

Lesson3.3で少し学習した cの深掘りです。

以前学習した削除のdと同じような使い方が可能です。

  • 単語を書き換えたい場合は書き換え対象の単語にカーソルを当ててcw or ce
  • カーソル以降の文章を行末まで丸々書き換えたい場合は c$

3.4の総括

書き換えるなら cecwc$cc

Lesson 3 の総括

  • ddで切り取ったものを貼り付けるためには?
  • カーソルが当たっている箇所の文字を書き換えるには?
  • cと言えばどういうことができる?

暗記ゲーではありません。使わないと使えません。

Lesson 4

Lesson 4.1 hjklより大きく動く

今までvimにおける移動方法は hjklもしくは矢印キーによる1個ずつ移動しか知らなかった人へ。

そのやり方で1000行目にある変更対象を見に行きますか。

応援してます。下を押し続けていればきっと行けます。

なんてことはありません。日が暮れます。

ここからはもっと大きく動きましょう。

1000行目に行く方法は 1000Gと入力するだけです。

ちなみにファイル先頭に行くにはgg、ファイル後尾に行くにはGで行けます。

現在地を知りたい場合はCtrl G(コントロールキーを押してG)です。

そうすると画面下側に今何行目で全体の~%ですよと表示が出ます。

※ちなみにvimに行数を表示させたい場合は通常モード:set numberとすれば出ます。Lesson2.4のイメージです。

4.1の総括

大きく動くなら1000GGgg。現在地はCtrl G

Lesson 4.2 検索の術

検索をするには/を入力してその後に検索キーワードを入力します。

ヒットした場合nで次の検索ヒット箇所へ、Nで1つ前の検索ヒット箇所へ行けます。

4.2の総括

検索するなら/スラッシュね。nNで次行けるよ。

Lesson 4.3 いなくなった相方を求めて

実際にvimを使用してシェルスクリプトを書くと

たまに かっこの閉じ忘れでエラーになることがあります。

そんな時役に立つのが%くん。

%と入力するだけで(の相方である)がいるか探して、いたらその子にカーソルが当たります。

JSONファイルとかを書くときに役に立ちそうですね。

4.3の総括

()、{}、[]の相方探しは%押しておけ。

Lesson 4.4 置換ですよ、痴漢じゃなくて。

あっちにもこっちにも同じ文字の置き換えをしなきゃ。

そんな時があります。設定ファイルをいじったり、スクリプトをいじっているとあります。

そんな時役に立つのが置換のコマンド

書き方はやや特殊ですが、とても強い子です。

  • :%s/置換対象の文字/置換後の文字 : ファイル内で初めてヒットしたものを置換
  • :%s/置換対象の文字/置換後の文字/g : gとつけるとファイル内ヒットしたもの全て置換
  • :%s/置換対象の文字/置換後の文字/c : cとつけると置換するか確認できる(gcも同じかと)
  • 行数,行数s/置換対象の文字/置換後の文字/g : 指定行範囲のうちヒットしたもの全て置換

※個人的には gの一括置換を使うことが多いです。

4.4の総括

置換したきゃ:%s/ / g。慣れるしかない!

Lesson 4の総括

  • 1000行目に飛ぶには?
  • ファイル末尾に飛ぶには?なら先頭は?
  • 前方検索は?後方検索は?(これは直接書いていません。画像にヒントが。)
  • 置換したきゃ?

萎えてきましたか?Vimをマスターしようとしてはダメですよ。

vimはあくまでも手段です。vimを使って何がしたいのかそれをまず考えましょう。

私ならそうですね。vimだけで迷路を書きます😃

Lesson 5 (私はあまり使いません)

Lesson 5.1 外部コマンド実行方法

vimをしている最中にlsとかcatを打ちたい時ってありますよね。(私はないです)

そんな時は :!としてからOSのコマンドです。

:!lsとすれば lsの結果が出ますし、:!ls -lとしたらls -lの結果がでます。

5.1の総括

vim中にOSコマンドするなら:!してから入力すること

Lesson 5.2 外部コマンドその2

vimをしている最中に、今編集しているそのファイルをある名前で保存したいとき

:w testとすれば、testというファイル名で保存されます。

削除したい場合は :!rm testです。(私は使ったことありません。)

5.2の総括

(再掲)vim中にOSコマンドするなら:!してから入力すること

Lesson 5.3 ビジュアルモード

通報モードにおいてvを押すとビジュアルモードになります。

ここでは、範囲選択したテキストをそのまま別ファイルに保存する術を学びます。

  • vをおしてカーソルを動かし、選択したら:と入力
  • すると:'<.'>と画面下側に表示されるので続けてw ファイル名と入力

そうするとLesson 5.2のようにファイルが保存されます。

ただし、ビジュアルモードでよく使うのは記述の通りdyの時ですね。

5.3の総括

ビジュアルモードは範囲選択ができる

ビジュアルモードでよく使うのはd削除やyコピーの時。

Lesson 5.4 外部ファイルの内容を導入する

Lesson 5.3で test というファイル名で保存したと思います。

そのtestの中身をそのまま今のvimに挿入したい時、:r testとすれば

カーソルが当たっている下の行に挿入されます。

また挿入できるのはファイルだけではなくて、外部コマンドlsも可能です。

使い方は書いてある通り、:r !lsです。するとlsの結果がそのまま挿入されます。

5.4の総括

:rで外部ファイルや外部コマンドの結果をそのまま挿入できる

Lesson 5の総括

  • 外部コマンドを実行するには?
  • 編集中のファイルをある名前testで保存するには?
  • vimから抜けないで、lsの結果をそのまま挿入するには?

少し難しくなってきましたね。 私も知らないことが多かったです。

これ便利だな、これは意味ないかもと自分の中で使い分けをしていってくださいね。

何度も言いますが、全部を使いこなす必要はないです。

Lesson 6

Lesson 6.1 1行上or下に挿入する(よく使います。)

カーソルの1行下に空1行挿入してから挿入モードにするには o

カーソルの1行上に空1行挿入してから挿入モードにするにはO

どちらもよく使います。

6.1の総括

oOはよく使います。1行開けて挿入します。

Lesson 6.2 挿入するa と A

以前、挿入するときはiやらoやらOやら学んだかと思いますが、まだあります。

aはカーソルの右隣から追記できる挿入モードに、

Aは行末から追記できる挿入モードになることができます。

6.2の総括

挿入モードへは色々なキーから入ることができます。

Lesson 6.3 r の上位互換(ではないかもしれない)

こちらも以前学んだ置き換えのrに近いものです。

rは一文字しか置き換えることができませんでしたが、

Rにすればリプレイスモードになり、現在のテキストを次々と置き換えることが可能です。

リプレイスモードインサートモードに似た物だそうです。

6.3の総括

なんでも置き換えるモード、Rで入れます。

Lesson 6.4 コピペ

新しく出てきましたyはコピー担当です。

yyとすれば1行丸々、ywとすれば単語をコピーできます。

コピーしたものはpで貼り付け可能です。

6.4の総括

コピーするならyですね。

Lesson 6.5 オプションを設定

ここでは検索時に役立つオプションを紹介します。

  • 大文字小文字を区別しないで検索するためには 検索時に:set ic
  • 大文字小文字を区別して検索するためには検索時に:set noic
  • 検索してヒットした箇所を目立たせるためには:set hlsor:set hlsearch
  • 検索時入力中の文字で検索をかけ、それを目立たせるようにするには:set isor:set incseach

感動したのはincsearchですね。(インクリメンタルサーチというそうです。)

6.5の総括

検索時には色々オプションがあります。

便利なものが色々あるので調べてみてください。

Lesson 6の総括

  • oOの違いは?
  • aAの違いは?
  • コピーするには?
  • リプレイスモードになるためには?

お疲れ様でした。ここまで来れば怖いものなしです。

たくさん触って、使いこなしてやりましょう。

おまけ

ここに載っていなかったもの

私が知っているものでvimtutorには載っていなかったものがあったのでご紹介します。

vim外からコピーしたテキストの貼り付け方法です。

なんてことはありません。

Ctrl + Ccommand + Cをしてから挿入モードcommand +vです。

私はよく使ってます。(※Ctrl Cがダメなら alt c とかですね。)

終わりに

いかがだったでしょうか。

かなりロングコースだったと思います。

何度も言いますが、使わないと覚えません

あと、これマスターしたら少なくとも実務は余裕だと思います。

私も全くの未経験から vimを触り始めました。

きっかけはなんでもいいです。とにかく触りまくってください。

ただvimを完璧にマスターしてやる!!と意気込むと、ゴールが見えないので

お勧めしません。多分挫折します。

なのでとりあえずのゴールがあるものを目標にして勉強した方がいいです。

udemyのvimマスターのような講座などをお勧めします。

頑張ってください。応援してます。

(ちなみにこれはvimで書きました。プレビューが見えないのでとてもストレスでした。

画像、目次は流石にここにコピーして差し込みました...)