readline - セットマーカーをリセットするために引っ張る

readline - セットマーカーをリセットするために引っ張る

このバインディングを実装したいと思います。

"\C-xk": kill-region

# turn previous word into HTML/XML
# opening and closing tag pair
"\C-xh": "\e \eb\C-xk<\C-y>\e </\C-y>\C-x\C-x"

</ただし、タグ間ではなく2番目にテキストをインポートした場所に戻ります<tag>|</|tag>

さまざまなテキストを使用してコマンドラインで両方の機能を試しましたが、set-mark値がリセットされているようですyank

これはバグですか、それとも意図されていますか?これで、\C-b\C-bシーケンスの最後に追加するだけです。

答え1

これはバグではなく、明示的にプログラムされた動作です。

見たらKill.c -> rl_yank():512

/* Yank back the last killed text.  This ignores arguments. */
int
rl_yank (count, ignore)
     int count, ignore;
{
  if (rl_kill_ring == 0)
    {
      _rl_abort_internal ();
      return 1;
    }

  _rl_set_mark_at_pos (rl_point);
  rl_insert_text (rl_kill_ring[rl_kill_index]);
  return 0;
}

明示的にリセットされるのがわかります。表示これまでより、Kill Ringのテキストを挿入します。

他の yank* メソッドにも同様に適用されます。

これは、よく文書化されていないが潜在的に不明な長さのテキストを挿入した後に元の点に戻ることができるようにするためのものであると仮定します。

関連情報