(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