unix vi エディタ: ^J のマッピング

unix vi エディタ: ^J のマッピング

私は「learning vi editor」(linda lamb & arnold robbins 6th edition) という本を読んでいます。この本の 115 ページに次のようなコマンドがあります。

:map ^J xyz

xyz 部分自体はここでは重要ではありません。私の問題はその^J部分を作ることです。

ctrl私は+ V ctrl+ jctrl+はv例えばEnterをエスケープするために使用できます)とctrl+をj直接試しました

どちらの場合も機能しません。

私は FreeBSD 11.0 内で vi エディタを使用していますが、これは vim (vi improved) ではありません。

- - - 編集 - - -

ビデオ:

https://vimeo.com/212400468

00:05 - ctrl+K を dd (行全体を削除) にマップします

00:19 - 同じことを ctrl+J で実行しようとしましたが、ctrl+J はテーブルをトリガーするため機能しません。

00:25 - ctrl+V ctrl+J でもう一度試してください。これも機能せず、テーブルがトリガーされます。

00:33 - 正確に「^J」をマップしてみてください

00:44 - ctrl+J を試しても期待通りには動作しません。シーケンス「^J」を入力すると動作します。

答え1

それは実際、本の中での誤りのようです。この例の後に次のコメントが続きます:

前の例では、^J6 六コマンド(カーソルを1行下に移動)の場合、このキーはコマンドと同じなので、マッピングしても問題ありませんj。他のキーと同じtsksを実行するキーや、めったに使用されないキーは数多くあります。ただし、6 六マップ定義でコマンドを使用して通常の使用を大胆に無効にする前に、コマンドの使用を検討してください。

通常の推論では^JですcontrolJ。しかし、第 6 版で言及されている vi のいずれも、テキストにリテラルの control/J を挿入することを許可していませんでした。これは、Unix 系システムの行末であるためです (vim は^@control/J をエスケープしようとするとヌル文字を返しますが、他のエディターはそれを無視します)。リテラル^J」はコメントでは機能しません。これらの文字は6 六指示。

あなたはリテラルもちろん、 「^J」はうまくいきます。しかし、それはこの例のポイントではありません。おそらく作者は他の興味深いキャラクターを意図していたが、何らかの理由でそれを変更したのでしょう。

関連情報