var - みる会図書館


検索対象: 実践Vim : 思考のスピードで編集しよう!
23件見つかりました。

1. 実践Vim : 思考のスピードで編集しよう!

TlP64 : マクロの記録と実行く : reg a Registers "a A;A[Ivar これは読みやすくはないが、ついさっき記録したコマンドのシーケンスと同じもの だとわかるはずだ。ビックリするとしたら、恒キーを表すのにが使われている ところくらいだろう。これについては、 234 ページの「マクロ内のキーコード」を参照 してほしい。 マクロを実行して、コマンドのシーケンスを再生する 0 を気言コマンドは、指定したレジスタの内容を実行する ( → :h @ ⑩◎ ) も使える。これは、直前に呼び出されたマクロを繰り返すものだ。 以下に例を示そう。 キーストロークバッフアの内容 {start} f00 = b ar foobar = f00 + bar var f00 foobar f00 + bar f00 var ar f00 + bar foobar f00 var bar var foobar = f00 + bar ・ こでは、いま記録したばかりのマクロを実行して、 2 行目と 3 行目で 1 行目と同 じ 2 つの変更を繰り返した。 2 行目ではを使い、 3 行目では朝を使って同じマクロ を実行しているところに注目しよう。 この例では、」朝 ( と次の行では」朝 ) を実行してマクロを再生している。表面的に は、これにはドットの公式と似ているところがある。カーソルを移動するためのキー ストロークが 1 つは ) と、何かを行うためのキーストロークが 2 つ ( ) だ 。悪くな い。でも、まだ改善の余地がある。 マクロを複数回実行するために使えるテクニックにはいくつかある。テクニックこ レジスタ 213

2. 実践Vim : 思考のスピードで編集しよう!

第 5 章コマンドラインモード 要があったとしたらどうだろう。「ドットの公式」だと、を 50 回も叩かなければい けない。合計すれば 100 回のキーストロークだ ! もっとよい方法がある。その例として、このファイルの各行末尾にセミコロンを追 加していこう。誌面節約のため、 5 行だけにするけれども、 50 行あると考えてくれて もよい。そうすると、このやり方がもっともっと可能性を秘めたものに見えてくるだ ろつ。 ex-mode/foobar.js 1 var f00 var bar var baz var foobar = f00 + bar var foobarbaz = f00 + bar + baz 最初は前のやり方と同じ。最初の行を変更する。 キーストロークバッフアの内容 var bar var baz var f00 var bar var baz var f00 var bar var baz {start} ・く Esc> ar f00 var foobar = f00 + bar foobarbaz = f00 + bar + baz var foobar = f00 + bar var foobarbaz = f00 + bar + baz 1 var 1 行ずつ : コマンドを実行するのは避けたい。そんなことをしなくても、 :norma1Ex コマンドを使えば、選択した行範囲に対してドットコマンドを実行できる。 キーストローク ・ ' く , ) >normal 94 バッフアの内容 var foobarbaz = f00 + bar + baz var foobar = f00 + bar; ar foobarbaz = f00 + bar + baz foobar = f00 + bar baz = ' Z ' ar bar f00 V ar

3. 実践Vim : 思考のスピードで編集しよう!

TlP2 : DRY (Don't Repeat YourseIf) く だろう。しかし、それでは能がない。 ドットコマンドは直前の変更を繰り返すのだか ら、まったく同じキー操作をするのではなく、龜 : と 2 回やればよいのではないだろう か。ドット 0 ) 1 つで 3 つのキーストロークは; く Esc>) の代わりになる。ほんの少 しの節約だが、これを繰り返すことで、効率が高まっていく。 しかし、というやり方をもっとよく見てみよう。」コマンドでカーソルを 1 行下 に移動する。そのあとに、コマンドでカーソルを行末に移動する。ドットコマンドを 使えるようにカーソルを移動させるためにキー操作を 2 回行っている。 ーこに改善の 余地がある、わかるかな。 余計なカーソル移動をなくす ミコマンドはカーソルの現在位置の後ろに追加を行う。対して、一コマンドは現在の 行の末尾に追加を行う。このとき、カーソルがどこにあるかは関係ない。ーを押せば、 挿入モードになり、カーソルは行末に移動する。つまり、を一度のキーストローク にまとめられる。「 1 つのお値段で 2 つ ! 」 ( 30 ページ ) では、 Vim にはこのような複 合コマンドがいくつも用意されているのを紹介しよう。 上のサンプルをもう少しカッコよくしたものが以下だ。 キーストロークバッフアの内容 ar f00 var bar var foobar = f00 + bar var f00 var bar var foobar = f00 + bar f00 = var bar var foobar = f00 + bar f00 = var foobar f00 + bar var f00 var bar var foobar f00 + じゃなく一を使うことで、ドットコマンドの威力も増した。行末を変更したいの で、さっきはそこにカーソルを移動する必要があったが、今度はその必要はない。そ 29 1

4. 実践Vim : 思考のスピードで編集しよう!

TlP26 : 矩形状ではないビジュアルな選択範囲にテキストを追加く 表 4 ー 5 プロック指向のビジュアルモードで複数行にセミコロンを追加 var f00 var bar var f00 var bar var f00 var bar var f00 var bar キーストローク {start} ノーマルモード C-v> ビジュアルプロック ノーマルモード く Esc> 挿入モード バッフアの内容 var foobar foobar var foobar var var foobar = f00 = f00 + bar f00 + bar f00 + bar; ら、を押して、各行の末尾までを選択範 プロック指向のビジュアルモードに入った 囲としよう。各行の長さが違っているので、パッと見には、これは難しくなるぞと思 79 方を踏襲している。工コマンドと A コマンドはどちらも、カーソルを選択範囲の先 Vim では、ビジュアルプロックモードから挿入モードへの切り替えでもこのやり 在行の先頭①か末尾 (A) になる。 (a) になる。工コマンドと A コマンドも同様だ。ただし、これらではカーソルは現 への切り替えを行い、このとき、カーソルの位置は現在の文字の前 (i) か後ろ いくつかある。えコマンドと a コマンドはどちらもノーマルモードから挿入モード Vim には、ノーマルモードから挿入モードへ切り替えるための伝統的なやり方が Vim における「 i 」キーと「 a 」キーの役割 範囲のその他の行にも反映される。 字がその行にだけ表示される。ただし、ノーマルモードに抜ければ、その変更が選択 一番上の行で挿入モードに入るので、挿入モードの間は、そこで入力したすべての文 「 Vim における「 i 」キーと「 a 」キーの役割』を参照 ) 。コマンドにより、選択範囲の テキスト範囲を選択したら、コマンドで各行の末尾に追加ができる ( 以下のコラム ちまちのテキスト範囲を選択できるようになる。 わかってくれる。これにより、矩形領域という制限から解き放たれて、末尾位置がま うかもしれない。でもこの場合は、各行の末尾までを選択範囲にしたいんだと Vim が

5. 実践Vim : 思考のスピードで編集しよう!

第 11 章マクロ T 旧 64 : マクロの記録と実行 マクロを使うと、変更のシーケンスを記録して、それを再生できる。ここで するには、マクロを記録して、それを実行するという方法がある。 繰り返し行われる作業では、多くの場合、複数の変更が行われる。これらを自動化 は、その方法を紹介しよう。 キーストロークバッフアの内容 実際にやってみよう。 マンドがキャプチャされる。 たということだ。ロ 記録を終了するためにもう一度 4 を押すまでは、実行するすべてのコ る。ステータス行に「 recording 」 ( 「記録中」 ) と表示されたら、これが正しく行われ クの記録を始めるには、気言としてマクロを保存する先のレジスタを指定す 日キーは「 Record 」ボタンとしても「 St 叩」ボタンとしても機能する。キーストロー マクロを記録して、コマンドのシーケンスをキャプチャする foobar = f00 + bar bar 1 ・く Esc> var,_, く ESC> f00 = bar foobar var f00 bar foobar var f00 bar foobar 1 f00 + bar f00 十 bar f00 + bar 靍により、マクロの記録が始まり、レジスタ a にこれが保存される。そして、最初の 行で変更を 2 つ行っている。末尾へのセミコロン ( ; ) の追加と、先頭への var の挿入 だ。これらの変更が終わったら、日を押してマクロの記録を終了する ( → :h q ◎◎ ) 。 レジスタ a の内容を調べるには、以下を実行すればよい。 212

6. 実践Vim : 思考のスピードで編集しよう!

第 1 章 Vim のやり方 まコマンド、コマンド、トコマンドはすべてノーマルモードで実行されるが、変更 は挿入モードに入るたびに行われるものでもある。挿入モードに入った瞬間はを押す など ) からノーマルモードに戻る (kEs を押す ) までの間、Ⅵ m はすべてのキース トロークを記録する。このような変更を行ったあとで、ドットコマンドを実行すると このキーストロークが繰り返される ( このときの注意点については 43 ページの「挿入 モードでカーソルキーを使うと、変更がリセットされる」を参照してほしい ) 。 ドットコマンド = マイクロマクロ 第 11 章「マクロ」 ( 211 ページ ) では、 Vim ではキーストロークを好きなだけ記憶し て、あとからその操作を繰り返せるという話をする。この機能を使うと、繰り返し作 業のほとんどを記録して、それをキーを 1 っ押すだけで、再実行できる。ドットコマ ンドはマクロのミニチュア版ーーそっちがよければ「マイクロ」マクローー・と考えら ストプラクティスも紹介する。 れる。 また、 TIP9 ( 44 ページ ) 、 TIP23 ( 72 ページ ) ではドットコマンドを活用するためのべ ドットコマンドの使い方については、本章でもこのあといくつかの例を紹介する。 28 1 作業を終わらせるには、残りの 2 行でもこれとまったく同じキー操作を行えばよい ンドが使える。そして、ミ ; く Esc > で変更できる。 から、挿入モードに切り替えて、変更をする。カーソル移動 ( モーション ) にはコマ 各行の末尾にセミコロンを追加したい。そうするには、カーソルを行末に移動して var foobar = f00 + bar var bar var f00 he vim-way/2-foo bar,js 以下のような JavaScript コードがあるとしよう。 Vim は 2 つの手順を一度で行える専用のコマンドを提供している。 何行にも渡って行末にセミコロンを追加するといったよくある状況について、 引 P2 : DRY (Don't Repeat YourseIf)

7. 実践Vim : 思考のスピードで編集しよう!

第 4 章ビジュアルモード その方法はもうおなじみのはすだ。まずは変更したい部分を選択する。今回は、 れがプロック指向のビジュアルモードの矩形領域となっている。第キーを押すと、選択 したテキストが削除され、挿入モードに切り替わる。 挿入モードで「 components 」と入力すると、一番上の行にだけ、これが表示される。 残りの 2 行には何も表示されない。入力したものがこの 2 行に表示されるのは、 <Es を押してノーマルモードに戻ってからだ。 プロック指向のビジュアルモードで変更コマンドを実行すると、その挙動にちょっ とビックリするかもしれない。削除は範囲指定をしたすべての行に同時に適用される のに、挿入は ( 少なくとも挿入モードの間は ) 一番上の行にしか反映されない。この 挙動には一貫性がないように思える。これと似た機能を提供するエデイタもあるが、 それらのエデイタでは選択された行のすべてで同時に変更が反映される。こうした機 能を使ったことがあるのなら ( 筆者はある ) 、 Vim の実装はちょっと残念に感じるかも しれない。 しかし、現実的には、最終的な結果は変わらない。挿入モードにいるのはほんと ちょっとの時間だけなので、ビックリしたりすることはないはずだ。 T 旧 26 : 矩形状ではないビジュアルな選択範囲に テキストを追加 プロック指向のビジュアルモードは、コードを矩形状 ( 行とか列とか ) に選 択して、そこに操作を加えるときにはすばらしく役に立つ。でも、矩形状の テキスト範囲でないと使えないというわけでもない。 以下の JavaScript コードには以前にもご登場いただいている。 he vim-way/2-foo-barJs var f00 var bar var foobar = f00 + bar 3 行が続いているが、その長さはまちまちだ。各行の末尾にセミコロンを追加した い。 TIP2 ( 28 ページ ) では、ドットコマンドを使ってこの問題に対処した。だが、プ ロック指向のビジュアルモードも使える。この方法を表 4 ー 5 に示す。 1 78

8. 実践Vim : 思考のスピードで編集しよう!

TlP3 : 一歩下がって、 三歩進むく T 旧 3 : 一歩下がって、三歩進む ar f00 var f00 var f00 var f00 var f00 var f00 var f00 うすると、以下のようになる。 りももう少しは目に優しく書けるだろう。 + 記号の前後に空白文字を入れるのだ。そ JavaScript では、文字列の連結を気持ちよく書けることはまずない。でも、これよ var f00 "method(" + argumentl + " , ” + argument2 + "刃 he-vim-way/3-concat. js 以下のようなコード行があるとしよう。 は、仕事をするのに余計な手間がかからなくなるってことだ。 けれど、このやり方には繰り返しが可能というメリットがある。ということ の前後に空白文字を挿入できる。最初は「うーん ? 」と思うかもしれない。 Vim にはイディオム的な操作方法があるのだが、これを使うと、ある 1 文字 var f00 "method ( " + argument 1 + " " 十 argument2 十 " 変更を繰り返し可能とする イディオム的な使い方をすることで、 この問題を解決できる。 キーストローク {start} 十く Esc> バッフアの内容 "method( " + argumentl + ” , ” + argument2 + " "method(" "method ( " "method ( ” "method ( " "method ( " "method ( " + argument2 + ” ) " ・ argument 1 + " " + argument 1 + " , " + argument2 十 " ) " ・ " + argument2 + " + argumentl ー + argument2 十 ") " ・ 十 argumentl 十 " + argument2 十 " ) " ・ 十 argument 1 十” " + argument2 + " ) " 十 argument 1 + コマンドは、カーソル位置の文字を削除して、挿入モードに切り替える、という 2 つの操作を一度に行う。 + 記号が削除されたところで、と入力してから挿入モー

9. 実践Vim : 思考のスピードで編集しよう!

TlP51 : 高精度なテキストオブジェクトを使って選択範囲をトレースく それぞれの { 文字には対応する } 文字がある。 [ と ] 、くと > 、それから HTML タグの開 きタグのく a > と閉じタグのく / a > も同様だ。このサンプルにはシングルクオーテーショ ン記号とダブルクオーテーション記号もあり、これらは対になっている。 Vim はこれらのよく見られるパターンの構造を理解していて、これらの要素で区切 られている範囲を操作できる。テキストオブジェクトは、テキストの範囲を構造で定 義する ( → :h text-objectsOO)0 いくつかのキーストロークだけで、これらを使 用して、テキスト範囲を選択したり操作したりできる。 カーソルが { } の間にあり、 { } 内のテキストをビジュアルに選択したいとしよう。こ れは込を押すこ キーストローク {start} 1 とで行える。 バッフアの内容 var tpl ' く a href="{ l}">{title} く /a>' var tpl ' く a href="{yrE}">{tit1e} く /a>' var tpl ' く a href="{url}l>{title} く /a>' var tpl var tpl ' く a href="{ur1}">O'ÉfeD く /a>' var tpl var tpl = ' く第 ref = " { 1 } " > { .t は tl く / 4 叮 1 ' く - re 土 = 1 } ー > { title } く / a > ' , 虹 e 工 = " { u て " > { t れ le } 言ー 通常、ビジュアルモードを使うと、選択範囲の一方の端は特定の文字に固定され、も う一方の端は自由に動かせる。第気 ) などのモーションを使うと、ビジュアル な選択範囲の自由なほうの端を動かすことで、選択範囲を広げたり狭めたりできる。 こで起きているのはそれとは違っている。い ) を押すと、 Vim はビジュアルモー ドに切り替えて { } に含まれているすべての文字を選択する。テキストオプジェクトと 167

10. 実践Vim : 思考のスピードで編集しよう!

第 5 章コマンドラインモード ーキーを押すと、カーソルは次のマッチに移動する。要するに、 tally という単語の / / do something with ミ↓を一 for (counte = 1 ; 第ミ↓ーく = 10 ; 第ミま↓ + ) { var れ / / do something with ミー↓ for ( 目 a ↓ y = 1 ; f く = 10 ; ト + ) { var ly ; / / d0 something with tally for (tally=l; tally く = 10 ; tally + + ) { var ally ; バッフアの内容 counter く Esc> {start} キーストローク 100 たら「 :help く c ーて > く c ー w > 」と入力すれば、その設定のドキュメントを検索できるのだ。 もう 1 つ応用を。 vimrc ファイルを開いて、カーソルを設定行に移動しよう。そうし マンドを使ったが、 Ex コマンドならどれでも上記のキーマッピングを使用可能だ。 で行う ) 。詳細については→ : h c-CTRL-R-CTRL-W ①◎。この例では :substitute コ くて WO をコピーしたければ、第 0 をが使える ( この説明は 156 ページの TIP48 0 トま三、によりカーソル位置の単語がコピーされるが、このときに w 。て d じゃな も書かなくてよい理由については TIP90 ( 285 ページ ) を参照してほしい。 く必要はない。これは、一コマンドのおかげだ。上の例のように、検索フィールドに何 単語を入力するためのキーストロークが 2 回というのは悪くない。検索パターンも書 こうやって紙に書くと、このコマンドはスッキリしたものには見えないけれども、 :%s// く C-r> く C-w>/g マッピングを使えば、置換フィールドにこれを挿入できる。 う単語の上にあるので、これをもう一度入力する必要はない。を 0 メというキー このあとの変更は、 :substitute コマンドで行おう。カーソルは「 counter 」とい counter く Esc> により変更が行われる。 上に移動するわけだ。