Ex 모드가 실제로 사용됩니까?


115

Vim에는을 입력하여 입력 할 수있는 Ex 모드와을 사용하여 입력 할 수 Q있는 명령 줄 모드가 있습니다 q:. 새로운 vim 사용자들 사이에서 일반적인 불만은 vim을 종료하려고 할 때 실수로이 모드로 들어간다는 것입니다. 따라서 ~/.vimrc실수로 (특히 q:) 키를 누르지 않도록이 키를 비활성화합니다 .

map q: <Nop>
nnoremap Q <nop>

비록 Ex에 대한 vim 문서를 읽었으며 , 약간 숙련 된 Vim 사용자이며, 그 뒤에 숨겨진 기본 아이디어를 이해하고 있지만, 매일 vim을 사용할 때 그 사용법을 찾기 위해 고심하고 있습니다. 일반적 :으로 변경 사항이 바로 에코되지 않으므로 접두사가 붙은 표준 vim 명령 줄 명령을 입력하는 것보다 유용 하지 않습니다.

Ex는 현대 Vim에서 일상적으로 실제로 사용하고 있습니까? 표준 모드보다 Ex 모드에서 수행하기 쉬운 것이 있습니까? 커맨드 라인 모드와 EX 모드의 차이점은 무엇입니까?


13
Qq:매우 다르다. 당신은 단지 Q오른쪽을 참조하고 있습니까?
jamessan

@ jamessan, 실제로, 나는 확실하지 않은 것으로 밝혀졌습니다 ... 당신이 옳습니다. 나는 기본적으로 동일하다고 가정했지만 다른 일을하는 것처럼 보입니다. 이 질문에 대답하면 분명히 혼란 스러울 수 있으므로 명확하게 설명하는 데 도움이 될 수 있습니다.
Andrew Ferrier

이 질문은 메타대해 논의되고 있습니다.
200_success

1
@AndrewFerrier 당신은 q:구체적으로 그것에 대해 물었고 , 두 개의 주요 시퀀스 중에서 가장 문제가 많은 것으로 언급했습니다. 그리고 여기에 두 가지 답변이 올바른 용어로 검색하는 사람들에게 유용 할 수 있습니다.
Random832

4
무엇을 q/하고 무엇을 배우면 q:아마도 Vim에서 가장 유용한 명령을 고려할 것입니다. 그리고 네, 당신은 이미 그것들을 어떻게 사용하는지 알고 있습니다. 시청 이 스크린 캐스트를 찾을 수 있습니다.
Sato Katsura

답변:


81

Q찾은 것처럼 ex 모드입니다. 대화식으로 사용하는 것이 전적으로 유용하지는 않지만 Vim을 사용하여 이전 ex바이너리 를 에뮬레이트 할 수 있기 때문에 존재합니다 . 실제로 많은 시스템은 ex단순히 명령을 심볼릭 링크로 연결 하여 명령을 제공합니다 vim.

q:또는 :<C-f>명령 줄 기록을 찾아 일반 버퍼처럼 편집 할 수있는 방법을 제공합니다. 이렇게하면 이전에 실행 한 명령을 쉽게 찾고 일반 Vim 명령으로 편집 한 다음 수정 된 명령을 실행할 수 있습니다. q/q?명령은 검색 기록에 대해 동일한 기능을 제공하기 위해 존재한다.


63

Ex 모드의 Vim은 다음과 같은 경우에 유용합니다.

  • 비 대화식으로 (스크립트의 일부로) 파일을 여러 개로 편집해야합니다.
  • 작업 후 연결이 매우 느리거나 화면이 업데이트되지 않습니다.
  • 매핑 및 약어가 비활성화되었습니다.
  • 공통 키와 같은 공통 키 Escape또는 Control제대로 작동하지 않습니다.

Vim Ex Mode는 기본적으로 vi시각적 모드입니다. exVim Ex Mode는 단지 ex동일한 코드를 실행하는 것이므로 exvi 내에서 또는 그 반대로 명령 모드로 이동할 수 있습니다. 실제로 Ex 모드 ( vim -e)와 개선 된 Ex 모드의 두 가지 모드 가 있으며 vi 호환 Ex 모드 ( vim -E) 보다 고급 명령이 가능합니다 . 참조 : 예 모드와 개선 전 모드의 차이점은 무엇입니까?

예 편집자의 가족의 뿌리이다 edit, ex하고 vi. Ex는 수퍼 세트이며 ed가장 주목할만한 확장명은 디스플레이 편집 기능입니다. 예 (1)

비 대화식으로 파일을 편집하는 것이 가장 일반적인 사용법이며 사람들은 sedand와 비슷한 방식으로 파일을 사용 awk하지만 더 스트림 지향적입니다. 파일을 처음부터 끝까지 만 읽습니다 (여러 줄에서 작동하도록 설계되지 않았습니다) ) vim는 버퍼 지향적입니다. 파일을 원하는대로 앞뒤로 움직일 수있어 매우 강력합니다.

원래:

sedA는 S의 tream의 ED의 당사 홈페이지가 아닌 파일 편집기.

그럼에도 불구하고 사람들은 파일을 편집하려고 시도하여 파일을 남용하는 것처럼 보이며 사실은 파일을 편집하지 않는다는 것입니다. 둘째, in-place ( -i) 와 같은 옵션 은 비표준 FreeBSD 확장이며 다른 운영 체제에서는 사용하지 못할 수 있습니다. 따라서 이식 불가능한 코드, I / O 오버 헤드 및 부작용 (예 : 심볼릭 링크 제거)을 피 ex하려면 표준 UNIX 명령 기반 편집기 ( BashFAQ 와 함께 ed)를 사용해야 합니다.


Ex 모드에서 유용하다고 생각하는 다른 것들은 python많은 명령을 연속으로 실행, 정규 표현식 작업 / 디버깅, vim 구성 확인, 외부 명령 실행 또는 레지스터 작업 등을 수행 할 수 있는 놀이터 ( 콘솔 과 유사 )로 사용하는 것입니다. .

예를 들면 다음과 같습니다.

let @d = '<td></td>'
let @r = '<tr>' . repeat(@d, 5) . '</tr>'
echo @r
let @t = '<table>' . repeat(@r, 5) . '</table>'
reg

Ex 모드에서는 일반 모드보다 더 쉽습니다 (마지막 명령 만 볼 수 있음).


실제 사용법

내에 다음과 같은 별칭이 있습니다 .bash_aliases.

alias trim="ex +'bufdo!%s/\s\+$//e' -scxa"
alias retab="ex +'set ts=2' +'bufdo retab' -scxa"

참고 : 사용 bufdoexPOSIX 호환 방법 이 아니므로 ( manual에 따라 ) find대신 사용하는 것을 고려할 수 있습니다 . 은 !(달리 발생 경고) 저장하지 않고 버퍼를 강제 전환하는데 사용된다.

모든 소스 파일에서 후행 공백을 자르는 데 사용하는 첫 번째 파일은 다음과 같습니다.

trim **/*.php

두 번째는 모든 탭을 공백으로 재귀 적으로 변환 합니다 . 예를 들면 다음과 같습니다.

retab **/*.php

나를 위해 사용하는 retab것으로 충분하지만 여기에 설명 된 단점이 있습니다 . -V더 자세한 출력을 위해 추가하십시오 .

zsh / bash4 globbing ( **)을 사용하는 위의 예제 는 쉘이 지원하고 활성화되어 있는지 확인하십시오.

보다 실용적인 예제 (html 파일 구문 분석과 같은)를 확인하려면 다음을 확인하십시오.

Ex-mode에 대한 자세한 내용은 다음을 참조하십시오.


당신은 달성 할 간단한이 작업을 "편집 (다중) 비 대화식으로 파일"의 예를 게시하시기 바랍니다 수 ex는과보다 ed, sed또는를 awk?
Sato Katsura

1
@SatoKatsura 여러 파일을 다루는 두 가지 실용적인 사용법이 추가되었습니다.
kenorb

ex모드를 더 잘 이해하기 위해 설명서를 파고 들었습니다 . 별칭 명령 !에 뱅 ( ) 이있는 이유를 모르겠습니다 . 마지막 파일을 제외한 모든 파일의 모든 변경 사항을 포기하지 않습니까? 그렇지 않다면 왜 안됩니까? trimbufdo
와일드 카드

@Wildcard !기본적으로 버퍼가 전환 될 때마다 ex저장되지 않은 변경 사항에 대해 불평 할 때 기본적으로 작동하지 않습니다 (그리고 우리는 맨 끝에 변경 사항을 저장합니다 xa). 경고는 비활성화 할 수 있지만 추가하는 것이 훨씬 쉽습니다 !.
kenorb

알 겠어요 ... 문서를 잘못 읽고있는 것 같습니다. 그것은 것을 지정 하지 않고! 버퍼가 포기 할 수없는 경우 명령이 실패하지만 명시 적으로 지정하지 않는 !버퍼가 원인이됩니다 하지 그래서, "떨어 의미,이 경우"포기 "않습니다 .... 폐기 디스크에 기록되지 않은 것이 포함되어 있지 않기 때문에 "? 또는 무엇을? (내가보고있다 :help bufdo)
와일드 카드

18

나는 전 모드를 거의 사용하지 않지만 필요할 때 그 존재에 감사합니다.

때로는 ssh over VPN을 통해 시스템에 액세스하기 때문에 이러한 연결이 느려질 수 있습니다. 문제를 악화 시키려면 때때로 ssh 및 VPN 뒤에있는 파일 외에도 원격 연결에서 느린 직렬 연결을 통해 파일을 편집해야합니다 (9600 보드 및 많은 네트워크 대기 시간).

시각적 피드백과 화면 업데이트가 내가 보는 것이 지연되기 때문에 방해가되는 경우가 많습니다 (효과는 마이크와 대화하는 것과 비슷하지만 스포츠 경기장에서 멀리 떨어진 스피커와는 거리가.니다. 지연된 피드백으로 인해 때때로 혼동되기도합니다).

이 경우 화면이 업데이트되기를 기다리지 않고 짧은 시간에 더 많은 작업을 수행 할 수 있기 때문에 변경 사항을 에코하지 않는 것이 유용한 이점입니다.

편집을 마치면 일회성 화면 업데이트를 위해 비주얼 모드로 돌아가서 내 작업을 검토합니다. 그런 다음 완료되었으므로 전 모드로 돌아가거나 저장할 수 있습니다.


13

명령 행 창은 길고 복잡한 명령을 작성하는 데 유용합니다. 명령 기록이 창으로 열리므로 vim 탐색 또는 편집 명령 / 맵핑을 사용할 수 있습니다.

한 번 실행했지만 실수를 한 긴 대체 명령을 편집하고 싶다고 가정 해보십시오.

:%165,177s:here is a whole bunch of text I wnat to replace:here is the replacement:c

검색 문자열을 변경하기 위해 bEx 줄 과 같은 vim 모션을 사용하여 탐색 할 수는 없지만 (이 탐색에는 키 매핑이 있다고 생각하지만) 대신 대부분의 사람들은 왼쪽 화살표 키를 여러 번 누르게됩니다.

더 좋은 방법 : q:명령 행 창 k으로 이동하여 마지막 명령으로 이동하고 변경하려는 명령 부분으로 정상적인 동작으로 탐색하십시오. 문제없이 전체 단어를 바꾸고 싶을 때 : ciw.


알았어 고마워. 당신은 확실 q: 하다 전 명령 줄은? 도움말은에 의해 제기 된 모드에 대해 "Ex"라는 문구 만 사용 Q하지만 참조하는 표준 vim 편집은 지원하지 않습니다 q:. 나는 처음에 두 가지를 혼동했다는 것을 알고 있지만, 우리는 아마도 여기의 구별에 대해 분명히해야합니다.
Andrew Ferrier

1
:help q:그 문구를 사용하기로 결정하기 전에 검색 했지만 용어에 대해 혼란 스러울 수 있습니다.
bsmith89

1
이 용어에 대해서도 혼란스러워했습니다. 나는 보통 Ex 명령을 다음과 같이 입력하는 것에 대해 이야기 :하지만, 잘못 사용할 수 있습니다.
bsmith89

3
대답의 내용은 모두 정확하지만 용어를 사용하는 방식은 약간 혼란 스럽습니다. 나는 당신이 문서를 약간 잘못 해석하고 있다고 생각합니다. q:Ex 명령 줄을 열지 않습니다. 현재 및 이전 Ex 명령을 편집 할 수있는 명령 기록 창을 엽니 다 . Ex 명령 줄은 :일반 모드에서 눌렀을 때 나타납니다 .
Rich

3
FWIW Vim 문서는 모든 :명령이 'Ex'명령 이라고 말하는 곳에서도 약간 혼란 스럽습니다 . IMHO는 실제로 Ex에서 실제로 사용 가능한 명령 만 Ex 명령으로 간주해야합니다.
Rich

6

나는 맹인이 된 부분 시력을 가진 사람이 전직으로 전환하고 있다고 들었습니다. 저는 vi보다 상당히 나이가 많았으며 오래 전에 ed에서 ex로 전환했습니다 (예, "ed는 표준 편집기"입니다). 내가 vi 모드에서하는 유일한 일은 Lisp 코드를 작성할 때 parens와 일치시키기 위해 % 수신 거부하는 것입니다.


이 인터뷰를 상기시켜 줍니다. ex그래도 구체적으로 언급 되었는지 는 기억 나지 않습니다 .
Martin Tournoij

훌륭한 통찰력, 나는 이것을 결코 생각하지 않았을 것입니다. 대단히 감사합니다.
Andrew Ferrier

2

여기에 이미 언급 된 사용법 외에도, ex는 Linux 콘솔에서 파일이 S / 390 플랫폼에 있고 콘솔이 화면 지향이 아니라 라인 지향 인 경우 파일을 편집하는 방법이기도합니다.


0

Ex 모드가 실제로 사용됩니까?

아마 아닙니다. 그러나 Ex 모드로 들어가는 것이 실제로 유용하지는 않지만 Ex 명령을 배우는 것은 여전히 ​​유용합니다. 특히 :g/글로벌 명령 과 함께 ex 편집 명령을 사용 하여 일치하는 행에서 작동 하기 때문 입니다.


-1

원래 "ex"는 Unix에서 "ed"텍스트 편집기의 업그레이드 버전입니다. 2BSD에는 비주얼 모드가 추가되었고 새로운 편집기는 "vi"로 불 렸습니다.

ex 명령 줄을 사용하려면 ":"키를 사용하여 명령 모드로 전환합니다. 그래서 가장 잘 이해하면 ex는 실제로 향수가 없습니다. 명령 모드를 제공하는 부분입니다.

삽입 모드로 들어갈 수도 있습니다

 :i 

그런 다음 "텍스트를 입력하고 입력하십시오. ^ c로 종료하십시오. 또는 하나의 명령 행에 모두 입력하십시오.

 :i my multiline text \with a second line.^c

1
점을 감안 전 모드 로 꽤 같은 일이 아니다 명령 줄 모드 ,이 질문에 대답하지 않는 것 같습니다. 추가 참고 사항으로, 명령 모드 는 명령 행 모드가 아니라 일반 모드와 불행한 동의어입니다.
8bittree

"명령 모드"포인트가 사용되었습니다. 변명, 우리가 새로운 추가를 vi로 바꾸었을 때 우리는 "command"와는 반대로 "visual"(현재 vim visual 모드가 아님)로 들어가게되었습니다. 반면에 명령 행은 ex와 동일한 do_cmdline ()을 호출하는 것 같습니다. 그것이 내가 인정하는 "실제 사용"을 암시하는 것은 아니다.
if2
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.