Next: , Previous: , Up: Yanking   [Contents][Index]


12.2.2 過去にkillしたテキストをyankする

Yankingで説明したように、C-yに数引数を指定して、最後にkillされたものではないテキストをyankできます。これはkillリングのどのエントリーが欲しいか覚えているとき便利です。もし覚えていないときは、M-y (yank-pop)コマンドを使って候補を巡回したり、もっと前にkillしたものを選択できます。

もし前のコマンドがyankコマンドのとき、M-yはyankされたテキストを、1つ前にkillされたテキストで置き換えます。つまり2番目に新しいkillされたテキストを復元するには、最初にC-yで最後にkillされたテキストをyankし、次にM-yでその1回前にkillされたテキストで置き換えます。これははC-yまたは他のM-yの後でのみ機能します(別のコマンドの後にM-yを呼び出すと動作が異なる。以下参照)。

killリングのエントリーを指す(ポイントする)、last yankポインターという概念で、このM-yの操作モードを理解できるでしょう。なにかをkillする度に、last yankポインターはリングの先頭に新たに作られたエントリーを指すように移動します。C-yは、last yankポインターが指すエントリーをyankします。M-yはlast yankポインターが違うエントリーを指すように移動して、バッファーのテキストをポインターが指すテキストに変更します。C-yや別のM-yの後のM-yにより、last yankポインターを前のエントリーに移動するとともにバッファー内のテキストはそのマッチに変更されます。M-yコマンドを充分な回数繰り返せばリング内の任意のエントリーにポインターを移動できるので、任意のエントリーをバッファーに取り込むことができます。やがてリングの最後に到達すると、次のM-yにより再び最初のエントリーに戻ります。

M-yはリング内でlast yankポインターを移動させますが、リング内のエントリーの順番は変更しません。リングのエントリーは、常に最後にkillされたものを先頭に、記憶されているもので一番古いエントリーへと並んでいます。

C-yM-yを使用した後には、数引数によってlast-yankポインターを何回進めるかをM-yに指定できます。負の引数はリングの先頭に向かってポインターを移動させます。リングの先頭では一番古いエントリーに戻り、そこから先頭へと移動します。

望むテキストを見つけてバッファーに取り込んだら、M-yコマンドを止めれば、最後にyankされたテキストはそこに残ります。このテキストはkillリングのエントリーの単なるコピーなので、それを編集してもリングの中のエントリーは変更されません。新しく何かをkillしない限り、last-yankポインターは同じ位置に留まるので、C-yでそのテキストの別のコピーをyankできます。

C-yに数引数を指定するときも、yankするエントリーにlast-yankポインターをセットします。

yank以外のコマンドの後にM-yを呼び出すこともできます。この場合には、M-yはミニバッファーで以前のkillのいずれかの入力を求めます。再挿入したいエントリーが見つかるまで、ミニバッファーのヒストリーコマンド(Minibuffer Historyを参照)を使用して、killリング内のエントリーの操作や検索ができます。あるいはkillリング内のエントリーリストのエントリーにたいして補完を行うための補完コマンド(Completion Commandsを参照)や、選択可能な候補エントリーによる*Completions*バッファーをポップアップできます。オプションとしてkillエントリーを選択後に、ミニバッファーでそれを編集できます。最後にRETでミニバッファーをexitして、選択したkillリングエントリーのテキストを挿入します。別のyankコマンドの後のM-yのように、last-yankはyankしたばかりのテキストがあった位置を指したままになります。これは前のkillのいずれか、または挿入前に編集したkillリングのエントリーのいずれかです(後者の場合にはkillリング先頭に編集したテキストが追加される)。そのためこの場合にもC-yにより挿入したばかりのテキストの別のコピーがyankされます。

yank以外のコマンドの後に単なるプレフィックス引数と共に呼び出した際(C-u M-y)には、M-yC-yが行うように挿入されたテキストの前にカーソルを残します。