ここでは,削除と変更操作のコマンドや使用例を書きます
削除は,基本的に文字 d を打ってからカーソル移動コマンドを打つと
カーソル位置から移動コマンドで移動するはずの位置までのテキストが削除される
というものです
たとえば, l (小文字のL)は「一文字分右へ」の移動コマンドですから
と打てば,カーソル位置の文字が削除されるし,
d3h
ならば,カーソルの手前の三文字を削除します
同様に,もっと大幅なカーソル移動コマンドと組み合わせて
ならば,カーソルの行からファイルの最後までを削除するし
d50k
ならば,カーソルの行の上50行を削除します
ただし,「削除」のように基本的なコマンドは, もっとキー操作を簡単にするために
特別なコマンドで特定の領域が削除できる ものが
あります. それらを次で説明します
と打つと,「カーソルのある行全体」を削除します
3dd のように数値をつければ,「カーソル以下三行」を削除できます
と打つと,「カーソル位置から行の末尾まで」を削除します
3D のように数値をつければ「行末までと,その後ろの2行」を削除します
カーソル位置の文字を消すには
x
と打てば「カーソル位置の文字」を削除します
X と大文字で打つと「カーソルの直前の文字」を削除します
それぞれ数値をつけて 3x とか 3X と打てば,
その文字数をまとめて削除できます
x と X は, 使い分けられるようになったほうが絶対に良い です
最初のうちは,多少頭で考えないと使い分けられないかも知れませんが,この習慣が
ついてしまえば,これだけのことでも随分つかってて快適さが違ってくるものです
「変更」というのは,「削除」とほとんど同じ動作 だと思って下さい
変更コマンドを打てば,指定された部分が削除されます
ただし,変更コマンドは,削除と違って,削除後には「挿入モード」にいるのです
つまり,変更コマンドなんて全然覚えなくても「削除してから」 i とか a とかの
挿入コマンドを押すことと同等だというわけです
というわけで,最初のうちは知らなくても全然困らないです. 実際,打つキーの量も,
(多くの場合は)一個節約できるだけです. 私も,しばらくは使わずに過ごしていたし,
それで困ったことはありませんでした. でも,実際に使えるようになると,
「削除してから挿入コマンド」という元の世界には戻れないくらいの快適な感覚があります
ので,早いうちから慣れておくことをお勧めします. さて,ではコマンドの説明をします
変更は,基本的に文字 c を打ってからカーソル移動コマンドを打つと カーソル位置から移動コマンドで移動するはずの位置までのテキストが削除されて 削除後は挿入モードにいる,というものです. たとえば, $ は行末への 移動コマンドですから
c$
と打てば,カーソル位置から行末までが削除され,挿入モードへと
移行します. ですから,そのまま文字を打てば,削除されたテキストを「変更」できます
範囲の指定の方法などは,「削除」の時と全く同じです
c3H
cG
c50k
など…削除の時と同様に,いろいろ試してみて下さい
cc と打つと,「カーソルのある行全体」を変更します
3cc のように数値をつければ,「カーソル以下三行」を変更できます
C (大文字のC)を打つと,「カーソル位置から行の末尾まで」を変更します
3C のように数値をつければ「行末までと,その後ろの2行」を変更します
カーソル位置の文字を変更するには
s
と打てば「カーソル位置の文字を」削除してから挿入モードに移行します
置き換える文字は,挿入を終了させるまでなら何文字でも打てます
5s のように,数値をつけると「カーソル位置から5文字分を削除してから」
挿入モードに移行します
S (大文字のS)を打つと,「カーソルのある行全体」を変更します. つまり cc と同じです
特殊な変更コマンドとしては
r (文字)
というのがあります.「カーソル位置の一文字を指定した文字で置き換える」コマンドです
たとえば"g"という文字を打って rg
とすれば,カーソル位置の文字を削除して,代わりに g という文字で
置き換えます. これは他の変更コマンドとは違って,コマンドを打った後はコマンドモードなので
打ち間違いで一文字だけ修正したい場合にとても良く使えます. ちなみに
などと数値をつけて打つと「カーソル位置からの4文字すべてを文字 w で置き換え」ます
大文字の R コマンドは,これまた特別な置換え方をします
R を打つと, 挿入モードのようになって自由に文字を入力でき, カーソルも
文字を打つごとに進みますが, 今までその位置にあったテキストが入力するにつれて
書き潰されます . つまり,挿入した文字の分だけ置き換わるというわけです
単語単位で削除したり,単語の最後までを修正したいことは多いと思います
そこで役立つのが「単語単位で移動するコマンド」です
まず w や W コマンドで「次の単語の先頭文字に移動」します. この時,
「単語とはどのような基準なのか」を知っていないと, w を押した時にどこに
カーソルが行くのが不安だと思うし,使い勝手が悪いかと思いますので説明します
まず,英語の文章のように,スペースで「単語」が区切られているような文章の場合は
話は簡単です. w コマンドでは スペースの後ろ(つまり単語の先頭文字)や , などの
文字に移動します. 大文字の W は,細かい , などにはいちいちひっかからずに
スペース文字などの 大きい単位だけに反応します . プログラムなどのテキストも空白で
きちんと区切られているので w や W は使いやすいと思います
日本語の文章の場合は,文字がくっついている場合が多いし,JVimが日本語の意味を解釈
するわけでもないので,非常に単純な区切り方でカーソルが移動します. 具体的には
ひらがな,カタカナ,漢字,アルファベットなどの「文字の種類の代わり目」
の次の文字にカーソルが移動します. いろいろな文章で w や W を
試してみて,ある程度感覚をつかめるようになれば良いと思います
逆に,単語単位で戻るには b や B です
また, e や E で,「単語の最後の文字」に移動できます
どれも大文字のコマンドは細かい記号には引っかからずに「大きく」移動します
e や E は「単語の後ろに文字を追加」する時に
ea
などと(まるでひとつのコマンドであるかのように)使うことが多いです
さて,この単語移動コマンドを知っていれば
dwで「カーソル位置の単語の削除」に使えるし
cw
なら変更となりますよね
この dw や cw は使用頻度が高いコマンドとなると思います
括弧や引用符の中身だけを変更したいことは多いと思います
こういう時のためには,それに適した移動コマンドを知っていると便利ですよね
でも % を使って最寄りの"("文字に移動するコマンドや f" のように
「次の引用符に移動」するコマンドを打つと「 その括弧や引用符も 」
削除されてしまいます. 今やりたいのは「 引用符や括弧の直前の文字まで削除 」ですよね
こういう時のために, 指定した文字の「 直前の文字へ 」移動するコマンドというのが
あるのです
t (文字) や T (文字) というコマンドは,
f や F コマンドと同じように行内の文字を前後に探しに行って
見付かると,「その文字の直前や直後の文字」に移動します. というわけで これを使って
とか
cT(
などとすれば,括弧や引用符を消さずに「内容だけを」削除や変更できるのです
なお, t や T コマンドでも f や F と同様に
; や , による繰り返し移動コマンドを使えます
例えば,
d(Return)とか
d+
などと打つと,カーソルが行の真中付近にいても「行全体が」削除されます. つまり
「カーソル位置から移動先まで」が削除されるのではなくて
「カーソルのある行から 移動先の行まで 」が削除されることがあるのです
移動,削除などのコマンドが文字単位で作用するか,行単位で作用するのかは
じつはコマンドによって決っていて,マニュアルに書いてありますが
単語や左右移動コマンドのような細かい移動コマンドはたいてい文字単位
で作用するし,行数や行番号を指定するタイプのコマンドの多くは行指向 です
この違いは,後で説明する書き出し(Put)操作でも実感できます. 行単位で
記憶されたテキストは「 カーソル行の上下 」に書き出されるし
文字単位で記憶されたテキストは「 カーソル位置の文字の前後 」にputされます
この使い分けが自由にできるようになれれば使い勝手はかなり向上します. たとえば
2yyで二行をYankすれば「行指向」ですし
0y2$なら,領域は同じく二行全体ですが,こちらは「文字単位」でのYankなので 行の途中にPutできるわけです. ( putやYankについての解説は, 後ほどします. )
何か数字の書かれている場所にカーソルを持っていってから
CONT-A や CONT-X キーを押してみましょう. その部分の
数値が 1 づつ増減します. 「こんなの便利に使えるのかなぁ??」と思うかも
知れませんが, mapコマンドで各種の自動化を書くようになると 出番も
あると思います. でも確かに間違って押すのが恐いコマンドでもありますね
「絶対に不要」で しかも「間違って押すのが恐いキー」は 無効にしておくと良い と思います. 設定ファイルに
map ^A :^H
map ^X :^H
などと書いておくと安心かも知れませんね. あるいは他の機能に割り当てるとか. …ちなみに
設定の書き方についての
詳しくは別文章で解説します