Vim User Manual読む usr_04

自分なりにまとめとかが入ったり。

usr_04

wind up

In fact, the "d" command may be followed by any motion command, and it deletes from the current location to the place where the cursor winds up.

"wind up"を「到達する」ぐらいにとらないと意味が分からない。"wind up"に「最後に~になる」というのがあり、

You may wind up losing your house.
家を失う羽目になるかもしれない。

というのがあるので、"the cursor winds up at the place"をwhereやらなんやらで書いた感じなのかもしれない。

inclusiveとexclusive

"w"では、カーソルは次の単語の先頭まで移動するが、"dw"とするとカーソルの移動先の一文字前までしか消えない。一方、"e"では、カーソルは次の単語の末尾まで移動するが、"de"とするとカーソルの移動先まで消える。このように、カーソルの移動先まで操作の影響が及ぶかどうかに関する移動コマンドの性質をexclusiveやinclusiveと呼ぶ。カーソルの移動先まで操作の影響が及ぶとき、その移動コマンドはinclusiveであるといい、カーソルの移動先までは操作の影響が及ばないとき、その移動コマンドはexclusiveであるという。"w"コマンドはexclusiveで、"e"コマンドはinclusive。"$"コマンドはinclusiveである。

操作コマンド(operator command)

テキストに対して、削除や変更などの操作を行うコマンド。"d"とか。

移動コマンド(motion command)

テキスト上でカーソルを移動するコマンド。上述のとおり、inclusiveとexclusiveとがある。"w"とか"e"とか"$"とか。

"操作コマンド-移動コマンド"のパターン

まず最初に操作コマンドを入力し、次に移動コマンドを入力する。このようにして、カーソルが動いたテキスト全体に対して操作が出来る。例えば、操作コマンドとして"d"、移動コマンドとして"4w"を選んで、"d4w"と入力すれば、4単語削除となる。

c

変更コマンド。対象を削除した後、インサートモードに入る。

ただ、"cw"の挙動にだけはVi由来の例外がある。

To err is human

で、"e"にカーソルを合わせた状態で"c2w"を実行すると、"To"の後と"human"の前の2箇所に空白が残る。一方、"2dw"を実行すると、"To"と"human"の間に1つだけ空白が残る。結局、"cw"は"ce"として振舞うことになる。

ことわざ

There is a saying that for every problem there is an answer that is simple, clear, and wrong."

Henry Louis Manckenという批評家の言葉らしい。どちらが先かは知らないが、調べたらこういうのもあった。(http://www2.wbs.ne.jp/~hhayashi/page338.html)

For every problem, there exists a simple and elegant solution which is absolutely wrong. - J. Wagoner, U.C.B. Mathematics

こちらの方が若干分かりやすい気がする。

cc

一行変更。インデントは残される。

ショートカット

x

"dl"と同じ。"l"はexclusive。

X

カーソルの左の文字を削除。"dh"と同じ。"h"はexclusive。カーソルの走る範囲は2文字だが、exclusiveの仕様として、移動方向にかかわらず走った範囲の右側(後方)が操作コマンドの対象から外れるらしい。(実験による。)

D

"d$"と同じ

C

"c$"と同じ

s

一文字変更。"cl"と同じ。(Substitute)

S

一行変更。"cc"と同じ。

difference without a distinction

The commands "3dw" and "d3w" delete three words. If you want to get really picky about things, the first command, "3dw", deletes one word three times; the command "d3w" deletes three words once. This is a difference without a distinction.

"distinction"は本質的な違いを表して、"difference"は表面上の違いを表すのか。

r

1文字変更のコマンド。(Replace)"r"を押した後1文字入力すると、カーソル下の文字が置き換わる。カウンタをつけるとその文字がカウンタの個数分現れる。改行コードで置き換えることも可能。このときカウンタを使うと、カウンタ分文字を消去して、1つの改行ができる。

.

最後の変更を繰り返す。アンドゥ、リドゥ、:コマンドは繰り返せない。

ビジュアルモード

vコマンドで、今のカーソル位置をスタート地点としてビジュアルモードに入る。その状態でカーソルを動かすと範囲がハイライトされる。そこで、操作コマンドを叩くとハイライトされた範囲に操作がなされる。ビジュアルモードに入ったけど特にすることがなかった場合はEscでノーマルモードに帰れる。

行ビジュアルモード

Vコマンドで行全体を選択するビジュアルモードに入れる。上下でたくさんの行を選択できる。

矩形ビジュアルモード

CTRL-Vで矩形ビジュアルモードに入れる。矩形に選択できる。表相手とか便利。

ビジュアルモードの反対側

ビジュアルモードに入ったはいいが、よく考えたらスタート地点が間違っていたというときに、"o"コマンドで、ビジュアルモードのスタート地点をカーソルで動かせるようになり、今カーソルのあるところが新たにスタート地点になる。

p

貼り付け。(Put)"d"や"x"で削除したテキストは保存されており、"p"で貼り付けることが出来る。貼り付け位置は、削除したのが行全体であればそのカーソルの下の行。そうでなければカーソルの直後。カウントがつく。

P

貼り付け。貼り付け位置は、削除したのが行全体であればそのカーソルの上の行。そうでなければカーソルの直前。カウントがつく。

xp

切り取って貼り付けの組み合わせ。つまり、2文字の入れ替え。

y

削除した後アンドゥするのと同じ。つまり、コピー。(Yank:ぐいっと引く)対象のテキストをレジスタにコピーする。あとは"p"で貼り付けられる。

yy

1行全体をヤンク。

Y

"yy"と同じ。"D"が"d$"と同じであることを考えると一貫性がない。

"*y

クリップボードにコピー。"y"の前に""*"(ダブルクオートスター)をつければいい。

"*p

クリップボードからペースト。"p"の前に""*"をつければいい。

テキストオブジェクト

操作コマンドの後につけて使える、対象を指定するコマンド。

aw

単語をあらわすテキストオブジェクト。(A Word)"daw"で、カーソルがその単語中の何処にあろうがその単語を削除できる。

is

文全体をあらわすテキストオブジェクト。(Inner Sentence)文の後の空白を含まない。** as
文全体をあらわすテキストオブジェクト。(A Sentence)文の後の空白を含む。

text-objects

helpの"text-objects"にテキストオブジェクトのリストがあるらしい。

リプレースモード

Rでリプレースモードに入れる。Escで脱出。入力すると、文章を上書きしていく。行の長さが足りなければ自動的に延長される。Insertキーでインサートモードと切り替えられる。Backspaceで訂正しようとすると、もとの文章が復元される。

~

大文字小文字を入れ替える。操作コマンドではないので、一括して実行したければビジュアルモードからやる必要がある。

I

カーソルのある行の最初の非空白文字までカーソルを移動してインサートモードに入る。

A

カーソルのある行の末尾までカーソルを移動してインサートモードに入る。