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

Vimの1文字コマンドをまとめてみる (アルファベット編)

$
0
0

概要

このページは、Vimの1文字で操作内容が決まるコマンドをフォーカスしてまとめたページです。

よくあるコマンドの紹介方法として「カーソル操作・編集操作」のようなカテゴリ別があります。基本的な操作の習得に対して優れている一方で、基本的ではないちょっと便利なコマンドなどは紹介されにくいです。
また、その次のステップとして 公式help が紹介されることもあるが、分量が非常に多いため読み切るのは辛いです。

この2つのステップのギャップを少しでも埋めるため、1文字コマンドにフォーカスしたページがあったら便利かなと思い作成しました。
1文字コマンドを選んだ理由は、おそらく重要なコマンドほど少ないタイプ数で打てるように割り当てられているだろうという予測から。

1文字コマンドの定義

1文字目で操作内容が決定するようなコマンドを1文字コマンドとする。
具体的には、次のどちらかの条件を満たすコマンドのことを指す。

  • 1文字で完結するコマンド (a, A, CTRL-A, $, 0, など)
  • 公式helpに 1文字+{***} で載っているコマンド (c{motion}, f{char}, m{A-Za-z}など)

このページでは、ノーマルモードでアルファベットから始まる1文字コマンドをまとめる。
(今後、ctrl, 記号を増やしたい)

予備知識

  • {motion}: カーソル移動系のコマンドを表す。具体的には、表内で太字で示されているコマンド (hjkl...) などを表す
  • {char}: 任意の1文字を表す
  • word単位: vimにおける"word"。空白に加えて、数字やアンダースコア (_)も単語の区切りとする。詳細は:help word参照
  • WORD単位: vimにおける"WORD"。空白のみを単語の区切りとする単位。詳細は:help word参照

ノーマルモード:アルファベット小文字編

太字で示したコマンドは {motion} に対応するコマンドである。
説明に [buffer] のあるコマンドは、コマンドの前にxのようにregisterを指定することができる。

コマンド説明
aカーソルの後ろにテキストを追加
bword単位でカーソルを前へ移動。カーソル位置は先頭文字に合わせる
c{motion}{motion}で指定したテキストを削除した後、挿入モード [buffer]
d{motion}{motion}で指定したテキストを削除 [buffer]
eword単位でカーソルを後ろへ移動。カーソル位置は末尾文字に合わせる
f{char}カーソル位置から右方向にある次の{char}へカーソルを移動
hカーソルを左へ移動
iカーソルの前にテキストを追加
jカーソルを下へ移動
kカーソルを上へ移動
lカーソルを右へ移動
m{A-Za-z}カーソル位置を記録
n最後に行った検索 (/ or ?コマンド)を再実行
oカレント行の下に新しい行を挿入し、テキストを追加
pカーソルの後ろにregister内のテキストを貼り付ける[buffer]
q{0-9a-zA-Z"}文字の入力をregisterに記録 (記録中の場合は、記録を停止)
r{char}カーソル下の文字を{char}に置換。{char}には<CR>も指定可能
sカーソル下の文字を削除し、挿入モード。clで代用可能 [buffer]
t{char}カーソル位置から右方向にある次の{char}の1文字前へカーソルを移動
uアンドゥ
vVisualモード
wword単位でカーソルを後ろへ移動。カーソル位置は先頭文字に合わせる
xカーソル下の文字を削除 [buffer]
y{motion}{motion}で指定したテキストをヤンク [buffer]

※ 1文字コマンドが存在しないアルファベット
g: extended commandに続く
z: z commandに続く

ノーマルモード:アルファベット大文字編

太字で示したコマンドは {motion} に対応するコマンドである。
説明に [buffer] のあるコマンドは、コマンドの前に"xのようにregisterを指定することができる。

コマンド説明
Aカレント行の文末にテキストを追加
BWORD単位でカーソルを前へ移動。カーソル位置は先頭文字に合わせる
Cカーソル下から文末までを削除した後、Insertモード。c$で代用可能 [buffer]
Dカーソル下から文末までを削除。d$で代用可能 [buffer]
EWORD単位でカーソルを後ろへ移動。カーソル位置は末尾文字に合わせる
F{char}カーソル位置から左方向にある次の{char}へカーソルを移動
Gカーソルをファイルの最終行の文頭へ移動
Hカーソルをスクリーンの先頭行の文頭へ移動
Iカレント行の文頭にテキストを追加
Jカレント行とその次の行を連結。なお、連結される行に含まれるインデントは削除される
Kカーソル下の単語を調べるためにプログラムを実行。デフォルトでは :!man キーワードと同一
Lカーソルをスクリーンの最終行の文頭へ移動
Mカーソルをスクリーンの中央行の文頭へ移動
N最後に行った検索 (/ or ?コマンド)を前回と反対方向に再実行
Oカレント行の上に新しい行を挿入し、テキストを追加
Pカーソルの前にregister内のテキストを貼り付ける[buffer]
QExモードに切り替える
RReplaceモードに切り替える
Sカレント行のテキストを全て削除し、Insertモード。ccで代用可能 [buffer]
T{char}カーソル位置から左方向にある次の{char}の1文字後ろへカーソルを移動
Uカレント行における最新の変更を全てアンドゥ
Vlinewise Visualモード
WWORD単位でカーソルを後ろへ移動。カーソル位置は先頭文字に合わせる
Xカーソル下の1文字前を削除 [buffer]
Yカレント行のテキストをヤンク。yyで代用可能 [buffer]

※ 1文字コマンドが存在しないアルファベット
Z: 単体ではなし (2文字ではZZ, ZQ)

動作がわかりにくい 数字+小文字1文字コマンド

上記コマンドは M, Q を除いて、コマンドの前に数字を加えて実行できる。
基本的にコマンドの前に付与される数字は、繰り返し回数や行数の指定となる。
その一方、動作がわかりにくいコマンドもあるので、ここではそのコマンドをまとめる。
なお「わかりにくい」の基準は、筆者の主観で判断した。

a: カーソルの後ろにテキストを追加

カーソル下の文字:!
コマンド:3ahello<ESC>

!hellohellohello

i: カーソルの前に文字を追加

カーソル下の文字:!
コマンド:3ihello<ESC>

hellohellohello!

A: カレント行の文末にテキストを追加

カレント行:hello
コマンド:3A!?<ESC>

hello!?!?!?

I: カレント行の文頭にテキストを追加

カレント行:hello
コマンド:3I><ESC>

>>>hello

o: カレント行の下に新しい行を挿入し、テキストを追加

カレント行:---
コマンド:3ohello<ESC>

---
hello
hello
hello

O: カレント行の上に新しい行を挿入し、テキストを追加

カレント行:---
コマンド:3Ohello<ESC>

hello
hello
hello
---

C: カーソル下から文末までを削除した後、Insertモード

カーソル下の文字:
The quick brown
fox jumps
over the lazy dog
b
コマンド:2C

The quick
over the lazy dog

D: カーソル下から文末までを削除

コマンドCと同様

G: カーソルをファイルの最終行の文頭へ移動

コマンド:3G→ ファイルの 先頭行から3行目 の文頭へ移動。3ggと同一

H: カーソルをスクリーンの先頭行の文頭へ移動

コマンド:5H→ スクリーンの 先頭行から5行下 へ移動

L: カーソルをスクリーンの最終行の文頭へ移動

コマンド:5L→ スクリーンの 最終行から5行上 へ移動

r{char}: カーソル下の文字を{char}に置換。{char}にはも指定可能

カーソル下の文字:helloh
コマンド:3rx

xxxlo

カーソル下の文字:helloe
コマンド:3r<Enter>

h
o

R: Replaceモードに切り替える

カーソル下の文字:abcdefghb
コマンド:3Rxx<ESC>

axxxxxxh

最後に

より正確な情報は :help コマンド or :h コマンド で確認してください。
間違い・誤解しやすい表現がある場合は、ご指摘していただけると幸いです。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



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