Freebsd
FreeBSD 的 vi 不能正確地進行 control-D 縮進?
我在一個極簡的 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
在 real
vi
和nvi
clone(在 FreeBSD 中使用)中,control-D 將擦除自動縮進字元直到前一個“shiftwidth”邊界。它不會刪除您通過按 Control-I、Tab 或 Space 手動輸入的 Tab 或 Space 字元。
這是錯誤對錯誤兼容性的一部分。
在來源的評論中有一個冗長的討論,在
/usr/src/contrib/nvi/vi/v_txt.c
。除非打開模式並且插入的最後一個字元是自動縮進字元(通過+或在新行上自動縮進),否則輸入被視為文字␄
字元。ai``Control``T
評論還指出,原始
vi
的Control
+T
和Control
+D
受到更多限制,只有當它們是在插入模式下鍵入的第一件事時才會影響縮進。