如何在 (n)vi 1.79 的 ex 模式(':' 命令行)中删除字符或使 'Backspace' 的行为与 Vim 中一样?
“退格”和“删除”仅将光标向左移动,新的击键会从此处覆盖而不是插入。这与插入模式相同,但我可以使用“Esc”来清除光标后的所有内容; '退格键'做在 shell 命令行中擦除。
我在 fvwm 的 xterm 中使用 (n)vi,其中每个都包含在新的 OpenBSD 7.1 安装中。请注意,Vim 及其vi
命令(即 :set 兼容)与 (n)vi 的实现不同。我搜索过的一些地方:
答案1
这是OpenBSD 中 ex-vi 的历史行为
(在存储库usr.bin/vi/vi/v_txt.c
下src
):
/* * Historically, vi didn't replace the erased characters with * <blank>s, presumably because it's easier to fix a minor * typing mistake and continue on if the previous letters are * already there.
要始终清空已删除的字符,vi
需要修补并重新编译,此时您将运行你自己的叉子的vi
:
diff --git vi/v_txt.c vi/v_txt.c
index c1d95e8..9ea1954 100644
--- vi/v_txt.c
+++ vi/v_txt.c
@@ -1014,8 +1014,7 @@ leftmargin: tp->lb[tp->cno - 1] = ' ';
* point in the screen. So, if incrementally searching, erase
* the erased characters from the screen.
*/
- if (FL_ISSET(is_flags, IS_RUNNING))
- tp->lb[tp->cno] = ' ';
+ tp->lb[tp->cno] = ' ';
/*
* Increment overwrite, decrement ai if deleted.
或者,您可以安装,它与其他平台vim
相当兼容:vim
doas pkg_add vim