일괄 처리를위한 EX 모드는 무엇입니까?


20

자습서 에서는 Ex 모드가 배치 처리를위한 것이라고 언급합니다. 그것은 도구가 아니라 귀찮은 것이므로 실용적인 예를보고 싶습니다. 누가 사용합니까? 왜?

일괄 처리를위한 EX 모드는 무엇입니까?


@Masi : 계정을 연결하여 마이그레이션 후 마이그레이션 된 게시물이 SU 계정과 연결됩니다.
Greg Hewgill

답변:


4

Ex 모드의 Vim (이라고도 함 ex)은 다음 과 같은 경우에 유용합니다.

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

비 대화식으로 파일을 편집하는 것이 가장 일반적인 사용법이며 사람들은 sedand와 비슷한 방식으로 파일을 사용 awk하지만 더 스트림 지향적입니다. 파일 vim은 버퍼 지향적이며 처음부터 끝까지 만 읽습니다. 앞뒤로 이동할 수 있습니다. 원하는대로 파일에. 두 번째로 vim의 정규 표현식은 awk 및 sed의 표현식보다 강력합니다 (여러 줄에서 작동하도록 설계되지 않았습니다). 예를 들어 vim은 여러 줄에서 일치하고 0 일치를 지원합니다.

Ex는 또한 편집자 (vi의 직계)이며 Vim-Ex Mode 에뮬레이션 ex(여전히 동일한 코드를 실행)이므로 exvi 내에서 또는 그 반대로 명령 모드로 이동할 수 있습니다. Ex 모드 ( vim -e) 및 개선 된 Ex 모드가있어 vi 호환 Ex 모드 ( vim -E) 보다 고급 명령이 가능합니다 . 참조 : 예 모드와 개선 전 모드의 차이점은 무엇입니까?

Ex는 편집자, ex 및 vi의 편집자 그룹의 근본입니다. Ex는 수퍼 세트입니다. 가장 주목할만한 확장명은 디스플레이 편집 기능입니다. 예 (1)


실시 예 1

여기에 변화의 간단한 예제 127128귀하의 hosts파일과 출력을 인쇄는 :

ex -s +%s/127/128/g +%p +q! /etc/hosts

다음과 같습니다.

sed s/127/128/g /etc/hosts

고급 솔루션의 경우 vim 명령이 포함 된 파일을 가지고보다 전통적인 I / O 리디렉션 접근 방식으로 사용할 수 있습니다.

echo :%s/127/128/g > cmds.vim
echo :%print >> cmds.vim
echo :%quit! >> cmds.vim
ex -s /etc/hosts < cmds.vim # The same as: vim -s cmds.vim /etc/hosts

실시 예 2

vim 플러그인을 사용하여 일부 작업을 수행 할 수도 있습니다.

예를 들어, 다음의 단일 라이너는 표준 플러그인 중 하나를 사용하여 소스 코드 파일을 html로 변환합니다.

ex -s '+let g:html_no_progress=1' '+syntax on' '+set ft=c' '+runtime syntax/2html.vim' -cwqa my_code.c

웹 사이트에 인쇄하거나 게시 할 준비가 된 코드 (지원되는 언어로 작성)에서 html 파일 (구문 강조 표시 사용)을 생성합니다.


실시 예 3

또는 RPM 사양 의 실제 실제 예 :

vim -E -s Makefile <<-EOF
   :%substitute/CFLAGS = -g$/CFLAGS =-fPIC -DPIC -g/
   :%substitute/CFLAGS =$/CFLAGS =-fPIC -DPIC/
   :%substitute/ADAFLAGS =$/ADAFLAGS =-fPIC -DPIC/
   :update
   :quit
EOF

실시 예 4

다음 스크립트는 예제 사이트의 html을 다운로드하고 자동 생성 된 20x20 테이블로 본문을 임의의 숫자로 바꾸어 새 html 파일을 만듭니다.

" table.vim
%!curl -s example.com 
let @t='<table>'.repeat('<tr>'.repeat('<td>_</td>',20).'</tr>',20).'</table>'
/<body
norm!vitd"tP
%s/_/\=system('echo $RANDOM')/g
wq

용법:

ex -s table.html < table.vim

이것은 curl이 설치된 시스템과 같은 * nix에서 작동합니다. -V작동중인 스크립트를 보려면 추가 하십시오.

더 많은 예 :


또한보십시오:


22

Ex-Mode는 대부분 여러 파일에 대해 동일한 작업을 수행하기위한 것입니다.

25 개의 .html 파일이 모두 있다고 가정 해 보겠습니다.

<a href="/superuser//home.html"> ...

각각을 여는 대신 Ex-mode를 사용하여 다음과 같이 변경할 수 있습니다 index.html.

vim -E -s bob.html <<-EOF
   :%substitute/home.html/index.html/
   :update
   :quit
EOF

7
완전하고 간결한 구현은 다음과 같습니다 for file in *.html; do vim -es -c '%s/home\.html/index.html/g' -c wq "$file"; done.
intuited

6

지속적인 실행 취소 지원으로서 최근 7.3에서, ex 모드 및 다른 형태의 vim 일괄 처리는 실행 취소 이력을 방해하지 않기 때문에 다른 비 vim 방법보다 우수합니다.

추가 : '영구 실행 취소'를 활성화하면 vim 편집 세션에서 실행 취소 기록의 파일에 대한 모든 변경 사항을 최대 한도로 유지합니다. 파일이 외부 프로그램에 의해 편집되면, vim은 변경된 체크섬에 의해 감지 될 때 실행 취소 히스토리를 재설정합니다. vim -E를 사용하면 파일을 일괄 편집 할 수 있으며 편집 내용은 실행 취소 기록에 있습니다.


2
이것은 꽤 많이 가져온 것처럼 보이지만 합리적이고 영리합니다. +1
Tarrasch

1

이것은 일괄 처리에 대한 귀하의 질문에 대답하지 않지만 Ex 모드가 무엇인지 설명하는 또 다른 방법입니다. 당신은 어떻게 누르는지 압니다:명령 행 모드로 들어가서 명령을 입력하려면? Well Ex 모드에서는 명령을 입력 한 후 Vim이 Ex 모드를 종료하지 않고 Ex 모드를 유지하고 다른 명령을 입력 할 수 있다는 점을 제외하고 동일한 명령을 입력 할 수 있습니다. 그래서 그것은 일종의 REPL (읽기, 평가, 인쇄, 루프)과 같지만 인쇄가 없습니다 (따라서 REL ...). 나중에 왜 그런 종류의 REL을 원하는지 다시 설명하겠습니다. 이것이 Ex 모드라고하는 이유입니다. 명령 행 모드와 같은 Ex 명령을 입력 할 수 있으며 Ex 명령을 입력 할 수 있습니다. 그것을 설명하는 또 다른 방법은 Vimscript / VimL 코드를 입력하고 즉시 실행할 수 있다는 것입니다. Vimscript / VimL는 Vim 플러그인을 작성하는 데 사용할 수있는 언어입니다. 또한 구성 파일 (.vimrc)을 작성하는 데 사용되는 언어이기도합니다. 명령 줄 모드 또는 Ex-mode에서 Ex 명령을 입력 할 때 사용하는 언어이기도합니다. 따라서 이러한 관점에서 Ex 모드는 VimL REL로 볼 수 있습니다. VimL REL을 왜 원하십니까? 같은 이유로 사람들은 다른 언어의 REPL을 좋아합니다. 특히 VimL에서 플러그인을 작성하거나 구성 파일을 사용자 정의하는 경우 코드를 디버깅하거나 언어를 실험하는 데 실제로 도움이 될 수 있습니다. 플러그인).


전 모드의 유용성을 보여주는 비디오로 몇 가지 예를 얻는 것이 좋습니다. 리눅스 창 관리자와 vim의 비주얼 모드 :!python등을 사용할 수 있기 때문에 나는 그것을 결코 깨닫지 못했다 .
Léo Léopold Hertz 준영
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.