Freebsd

FreeBSD 的 vi 不能正確地進行 control-D 縮進?

  • December 13, 2018

我在一個極簡的 FreeBSD 系統上,需要使用內置的vi編輯器來編輯文件。具體來說,這不是 vim,也不是 vim-tiny 或其他替代品。它是“4BSD bug-for-bug compatible” nvi 編輯器。

它幾乎按預期工作。手冊頁說 control-T 和 control-D 將根據shiftwidth. Control-T 確實有效,但 control-D 無效。它實際上將 ^D 字元輸入到文件中。

如果我確實讓 vim 進入系統,control-T 和 control-D 會按預期工作,所以這不是終端錯誤解釋密鑰的問題。Vi 本身並不解釋 control-D。

有人遇到這個嗎?一個解決方案?使用 vim 不是一種選擇。

tl;博士; vim不是vi

vi中,您應該使用 Control-T 而不是 Tab 來縮進一行。

如果您發現難以重新訓練,您可以添加從 Tab 到 Control-T 的輸入模式映射:

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

在 realvinviclone(在 FreeBSD 中使用)中,control-D 將擦除自動縮進字元直到前一個“shiftwidth”邊界。它不會刪除您通過按 Control-I、Tab 或 Space 手動輸入的 Tab 或 Space 字元。

這是錯誤對錯誤兼容性的一部分。

在來源的評論中有一個冗長的討論,在/usr/src/contrib/nvi/vi/v_txt.c除非打開模式並且插入的最後一個字元是自動縮進字元(通過+或在新行上自動縮進),否則輸入被視為文字字元。 ai``Control``T

評論還指出,原始viControl+TControl+D受到更多限制,只有當它們是在插入模式下鍵入的第一件事時才會影響縮進。

引用自:https://unix.stackexchange.com/questions/487837