LoginSignup
19
29

【Vim】実践Vimの実践 【第2章 ノーマルモード】

Last updated at Posted at 2023-05-22

Introduction

実践Vimをまとめるシリーズの第 2 章です。
前回はこちらでドットコマンドについて解説しています。

本記事のみで学べるよう努めますが、より詳しくかつ体系的に学びたい方は
実践Vimを読みながら進めることをおすすめします。

2023 年 5 月 21 日現在、Kindle Unlimited対象商品です。

実践Vimのサンプルコードです。
記事更新に合わせて章ごとにディレクトリを分割し、参照しやすいようにします。
※公式のサンプルはリンク切れしています。

実際に操作することで、コマンドを効率よく定着させましょう。

本記事が少しでも読者様の学びに繋がれば幸いです!
「いいね」をしていただけると今後の励みになるので、是非お願いします!

環境

Ubuntu22.04
Vim9.0

第 2 章 ノーマルモード

TIP7: 埃を払って一息つこう

Vim を使ったことがない人には、ノーマルモードがデフォルトのモードというのは奇妙に思える。
でも、熟練の Vim ユーザーにはそれ以外の方法があるなんて想像もつかないことだ。
(実践 Vim「TIP7」より)

  • Vimではノーマルモードがデフォルトのモード。
  • 他のテキストエディタでは、挿入モードに似た状態で大半の操作。
  • ノーマルモードには、自由に使えるツールがたくさん揃っている。
    • コードの整形、コピー、移動、削除、何かの変更等。

TIP8: アンドゥはひとまとめに

Vim ではアンドゥコマンドの粒度を自分で制御できる。
(実践 Vim「TIP8」より)

  • uキーでアンドゥコマンドを実行し、直前の変更を取り消し。
  • アンドゥコマンドの粒度を制御できる。
    • 挿入モードからノーマルモードに戻るまでの間が、単一で直前の変更とみなされる。
    • <Esc>キーを適切に使い、単語、センテンス、パラグラフにアンドゥを適用。
  • <Ctrl> + rでアンドゥを取り消し。

TIP9: 変更を繰り返し可能なものにする

Vim は繰り返し処理に最適化されている。
このことを活用するには、1 つ1つの変更をどのように積み上げていくかを常に意識する必要がある。
(実践 Vim「TIP9」より)

  • Vimは繰り返し処理に最適化されている。
  • 処理が最適かは効率性で判断する。
    • キーストロークが最も少ない方法(Vim Golf)。

後方削除

  • カーソルが行末にある状態($で行末に移動)から、単語を後方削除する。
    chapter_code/2_normal/the_end.txt
    The end is nigh
    
    • dbでカーソルの直前から単語の先頭まで削除。
    • xで残った単語「h」を削除。
    • Vim Golf = 3
    chapter_code/2_normal/the_end.txt
    The end is
    

前方削除

  • カーソルが行末にある状態($で行末に移動)から、単語を前方削除する。
    • bでカーソルを単語の先頭に移動。
    • dwで単語を削除。
    • Vim Golf = 3

単語全体削除

  • カーソルが行末にある状態($で行末に移動)から、単語を全体削除する。
    • daw(delete a word)で単語を削除。
    • Vim Golf = 3

繰り返し性が一番高いのはどれ?

  • dbx(後方削除), bdw(前方削除), daw(全体削除)どれもVim Golf = 3

  • ドットコマンド(.)で繰り返すことを考える。

    • dbx: xの 1 文字削除を実行。
    • bdw: dwのカーソルから次の単語の直前まで削除を実行。
    • daw: dawの単語と空白削除を実行。
  • dawが最も役に立つ処理を繰り返す。

TIP10: 回数指定を使って簡単な計算を行う

ノーマルモードの大半のコマンドは回数を指定して実行できる。
この機能を使うと、ちょっとした計算を行える。
(実践 Vim「TIP10」より)

  • 回数 + コマンドで、指定した回数コマンドを実行する。

  • cssの 2 行目をコピーして、「.blog」を「.news」、「0px」を「-180px」に変更。

    chapter_code/2_normal/sprite.css
    .blog, .news { background-image: url(/sprite.png); }
    .blog { background-position: 0px 0px }
    
    • 2 行目でyypで行コピー。
    • cWで「.blog」を「.news」に変更。
    • 180<Ctrl + x>で行の最初の数字から、-180する。
    chapter_code/2_normal/sprite.css
    .blog, .news { background-image: url(/sprite.png); }
    .blog { background-position: 0px 0px }
    .news { background-position: -180px 0px }
    

TIP11: 繰り返しで済むなら、回数を指定しない

回数を指定すると、何かの作業を行うのに必要なキーストロークの数を最小限のものにできる。
だからといって、そうすべきだということではない。
(実践 Vim「TIP11」より)

回数が重要なときには、回数を使おう

  • 「I have a couple of questions.」を「I have some more questions.」に変更。
    • 2waにカーソル移動。
    • c3wで「a couple of」を削除して挿入モードに入る。
    • some more を入力。
I have some more questions.
  • 以下のような場合はドットコマンドが意味をなさない可能性を考える。
    • 単語の処理量が多い。
    • 処理後に挿入モードに入る。
    • 回数指定のほうがアンドゥ履歴が美しくなる。

TIP12: 統合して統治せよ

Vim がなぜ強力なのか、その大半は、オペレータとモーションを組み合わせられるという点に由来している。
(実践 Vim「TIP12」より)

オペレータ + モーション + アクション

  • d{motion}コマンドは、単一文字d1、単語全体daw、パラグラフdapにも適用可。
  • c{motion}, y{motion}等にも当てはまる。
    • これらのコマンドをオペレータと総称する。

最後に

Vimに慣れるまでノーマルモードは不便に感じると思います。
しかし第 1~2 章で紹介したコマンドを使いこなすには、ノーマルモードの理解が重要です。
イメージとしては、日々のコーディングが挿入モードです。
コーディングのための準備がノーマルモードです。

また、第 1 章で紹介したドットコマンド(.)は強力なコマンドを手軽に繰り返せますが、常に最適解とは言い切れません。
例えば前方 5 単語を削除したい場合はdw....で実現は可能です。
しかし数を数えるより5wdとしてしまった方がVimを強力に用いることができます。

また、本記事で紹介したコマンドを実際に試してみることを強くおすすめします。

最後まで閲覧頂きありがとうございました。
本記事がお役に立てば幸いです!

次回挿入モード

参考書籍

参考 URL

19
29
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
29