私は現在、WindowsのDebian WSLでGnu edバージョン1.18を実行しています。次のエンコーディングを使用してファイルを編集する場合:
ASCII text, with CRLF, LF line terminators
または
ASCII text, with CRLF,
その後、edは行を正しくリンクできませんj command
。代わりに、接続する最初の行を削除します。
この質問はいいえこれはファイルがedで作成された場合に発生しますが、他のプログラムで作成された後にedで編集されたファイルには影響します。 GNU ed 1.17でも同じ問題が発見されました。
これはバグですか?この問題を回避する方法は?
答え1
編集者は、ed
文書が Unix テキストファイルであると仮定します。 DOSテキストファイル(CRLF行末を持つファイル)が表示されたら、各行末のキャリッジリターン文字を別の文字として扱います。
つまり、次のDOSテキストファイルがある場合(ここでは,l
ファイルを一覧表示する明示的な方法を使用して表示でき\r
ます$
。
line 1\r$
line 2\r$
line 3\r$
...次を使用して、2,3j
3行目を2行目の末尾に連結します。
line 1\r$
line 2\rline3\r$
ed
ターミナルに出力すると、カーソルは行line 2\rline3\r
の真ん中に含まれているリテラルキャリッジリターンを介して行の先頭に戻り、テキストがline 2
消えるように感じます(実際にはそうです)。覆われた通過line 3
)。
解決策は、次のツールを使用してドキュメントをUnixテキストに変換するか、または次を使用してエディタdos2unix
からすべての1つの末尾のキャリッジリターンを削除することです。
,s/^M$//
...^M
を使用して入力する位置Ctrl+VCtrl+M (リテラルキャリッジリターンを入力します)。
GNUed
バージョン1.18以降では、このオプションを使用してエディタを起動することもできます。--strip-trailing-cr
このオプションは、ファイルを開くと、行末の単一の末尾のキャリッジリターンを削除します。これがすぐs///
上のコマンドが実行するアクションです。