(n)vi - 在 ex 模式下擦除

(n)vi - 在 ex 模式下擦除

如何在 (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.csrc):

  /*
   * 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

相关内容