Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

Vimモード入門

$
0
0

モード入門

こんにちわ。
ゴリラ.vimを運営しているゴリラです。

vimを初めて半年過ぎましたが、未だにvimのそこがみえていないのでvimは沼ではなくブラックホールであることに気づきました。
道のりは遠いですが、楽しみながら旅していこうと思います。

さて、vimを初めて触る方は最初にモードがあることに戸惑う方が多くいるかと思います。
本記事は次のことについて触れていきます。

  • モードによる恩恵はなにか
  • モード一覧
  • モードごとにできること

この記事を読み終わる頃にはきっとvimはなぜモードがあるのかを理解できると思います。
理解できなかったら、ぼくが面と向かって3時間語りますのでご連絡ください。

モードによる恩恵はなにか

テキストエディタはモードレスが一般的かと思います。
ではvimはなぜモードがあるのでしょうか?

それは「操作性・機能性」の幅が広がるからとぼくは考えています。

windowsのメモ帳ではA~Z0~9/@といった記号や文字はそのまま入力でき、Ctrl+Cで文字列コピー、Ctrl+Sでファイル保存を行います。

対してvimでは入力モードで文字列の入力、ノーマルモードではh,j,k,lでカーソル移動、yで文字列ヤンク1dwで単語の削除を行います。

モードがあることより、入力モードではyは文字列として入力されるが、ノーマルモードでは文字列ヤンクになるというように、同じキーが全く異なる動きをします。

そう、これがモードがもたらす恩恵です。

モード一覧

vimでは以下のモードがあり、それぞれのモードでできることは大まか次の表になります。

モード機能
ノーマルモードカーソル移動、ヤンク、プット2、削除、など
入力モード文字入力、プットなど
ビジュアルモード範囲選択、選択範囲のヤンク、削除など
コマンドラインモード変更の保存、vim終了、文字列置換など

他にオペレーター待機モード、端末ジョブモード、選択モードがありますが、
こちらに関しては別の機会にご紹介します。

モードの切り替え方

vimでは基本的にモードを切り替えながら編集します。
次がモードの移行方法です。

現在のモード移行先モードキー
ノーマル入力iIaAsS
ノーマルコマンドラインモード:
ノーマルビジュアルモードvVctr-v
入力ノーマルescctrl-c
コマンドラインモードノーマルescctrl-c
ビジュアルモードノーマルescctrl-c

モード移行キーがいくつかありますが、違いについてはノーマルモードで説明します。

モードごとにできること

それぞれのモードでできることを一部ピックアップしてご紹介します。

ノーマルモード

コマンド操作
hカーソルを左に移動
jカーソルを下に移動
kカーソルを上に移動
lカーソルを右に移動
Y行ヤンク
Y行ヤンク
dd行削除
D行削除
pカーソルの前にプット
Pカーソルの後にプット
c削除して入力モードに移行
C現在のカーソルから後ろをすべて削除して入力モードに移行
w次の単語の先頭に移動
W空白と改行で区切られた次の単語の先頭に移動
e単語の末尾に移動
E空白と改行で区切られた単語の最後尾に移動
b前の単語移動
B空白と改行で区切られた単語の前に移動
ZZ保存してvimを終了する

モード移行のコマンドは次になります。

コマンド操作
sカーソル上の文字削除して入力モードに移行
S行を削除して入力モードに移行
i入力モードに移行
Iカーソルを行先頭に移動して入力モードに移行
aカーソルの後ろに移動して入力モードに移行
Aカーソルを行末尾に移動して入力モードに移行
v文字単位ビジュアルモードに移行
V行単位ビジュアルモードに移行
Ctrl-v矩形ビジュアルモードに移行

ノーマルモードでは表通りの操作が可能ですが、その中でydcはオペレーターコマンド、hjklwWbBはモーションコマンドと呼ばれています。

モーションコマンドは範囲を指すため、オペレーターコマンドの後にモーションコマンドを続けて入力することでオペレーターの操作がその範囲に適用されます。

つまり、dwで単語を削除、cwで単語を削除して入力モードに移行る事ができます。

範囲を示すコマンドはモーション以外にテキストオブジェクトがあります。
一般的によく使うと思われるテキストオブジェクトは次の表になります。

テキストオブジェクト範囲
iw単語
aw前後の空白を含む単語
is
as後の空白を含む文
ip段落
ap改行を含む段落
ib()の内部
ab()と内部を含む

表以外のテキストオブジェクトはこちらを参照してください。

この通り、vimではテキストオブジェクト・モーション・オペレーターを駆使することでテキストの高速編集を実現しています。
ここから楽しくなるので、初学者の方はまずこれらに慣れることをおすすめします。

入力モード

一部をご紹介します。
他に何ができるか気になる方はVimのインサートモードでできることをぜひ読んでみてください。
gif付きでわかりやすく説明しています。

キー操作
escノーマルモードに移行
Ctrl-cノーマルモードに移行
Ctrl-y上の行のカーソルの位置の文字を挿入
Ctrl-e下の行のカーソルの位置の文字を挿入
Ctrl-t1タブ入力
Ctrl-d1タブ削除
Ctrl-gj下の行に移動
Ctrl-gk上の行に移動
Ctrl-h1文字削除
Ctrl-r{0-9a-z"%#*:=}指定したレジスタ3をプット
Ctrl-xCtrl-n開いているファイルないにある単語補完

ビジュアルモード

キー操作
y選択した範囲をヤンク
d選択した範囲を削除
c選択した範囲を削除して入力モードに移行
=選択した範囲を整形する
>選択した範囲を1タブ右に移動
<選択した範囲を1タグ右に移動
I矩形選択の時、選択範囲のすべての行先頭にテキストを入力
J選択した範囲をすべて連結する
o選択した範囲の先頭または末尾にカーソルを移動

もっと詳しく知りたい方はマニュアルを参照してみてください。

コマンドラインモード

こちらのVimのコマンドラインモードでできることにまとめてありますので、ぜひ読んでみてください。

まとめ

みなさん、なぜvimにはモードがあるのか理解できましたか?

本記事で紹介した内容はほんの一部をでしかなくて、他にもできることがたくさんあります。
ぜひ日本語マニュアルや他の方の記事を読んでみてください。

また、ぼくが運営しているゴリラ.vimではvimではvimmerがたくさん集まっています。
一人ではなかなか知ることができない知見がゴリラ.vimにあります。

では、よいvimライフを〜


  1. コピーすることを指す 

  2. 貼り付けのことを指す 

  3. ヤンクしたデータが保存されている領域のこと 


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>