前方/後方の単語削除用の XTerm 制御シーケンス?

前方/後方の単語削除用の XTerm 制御シーケンス?

私は信じているこの記事前方/後方の単語削除の制御シーケンスを見つけるのに役立つはずです。

私の理解では、制御シーケンスは\u001b[次のように始まるはずです。「制御シーケンス導入子」(これはこの他の答え) ですが、完全な文字列がどうなるかはよくわかりません。

コンテキスト(他のSOの質問に従って):私の目標は、キーボードショートカット(キーバインディング)からVSCodeターミナルで単語を削除するための制御シーケンスを発行することです。

答え1

そんなものはない、ctlseq文書には、言葉単語。また、消去するためにどの背景色を使用するか、単語の右側にあるものを左にシフトするかどうかという問題もあります。端末の右余白で折り返されている単語を考慮する必要があるかもしれません。

いくつかのオプションは次のとおりです:

  • 消去したい単語のセルと同じ数の BS 文字を送信し、その後に SPC (現在の背景色を使用することに注意してください) を送信し、さらに BS 文字 (カーソルを再び戻すため) を送信します。

    $ printf 'foo bar\b\b\b   \b\b\b+\n'
    foo +
    

    事実上すべての端末で動作するはずです。

  • 同じですが、 BS シーケンスを使用する代わりに、 tput cub x(xセルの数) を使用してカーソルをその量だけ戻します。また、を使用してtput ech xそれらのセルを消去できます (現在の背景色を使用するかどうかは端末によって異なります)

    $ printf 'foo bar'; tput cub 3; tput ech 3; printf '+\n'
    foo +
    
  • の代わりにtput ech xtput el行末まで消去したりtput dch x消去x セル (その後の内容を左にシフトします)。

(tputこれは terminfo データベースへのシェル インターフェイスです。ハード コーディングのエスケープ シーケンスを回避するという考え方で、ご使用の言語に相当するものを使用してください)。

backward-kill-wordいくつかのシェルのウィジェット (scriptたとえば、出力をログに記録するために使用)を見ると、readlineは移動に BS を、dch削除には BS を使用し、 はzshBS と と書き換えの組み合わせを使用していることがわかりますcub。 は絶対列位置決め ( )tcshを実行しているようで、は削除に使用し、ksh93 は CR を送信して行全体を書き換えます。hbadch

答え2

このようなシーケンスは見たことがありません。よく考えてみると、単語を削除するのは非常に複雑で、他の操作よりも複雑です。また、他の操作では画面上の内容はまったく考慮されないと思います。たとえば、単語の終わりは何でしょう? 「_」? 「-」? 「.」?

関連情報