이 자습서 에서는 Ex 모드가 배치 처리를위한 것이라고 언급합니다. 그것은 도구가 아니라 귀찮은 것이므로 실용적인 예를보고 싶습니다. 누가 사용합니까? 왜?
일괄 처리를위한 EX 모드는 무엇입니까?
이 자습서 에서는 Ex 모드가 배치 처리를위한 것이라고 언급합니다. 그것은 도구가 아니라 귀찮은 것이므로 실용적인 예를보고 싶습니다. 누가 사용합니까? 왜?
일괄 처리를위한 EX 모드는 무엇입니까?
답변:
Ex 모드의 Vim (이라고도 함 ex
)은 다음 과 같은 경우에 유용합니다.
비 대화식으로 파일을 편집하는 것이 가장 일반적인 사용법이며 사람들은 sed
and와 비슷한 방식으로 파일을 사용 awk
하지만 더 스트림 지향적입니다. 파일 vim
은 버퍼 지향적이며 처음부터 끝까지 만 읽습니다. 앞뒤로 이동할 수 있습니다. 원하는대로 파일에. 두 번째로 vim의 정규 표현식은 awk 및 sed의 표현식보다 강력합니다 (여러 줄에서 작동하도록 설계되지 않았습니다). 예를 들어 vim은 여러 줄에서 일치하고 0 일치를 지원합니다.
Ex는 또한 편집자 (vi의 직계)이며 Vim-Ex Mode 에뮬레이션 ex
(여전히 동일한 코드를 실행)이므로 ex
vi 내에서 또는 그 반대로 명령 모드로 이동할 수 있습니다. Ex 모드 ( vim -e
) 및 개선 된 Ex 모드가있어 vi 호환 Ex 모드 ( vim -E
) 보다 고급 명령이 가능합니다 . 참조 : 예 모드와 개선 전 모드의 차이점은 무엇입니까?
Ex는 편집자, ex 및 vi의 편집자 그룹의 근본입니다. Ex는 수퍼 세트입니다. 가장 주목할만한 확장명은 디스플레이 편집 기능입니다. 예 (1)
여기에 변화의 간단한 예제 127
에 128
귀하의 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
vim 플러그인을 사용하여 일부 작업을 수행 할 수도 있습니다.
예를 들어, 다음의 단일 라이너는 표준 플러그인 중 하나를 사용하여 소스 코드 파일을 html로 변환합니다.
ex -s '+let g:html_no_progress=1' '+syntax on' '+set ft=c' '+runtime syntax/2html.vim' -cwqa my_code.c
웹 사이트에 인쇄하거나 게시 할 준비가 된 코드 (지원되는 언어로 작성)에서 html 파일 (구문 강조 표시 사용)을 생성합니다.
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
다음 스크립트는 예제 사이트의 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
작동중인 스크립트를 보려면 추가 하십시오.
더 많은 예 :
또한보십시오:
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
for file in *.html; do vim -es -c '%s/home\.html/index.html/g' -c wq "$file"; done
.
지속적인 실행 취소 지원으로서 최근 7.3에서, ex 모드 및 다른 형태의 vim 일괄 처리는 실행 취소 이력을 방해하지 않기 때문에 다른 비 vim 방법보다 우수합니다.
추가 : '영구 실행 취소'를 활성화하면 vim 편집 세션에서 실행 취소 기록의 파일에 대한 모든 변경 사항을 최대 한도로 유지합니다. 파일이 외부 프로그램에 의해 편집되면, vim은 변경된 체크섬에 의해 감지 될 때 실행 취소 히스토리를 재설정합니다. vim -E를 사용하면 파일을 일괄 편집 할 수 있으며 편집 내용은 실행 취소 기록에 있습니다.
이것은 일괄 처리에 대한 귀하의 질문에 대답하지 않지만 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에서 플러그인을 작성하거나 구성 파일을 사용자 정의하는 경우 코드를 디버깅하거나 언어를 실험하는 데 실제로 도움이 될 수 있습니다. 플러그인).
:!python
등을 사용할 수 있기 때문에 나는 그것을 결코 깨닫지 못했다 .