ジャンプ - みる会図書館


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

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

第 9 章ジャンプによるファイル間の移動 114 169 290 2 く recipe id="sec. change . list"> 2 く recipe id="sec. gf"> 2 く recipe id="sec . global . marks"> Press Enter or type command tO continue ( 続けるには ENTER を押すかコマンドを入力してください ) 現在のウインドウでアクテイプなファイルを変更するコマンドはすべてジャンプと して扱われる。ジャンプリストでは、これらのコマンドを実行する前後のカーソル位 置が Vim により記録される。たとえば、 : edit コマンドを実行して新規にファイルを オープンすると ( 133 ページの TIP41 を参照 ) 、いコマンドと k@三新コマンドを使っ て、 2 つのファイル間でジャンプできる。 なコマンドによる特定行への直接移動はジャンプになるが、一度に 1 行ず っカーソルを移動するのはジャンプにはならない。文単位、段落単位のモーションは ジャンプとなるが、文字単位のモーションはジャンプにはならない。経験的な話をす ると、長距離のモーションはジャンプに分類されるが、短距離のモーションは単なる モーションなのだ。 以下の表に、ジャンプをいくつかまとめておこう、 1 。 動作 コマンド 指定した行番号の行にジャンプ /pattern—, ?patterrkCR9 、ふー 次もしくは前にある pattern にジャンプ マッチするカッコにジャンプ 前の文 ( ( ) もしくは次の文 ( ) ) の先頭にジャ ンプ 前の段落 ( { ) もしくは次の段落 ( } ) の先頭に ジャンプ 画面の先頭 / 真ん中 / 末尾にジャンプ カーソル位置に記述されているファイル名にジャ ンプ カーソル位置に記述されているキーワードの定 義位置にジャンプ マークにジャンプ トコマンド / ー 0 コマンド自体がモーションとして扱われることはいっさいな * 1 . 訳注 : 表の動作とは直感的には一致しない場合もあるので、実際のジャンプ先については自分で試してみて くたさい。 っっ乙 -1 C- 180

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

第 9 章 ジャンプによるファイル間の移動 前章で話したように、モーションを使うと、ファイル内をあちらこちらへと移動でき る。ジャンプもこれに似ている。ただし、ジャンプでは、異なるファイル間も移動で きる点が異なっている。 Vim には、ドキュメントに書かれているキーワードをワーム ホール化するコマンドがいくつかある。このワームホールを使って、コードベースの ある部分から別の部分へと瞬間移動できる。最初は戸惑うかもしれない。でも、 Vim はいつだって私達の辿ってきた道を記憶していてくれるから、足跡を辿れば元いた場 所にすぐに帰れるんだ。 T 旧 55 : ジャンプリストの移動 ユーザーがジャンプを行う前後に、その時点でユーザーがどこにいたかを Vim は記録してくれる。また、その足跡を辿るためのコマンドもいくつか用意さ れている。 Web プラウザでは、 [ 戻る ] ボタンを使って、それまでに訪れたページに戻ること がよくある。 Vim にも似た機能がある。これにはジャンプリストを使う。いってみれ ば、 26 島ゝコマンドは [ 戻る ] ボタンみたいなもので、これと対になる sg : 新コマンド は [ 進む ] ボタンみたいなものだ。これらのコマンドを使うことで、 Vim のジャンプリ ストを辿ることができるが、では、ジャンプとは正しくはどういうことなのだろうか。 最初にこのことをハッキリさせておこう。モーションはファイル内を移動する。 方、ジャンプはファイル間を移動する ( とかいいながら、このあと、ジャンプにも分 類されるモーションをいくつか紹介しよう ) 。ジャンプリストの内容は、以下のコマン ドを実行すると確認できる。 :JIIIIIPS 」 ump line 12 4 (jump 行列ファイル / テキスト ) 2 く recipe id="sec ・ jump. list"> 179 C01 file/text

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

TIPI 05 : quickfix リストをブラウスするく 迷子にならないようにしよう :make コマンドを実行すると、 Vim は自動的に最初のエラーにジャンプをする ( 工 ラーがない場合を除く ) 。カーソル位置を移動させたくないときには、代わりに以 下を実行しよう。 末尾の「 ! 」は、最初の要素へのジャンプなしで quickfix リストを更新するよう に伝える。ここで、 :make を実行して、すぐに「 ! 」っきのほうを使うべきだった と気がついたとしよう。 :make を実行する前にいたところには、どうすれば戻れ るだろう。そんなときには、く c ー。 > コマンドを使って、ジャンプリストの以前の位 置に戻ればよい。詳細については、羽 P55 ( 1 79 ページ ) を参照してほしい。 T 旧 105 : quickfix リストをブラウズする quickfix リストには、 ] つ以上のファイルのロケーションのコレクションが 保持される。個々のレコードは、 :make 実行時にコンバイラで発生したエラー の場合もあるし、 :grep 実行時に返された検索マッチの場合もある。リスト がどのようにして作られたかに関係なく、これらのレコードをナビゲーショ ンできなければならない。ここでは、 quickfix リストをブラウズする方法を 簡単に説明しよう。 quick x リストをナビゲーションするためのコマンドは、 :h quickfixOO を見れ ば、やまほどみつかる。表 1 7 ー 1 に、その中でも最も便利なものをいくつか掲載して おこつ。 表 17 ー 1 quickfix リストをナビゲーションするためのコマンド コマンド : cnext : cprev : cfirst :clast : cnfile 動作 次の要素にジャンプ 前の要素にジャンプ 最初の要素にジャンプ 最後の要素にジャンプ 次のファイルの最初の要素にジャンプ 335

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

TP103 : Vim のタグナビゲーションコマンドを使ってキーワード定義に移動するく 動させるよりも速いこともある。これはとくに、 Vim に tags ファイル内のすべての キーワードをタブ補完する機能があるからだ。たとえば、「 :tag Fran く Tab> 」と入力 すると、 Vim は途中まで入力したものを Franc 。 ph 。 ne に展開してくれるだろう。 また、これらの Ex コマンドを「 :tag /{pattern} 」や「 :tjump /{pattern} 」のよ うに使うと、これらのコマンドに正規表現を与えられる ({pattern} の前にある「 / 」 に注意 ) 。たとえば、「 phone 」で終わるキーワードの定義間を移動するには、以下のよ うな呼び出しを行えばよいだろう。 → : tjump /phone$ # pri kind tag 1 F C c Ang10phone f ile ( ファイル ) anglophone . rb class Ang10phone く Speaker Francophone francophone . rb class Francophone く Speaker Type number and く Enter> (empty cancels) : ( 番号とく Enter> を入力してください ( 空でキャンセル ) : 以下の表に、タグを使ってコードベースを移動するのに使えるコマンドをまとめる。 コマンド く 0 ー ] : tag {keyword} : tjump {keyword} :pop もしくは <C-t :tselect :tlast :tfirst : tprev : tnext :tag 動作 カーソル位置の単語にマッチする最初のタグにジャンプ カーソル位置にある単語の複数のマッチから選択するようにユー ザーにプロンプトを表示する。マッチが 1 つだけの場合、プロンプ トを表示せずにジャンプする { keyw 。て d } にマッチする最初のタグにジャンプ { keyw 。 rd } の複数のマッチから選択するようにユーザーにプロンプ トを表示する。マッチが 1 つだけの場合、プロンプトを表示せずに プトを表示する タグマッチリストからアイテムを選択するよう、ユーザーにプロン 最後にマッチするタグにジャンプ 最初にマッチするタグにジャンプ 前にあるマッチするタグにジャンプ 次にマッチするタグにジャンプ タグ履歴を辿る タグ履歴を遡る ジャンプする 329

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

第 9 章ジャンプによるファイル間の移動 録 / 管理しているということだ。これは変更リストと呼ばれており ( → :h changelist ◎◎ ) 、その内容は以下のコマンドで調べられる。 → : changes 列テキスト ) ← change line C01 text ( 変更行 1 8 Line one 2 7 Line two 3 9 Line three Press ENTER or type command tO continue ( 続けるには ENTER を押すかコマンドを入力してください ) 上の出力例からは、 Vim が個々の変更について行番号と列位置を記録していること がわかる。変更リストは、コマンドとコマンドを使って前後に辿れる。ーコマン ドと : コマンドが直前のまなコマンドを繰り返したり逆方向に実行したりするのに 使えるのを思い出すと ( 159 ページの TIP49 を参照 ) 、とも少しは覚えやすくなる だろう。 ドキュメントで直前に変更があった場所にジャンプして戻るには、を使う。これ により、直前に編集が行われたあとの行 / 列にカーソルが戻る。この結果は、ゝ を押したときと一緒だ。一緒だが、ジャンプして戻るために、ドキュメントに変更を 加えることがない。 ( 0 っ乙 -1 直前の変更を表すマーク 変更リストを補完するために、 Vim はいくつかのマークを自動的に作成する。 マークは常に、直前に行われた変更の位置を参照する ( → :h 。 . ◎◎ ) 。一方、マー クは、直前の挿入モードから抜けたときのカーソル位置を覚えていてくれる ( → :h ← ほとんどの状況では、マークへのジャンプと、コマンドは同じことになる。こ のマークは直前に行われた変更の位置を参照するだけだが、変更リストには複数の位 置が記録される。まを何度も押すと、そのたびに、変更リストに以前に記録された位置 へとジャンプが行われる。一方、は常に変更リストの最後の要素へとジャンプする。 をマークは直前の挿入を参照する。これは、単なる直前の変更とは少々異なってい る。挿入モードから抜けて、ドキュメントのあちらこちらをウロウロとしてから、い きついた場所で駐を押してみよう ( → :h giOO)0 一度の操作で、マークを使っ 182

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

TlP79 : 検索コマンドを使ってみようく 索と同じになる ( オフセットについては 266 ページの TIP83 で説明する ) 。よって、 ~ で前方検索をして、次に日を実行すると、前方検索が続けて行われる。これに対して、 最初の検索カツだったら、日で後方検索が行われる。一方、コマンドは常に、直前の検 索とは逆方向に検索を実行する。 同じパターンを使って検索を繰り返したいけど、方向やオフセットは変更したいとき がたまにある。そうした場合には、パターンなしで検索を実行すると、 Vim は直前の 検索のパターンを流用することを知っていると役に立つかもしれない。表 1 3 ー 1 に 検索を繰り返すときの方法をまとめておこう。 表 13 ー 1 検索を繰り返すときのやり方 コマンド ? く CR 動作 次のマッチにジャンプ。検索の方向とオフセットは以前のまま 前のマッチにジャンプ。検索の方向とオフセットは以前のまま 同じパターンの次のマッチに前方ジャンプ 同じパターンの前のマッチに後方ジャンプ をで検索を開始するとしよう。前のマッチに後方ジャンプしたあとに、残りのマッチ は前方ジャンプしていくことにした。ⅱキーでこれを行えるが、方向がなんだか逆なよ うな気になる。キーを使うのではなく、 CR > を実行する。これにより、同じパター ンを使って前方検索が行われる。そのあとは、を使って残りのマッチを順々に飛んで いける。 TIP84 ( 268 ページ ) では、検索を繰り返すごとにオフセットを変更するような、もっ と複雑な例を見てみよう。 以前に行った検索の呼び出し Vim は検索パターンを記録してくれるので、それらを簡単に呼び戻せる。検索プロ ンプトが表示されている状態で、き当キーを押すと以前の検索をスクロール表示でき る。実際には、検索履歴をプラウズするインターフェイスは、コマンドライン履歴を プラウズするためのものとまったく同じだ。これについては、 TIP34 ( 101 ページ ) で 詳しく説明した。 TIP85 ( 271 ページ ) では、このテクニックを実際に使ってみよう。 261

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

第 8 章モーションによるファイル内の移動 は、いまと比べて、マークは非常に重要なものだった。 vi でマークが必要とされた仕 事の多くは、 Vim ではビジュアルモードで行える。 ただし、 Vim ではマークはもうゴミかというとそうでもない。まだまだ使い道はあ る。とくに、 Vim が自動的に設定してくれるマークは本当に便利だ。こうしたマーク には表 8 ー 3 に示すものがある。 表 8 ー 3 自動マーク キーストロークバッフアの内容 現在のファイルで直前に行われたジャンプ以前にいた場所 直前に変更された場所 直前に挿入があった場所 直前に変更もしくはヤンクが行われた先頭 直前に変更もしくはヤンクが行われた末尾 直前のビジュアルな選択範囲の先頭 直前のビジュアルな選択範囲の末尾 “マークは、ジャンプリスト ( 179 ページの TIP55 を参照 ) を補完するものだ。 . は変更リストを補完するものだ。これについ の使い方は次の TIP で見ていこう。 ては TIP56 ( 181 ページ ) で取り上げる。 直前のビジュアルな選択範囲の先頭と末尾はどちらも、自動的にマークが記録され ることから、ビジュアルモードは、そこで使われているマーク機能への一風変わった インターフェイスであるとさえ考えられる。 T 旧 54 : カッコから対となるカッコにジャンプ 開きカッコとそれに対応する閉じカッコとの間でカーソルを移動するための モーションが Vim には用意されている。 matchit . vim プラグインを有効にす ると、この挙動を拡張して、 XML タグの対、さらには何かのプログラミング 言語のキーワードの対でも機能するようにできる。 第コマンドを使うと、開きカッコとそれに対応する閉じカッコの間でジャンプを行え る ( → : h % ◎◎ ) 。例に示すように、これは ( ) 、 { } 、ロで使える。 174

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

文字を検索 TIP50 . 検索して移動 高精度なテキストオブジェクトを使って選択範囲をトレース . TIP52 . デリミタを含めて削除したり、デリミタの内側を変更したり 羽 P53 : 場所をマークして、そこにサッと戻る・ 羽 P54 . カッコから対となるカッコにジャンプ・ TlP51 羽 P49 第 9 章ジャンプによるファイル間の移動 TlP55 . ジャンプリストの移動・ TIP56 . 変更リストを辿る・ TlP57: カーソル位置に記述されているファイル名のファイルにジャンプする 目次く ・・ 159 ・・ 164 ・・ 166 ・・ 173 ・・ 174 179 ・・ 179 ・・ 1 81 羽 P58 . グローパルマークを使ってファイル間をテキハキと移動する・ 第 4 部レジスタ TlP70 : イテレータを評価してリスト中の要素に番号をつける・ TlP69 . 複数のファイルにマクロを適用する TIP68 . マクロにコマンドを追記する TlP67 . 連続する行に対して変更を繰り返す 回数を指定してマクロを再生する・ 羽 P65 . 正規化、撃破、中断・ 羽 P64 . マクロの記録と実行・ マクロ TIP63 . システムレベルのクリップポードを扱う レジスタから貼り付け・ TlP61 . レジスタを使ってピジュアルな選択範囲を置換 TlP60 . Vim のレジスタを掌握する TlP59 . 無名レジスタを使った削除 / ャンク / ブット コピー & ペースト TlP66 第 1 1 章 TlP62 . 第 1 0 章 羽 P71 . マクロの内容を編集する 第 1 2 章バターンとリテラルのマッチ 第 5 部バターン TlP73 : 正規表現検索で「 \ v 」パターンスイッチを使う TlP72 : 検索パターンが大文字 / 小文字を区別するかを制御する・ ・・ 183 ・・ 186 189 1 91 ・・ 1 91 ・・ 196 ・・ 202 ・・ 204 ・・ 207 21 1 ・・ 212 ・・ 215 ・・ 217 ・・ 219 ・・ 223 ・・ 225 ・・ 230 ・・ 233 7 ・・ 243 ・・ 241 241 239

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

TlP56 : 変更リストを辿るく い。すなわち、ビジュアルモードで選択範囲を拡張するのに、これらのコマンドは使 えない。オペレータ待機モードでも使えない。ジャンプリストとは、編集セッション の間に、次々とファイルをオープンしていった足跡を簡単に戻っていけるようにする ためのパンくずリストみたいなものだと、筆者はよく考えている。 Vim は同時に複数のジャンプリストを管理できる。実際、個々のウインドウはそ れぞれが独自のジャンプリストを持っている。分割ウインドウや複数のタブページを 使っているときには、コマンドとき 0 ヨコマンドは常にアクテイプなウインドウ のジャンプリストを対象として動作する。 Tab キーのマッピングにご注意 挿入モードでく c ー i > を押してみよう。く Tab > キーを押したときと同じ動作になるの がわかるはずだ。これは、 Vim がく c ー i > とく Tab > を同一視しているからだ。 く Tab > キーに何かをマッピングしようというときには、く c ー i > を押したときにも マッピングした内容が呼び出されることに気をつけよう ( 逆も同じだ ) 。これのど こが問題なのだろうか ? く Tab > キーを別の何かにマッピングすると、く c ー i > コマ ンドのデフォルトの動作を上書きすることになる。トレードオフするだけの価値 があるのか、よく考えてみよう。一方向にしか移動できないのであれば、ジャン プリストは非常に使いづらいものになる。 T 旧 56 : 変更リストを辿る Vim は、ドキュメントに変更があるたびに、変更後のカーソル位置を記録す る。この変更のリスト ( 変更リスト ) は簡単に辿ることができるとともに 移動したい部分へ移動するための最も簡単な方法としても使える。 アンドゥコマンドの直後にリドゥコマンドを実行したことはあるだろうか ? この 2 つのコマンドは互いに互いのコマンドをなかったことにするものだが、直前に変更 が行われた場所にカーソルを移動するという副作用がある。ドキュメントで直前に編 集を行った場所にジャンプして戻りたくなったときに、これが便利に使えることがあ る。これはハックだが、をを実行すればそこにカーソルが移動する。 これはつまり、編集作業中に私達がバッフアに対して行う変更のリストを、 Vim が記 181

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

第 9 章ジャンプによるファイル間の移動 設定を処理してしまうのだ。 Ruby 関連でもっといろいろとしたいのであれば、現在 でも活発にメンテナンスが行われているので、ファイルタイププラグインの最新バー ジョンを GitHub から入手することをお勧めする * 3 。 suffixesadd オプションと path オプションはバッファごとにローカルに設定され るので、これらは異なるファイルタイプごとにそれぞれの方法で構成できる。 Vim は Ruby 以外にもたくさんの言語用のファイルタイププラグインを含んで配布されてい る。よって、実際には、これらのオプションを自分自身で設定する必要が出てくるこ とはそれほど多くはないだろう。ではあるのだが、コマンドの動作原理を理解して おくことには価値がある。このコマンドは、ドキュメントに記述されている各ファイ ーリンク的に振る舞うようにする。そのおかげで、コードベース内を ルノヾスカ、イノヾ 簡単に移動できるようになる。 50 ー畛コマンドにも同様な役割がある。こちらも少々設定が必要になるが ( これに ついては 323 ページの TIP102 で話をしよう ) 、正しく設定を行えば、このコマンドを 使って、あるメソッドを呼び出している部分から、そのメソッドの定義へと直接移動 できるようになる。このサンプルについては TIP103 ( 326 ページ ) を参照してほしい。 ジャンプリストと変更リストはパンくすリストのようなもので、これらを使って、自 分が辿ってきたジャンプの経路を逆戻りできる。これに対して、朝コマンドと 5C1 コ マンドはコードベース内のある場所から別の場所へと瞬間移動するためのワームホー ルを提供してくれる。 T 旧 58 : グローバルマークを使ってファイル間を テキパキと移動する グローバルマークは、ファイル間をジャンプするのに使えるブックマークの ようなものだ。コードベースのなかを歩きまくったあとに、ファイルに一発 で戻るのに、グローバルマークはとくに便利に使える。 i コマンドを使うと、現在のカーソル位置にマークをつけられる ( → :hm ①① ) 。 { letter } に小文字を使うとバッフアにローカルなマークが作られる。一方、 { letter } に大文字を使うとグローバルマークが作られる。マークをつけたら、は tter * 3. ht tps : //gi thub.com/vim—ruby/vim—ruby 186