(n)vi - ex 모드에서 지우기

(n)vi - ex 모드에서 지우기

(n)vi 1.79의 ex 모드(':' 명령줄)에서 Vim처럼 문자를 제거하거나 '백스페이스'가 작동하도록 하려면 어떻게 해야 합니까?

"백스페이스" 및 "삭제"는 커서를 왼쪽으로만 이동하며, 여기서 새 키 입력이 삽입되지 않고 덮어쓰여집니다. 이는 삽입 모드와 동일하지만 'Esc'를 사용하여 커서 '백스페이스' 뒤의 모든 항목을 지울 수 있습니다.하다쉘 명령줄에서 지우십시오.

나는 fvwm의 xterm과 함께 (n)vi를 사용하고 있는데, 각 xterm은 새로운 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

관련 정보