메뉴

문서정보

원문 : http://applications.linux.com/article.pl?sid=06/10/10/2123208&from=rss

Vim으로 외부명령어 실행하기

쉘로 빠져나가기

vim은 매우 강력하지만 또한 그만큼 복잡한 에디터이기도 하다. vim의 강력함을 제대로 이해하려면 수많은 숨겨진 기능들을 익혀야 한다. 이 문서는 이러한 숨겨진(혹은 잘 알려지지 않은)기능중 외부명령어를 실행하는 방법에 대해서 알아보도록 하겠다. vim은 단순히 외부명령을 실행시키는 외에도, 다양한 일들을 할 수 있다.

:shell 혹은 :sh를 이용해서 shell(:12)로 빠져나갈 수 있다. exit 혹은 Ctrl+D를 이용해서 vim으로 되돌아올 수 있다.

또한 Ctrl+z를 이용해서 쉘로 빠져나갈 수 있다. 이경우 Vim은 백그라운드 상태가 되는데, fg 명령을 이용해서 vim으로 되돌아갈 수 있다(븍그라우드로 빠져나가는 기능은 쉘에서 지원하는 기능이다.).

쉘로 빠져나가지 않고 외부명령어 실행

또한 vim은 쉘로 빠져나가지 않고서도 느낌표 (!)를 이용해서 쉘명령을 실행시킬 수 있다.
:! wc index.html
wc 는 문서의 단어와 라인수를 구하는 프로그램이다. 위와 같은 방법으로 굳이 쉘로 빠져나가지 않고서도 index.html파일의 단어와 라인수를 조사할 수 있다. 또다른 응용으로, 여러분이 Perl등의 스크립트를 작성하고 있을 때, vim에서 스크립트가 제대로 작성되었는지 직접확인 할 수도 있다. my.pl이라는 Perl 스크립트를 만들었다면, 다음과 같이 Vim 상에서 테스트 가능하다.
:! ./% 혹은 :! ./my.pl
%는 자기자신을 가리킬때 사용한다. 이렇게 해서 스크립트를 만들게 되면, 필요할 때 즉시 테스트를 할 수 있다. 다음과 같이 하면 가장 최근에 실행한 명령을 재 실행하게 된다. 타이핑에 걸리는 시간을 절약할 수 있을 것이다.
:! !

명령어 실행결과를 출력하기

느낌표를 사용하면 간편하게 명령을 실행할 수 있지만, 명령의 실행결과가 쉘에 표준출력 되어버린다는 문제가 발생한다. 이럴경우 출력결과물을 편집기에 불러오려면, 마우스를 이용한 copy & paste를 해야 한다. 다행 스럽게도 Vim은 표준출력(:12)을 에디터에 바로 복사하는 기능을 가지고 있다.
:r ! ls -al /home/yundream
위와 같이 하면 ls -al /home/yundream 명령의 실행결과가 vim 에디터 화면에 저장이 된다. 이 기능을 잘 이용하면 웹페이지의 내용을 쉽게 긁어와서 편집할 수도 있다.
:r ! w3m http://en.wikipedia.org/wiki/Vi -dump
w3m(:12)은 텍스트 기반 브라우저다. -dump 옵션을 이용하면 브라우징한 웹페이지의 내용을 화면에 뿌려주게 되는데, 위와 같은 방식으로 vim에디터로 내용을 직접 불러와서 편집할 수 있다.

뿐만 아니라 pipe(:12)의 사용도 가능하다.
:r ! ls -1 /home/yundream | sort(:1) -r

다음과 같이 grep한내용을 에디터로 불러오는 식의 응용은 유용하게 사용할 수 있을 것이다.
:r ! grep string /var/log/apache2/site-error.log

쉘 바꾸기

당신이 리눅스 사용자라면 아마도 bash쉘을 사용하고 있을 것이다. 그러나 쉘을 바꾸고 싶은 경우가 생길 수 있다. 우선은 현재 사용중인 쉘을 확인해야 할건데, 다음과 같이 확인 가능하다.
:set shell ?

그러면 Vim은 shell=/bin/bash 와 같은 출력결과를 보여줄 것이다. 만약 bash대신 csh를 사용하고 싶다면, 다음과 같이 하면 된다.
:set shell=/usr/bin/csh