FreeBSDのviは、インデントをキャンセルするためにcontrol-Dを正しく実行できませんか?

FreeBSDのviは、インデントをキャンセルするためにcontrol-Dを正しく実行できませんか?

私は最小限のFreeBSDシステムを使用しており、次のものを使用する必要があります。組み込みファイルを編集するエディタ。特に、これはvim、vim-tiny、または他の選択肢ではありません。これは「4BSDバグ間互換」nviエディタです。

ほぼ予想通りに動作します。これマニュアルページcontrol-Tとcontrol-Dがそれに応じてインデント/アウトをキャンセルすることを示しますshiftwidth。 Control-Tは機能しますが、Control-Dは機能しません。実際に^ D文字をファイルに入力します。

vimをシステムにインストールすると、control-Tとcontrol-Dが期待どおりに機能するため、端末がキーストロークを誤って解釈することは問題になりません。 Vi自体はcontrol-Dを解釈しません。

このようなことが起こった人はいますか?解決策? vimの使用はオプションではありません。

答え1

長すぎる博士。 vimいいえvi

では、viTabの代わりにControl-Tを使用して行をインデントする必要があります。

再学習が困難な場合は、TabからControl-Tへの入力モードマッピングを追加できます。

printf 'map! \x16\t \x14\n' >> ~/.nexrc

実際vinvi複製されたもの(FreeBSDで使用されているものなど)では、Ctrl-Dがクリアされます。自動インデント文字前の「shiftwidth」の境界まで。そうだろういいえControl-I、Tab、またはSpaceを押して、手動で入力したTabまたはSpaceの文字を消去します。

答え2

これはバグ間の互換性の一部です。

これについては、ソースコードのコメントで詳しく説明します。入力はリテラル文字/usr/src/contrib/nvi/vi/v_txt.cとして扱われます。〜しない限り aiモードがオンそして最後に挿入された文字は自動インデント文字です(Control+Tまたは新しい行の自動インデントを介して)。

また、コメントでは、元のvi+ControlT+がさらに制限され、挿入モードControlD最初に入力された場合にのみインデントに影響を与えることも指摘しています。

関連情報