web-dev-qa-db-ja.com

Edの「挿入」コマンドを使用しているときに、行にピリオドを単独で挿入するにはどうすればよいですか?

通常、行のピリオドはそれ自体で挿入を終了します。どうすれば逃げることができますか?

5
Brennan Vincent

いいえ、行にピリオドを単独で挿入することはできません。これは、テキストの挿入を停止するedの指示だからです。初期のいずれかを参照してください ed man pages (page 7):

行の先頭にピリオド(。)だけを入力すると、入力モードが終了します。

単独で期間に入らないことで回避できます。例えば: Space.Enter に続く .Enter 続いてs/^ //。後続のs//コマンドでペアリングする限り、スペース以外の任意の文字をトークンとして使用できます。

ピリオドを単独で挿入することはできません。行を追加、変更、または挿入すると、edは最終的にappend_lines関数を呼び出します。その関数は、buffer.cで、改行で区切られた入力を読み取ります(get_stdin_lineを介して)。その一環として、結果の中でピリオドが(末尾の改行以外の)唯一のものであるかどうかを確認します。以下では、「ibufpp」は入力されたテキストへのポインタであり、「size」はそのバッファの長さです。

if( size == 2 && **ibufpp == '.' ) { *ibufpp += size; return true; }

圧縮されたtarバンドルは次の場所からダウンロードできます: http://download.savannah.gnu.org/releases/ed/ または表示 Debianのedのアップストリームページ または OpenBSDのed のページ。対応するコードは main.c にあります。

ed(1)Conference Twitter post で発見された別のオプションは、任意のother単一文字を入力し、それを置き換えることです。ピリオドのある文字:

  1. xEnter
  2. .Enter
  3. s/./.
6
Jeff Schaller