vim에서 open은 무엇을합니까?


18

Vim의 문서에는 :open명령 에 대해 다음과 같이 말합니다 .

This command is in Vi, but Vim only simulates it:

                                                        *:o* *:op* *:open*
:[range]o[pen]                      Works like |:visual|: end Ex mode.
                                {Vi: start editing in open mode}

:[range]o[pen] /pattern/    As above, additionally move the cursor to the
                                column where "pattern" matches in the cursor
                                line.

Vim does not support open mode, since it's not really useful.  For those
situations where ":open" would start open mode Vim will leave Ex mode, which
allows executing the same commands, but updates the whole screen instead of
only one line.

그것은 "시뮬레이션"의 본질에 대해 언급하지 않으며, 왜 이것이 다른 행동을 가진 실제 명령이 아닌 시뮬레이션으로 간주되는지에 대해 설명하지 않습니다. ex 모드 (Q)에서 실행하면 실제로 설명 된대로 동작합니다.

그러나 다른 열린 명령이있는 것 같습니다. 일반 명령 행 또는 다른 인수를 가진 ex 모드 에서 실행될 때의 동의어 인 것으로 보입니다:edit . 명령 모드에서 실행할 때 /pattern/ , 그것은 커서를 배치 하고 분명히 실행 :edit그것은 또한으로 실행할 수 있습니다 (편집 실패 커서 위치는 경우에만 분명 존재로.) :open /pattern/ file커서 및 실행을 위치 결정하는,:edit file

내 질문은 : 왜 이것이 문서화되어 있지 않습니까? :edit내가 알지 못하는 것과 다른 점이 있습니까? POSIX를 반쯤 준수하려는 시도에서 :open동의어 :edit였으며 나중에 만 변경 되었습니까 ?

답변:


13

vi의 "열기 모드"는 하드 카피 터미널과 같이 단일 회선이있는 터미널에 유용했습니다. 열린 모드에서 vi는 파일의 "한 줄보기"를 가졌습니다. 커서를 움직이면 전체 줄이 다시 그려지고 삭제 된 문자가 다르게 인쇄됩니다.

은 "시뮬레이션"정력은 단순히 명령을 지원하는 (같은 문서가 말한대로)가 역할을하고있다 않는다는 것을 :visual하고 있기 때문에 :visual"달리 동일 :edit당신이처럼 행동 볼 이유는 아마 그" :edit.

소스 코드 관점 :open에서 ex_docmd.c( ex_open()) 로 구현됩니다 . 정규 표현식이 제공되지만 항상 호출로 끝나는 경우를 처리하기 위해 몇 가지 작업을 수행합니다 do_exedit().

의 구현 :edit, :badd그리고 :visual에 포함 된 ex_edit()동일한 파일의 기능, 그 기능은입니다 직접 전화do_exedit()(아무것도). 따라서 정규식 매개 변수를 처리 할 때를 제외하고 동일한 코드가 호출됩니다. do_exedit()약간 털이 있으며 동작은 실제로 실행 된 명령에 따라 크게 수정되지만 열기 / 편집 / 시각적 명령 토큰을 명시 적으로 확인하지는 않습니다. 따라서 세 명령은에서 동일한 코드를 실행 do_exedit()합니다.


8

Vi를 사용한 소개부터 디스플레이 편집 까지 :

하드 카피 터미널이나 최종 라인에서 벗어날 수있는 커서가없는 터미널에있는 경우 vi 명령 세트를 계속 사용할 수 있지만 다른 모드로 사용할 수 있습니다. vi 명령을 제공하면 편집기가 개방 모드를 사용하고 있음을 알려줍니다. 이 이름은 ex의 open 명령에서 유래 한 것으로, 동일한 모드로 들어가는 데 사용됩니다.

시각적 모드와 열린 모드의 유일한 차이점은 텍스트가 표시되는 방식입니다.

열린 모드에서 편집기는 파일에 단일 행 창을 사용하고 파일에서 앞뒤로 이동하면 항상 현재 행 아래에 새 행이 표시됩니다. vi의 두 명령은 z와 ^ R에서 다르게 작동합니다. z 명령은 매개 변수를 사용하지 않고 현재 행 주위에 컨텍스트 창을 그린 다음 현재 행으로 돌아갑니다.

하드 카피 터미널에있는 경우 ^ R 명령은 현재 행을 다시 입력합니다. 이러한 터미널에서 편집기는 일반적으로 현재 줄을 나타 내기 위해 두 줄을 사용합니다. 첫 번째 줄은 편집을 시작한 줄의 복사본이며이 줄 아래의 줄에서 작업합니다. 문자를 삭제하면 편집기는 여러 개의 \를 입력하여 삭제 된 문자를 표시합니다. 또한 편집기는 변경 후 곧 현재 줄을 다시 인쇄하여 줄이 어떻게 생겼는지 확인할 수 있습니다.

전체 화면 모드에서 vi를 지원할 수있는 매우 느린 터미널에서이 모드를 사용하는 것이 유용한 경우가 있습니다. ex를 입력하고 open 명령을 사용하여이를 수행 할 수 있습니다.

:openVim은 오늘날 완전히 쓸모없는 Vi 복제품으로 Vim의 기원을 나타내는 인공물입니다. POSIX 호환성을 위해 남아 있다고 가정 할 수 있습니다.

모호한 유사성에도 불구하고 상상력의 확장에 의한 대안 :open아닙니다:edit .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.