*usr_21.txt* Vim version 7.4 대상. 새로 고침: 2012년 11월 2일 VIM 사용설명서 - Bram Moolenaar 저 정지용 역 나갔다가 되돌아오기 이번 장에서는 Vim과 다른 프로그램을 섞어서 써보겠습니다. Vim 안에서 프로그램을 실행시킬 수도 있고, 잠시 Vim을 나갔다가 다시 되돌아올 수도 있습니다. Vim의 상태를 저장했다가 나중에 불러오는 방법도 주요 내용입니다. |21.1| 중지하기와 다시 시작하기 |21.2| 셸 명령어 실행하기 |21.3| 정보 기억하기, viminfo |21.4| 세션 |21.5| 뷰 |21.6| 모드 줄 다음 장: |usr_22| 편집할 파일 찾기 이전 장: |usr_20| 명령줄 명령 빨리 치기 차례: |usr_toc|
*21.1* 중지하기와 다시 시작하기 대부분의 유닉스 프로그램과 마찬가지로 Vim도CTRL-Z
로 중지시킬 수 있습니다. Vim이 중지되면 Vim이 실행된 원래의 셸로 돌아갑니다. 필요한 작업을 마친 후, "fg" 명령어로 Vim을 다시 시작할 수 있습니다.
CTRL-Z
{셸 명령어들을 실행}
fg
아무것도 바뀌지 않은 채, 떠날 때 상태 그대로 돌아옵니다.
CTRL-Z
가 동작하지 않을 경우에는 ":suspend" 명령을 사용해도 됩니다. 꼭 잊지 말고 Vim을 다시 시작하십시오. 그렇지 않으면 편집한 내용이 사라질 수도 있습니다! 이 기능은 유닉스에서만 제대로 지원됩니다. 다른 시스템에서는 Vim이 새로운 셸을 구동할 것입니다. 여기서도 셸 명령어들을 실행할 수는 있지만, Vim을 /행한 셸이 아닌 새로 만들어진 셸입니다. GUI 환경에서는 Vim을 실행한 셸로 돌아갈 수 없으므로, 대신CTRL-Z
가 눌리면 Vim 창을 최소화합니다.
*21.2* 셸 명령어 실행하기 셸 명령어 하나를 실행하려면 ":!{명령어}
"를 하십시오. 예를 들어 디렉터리의 파일들을 보려면:
:!ls
:!dir
유닉스에서는 윗줄대로, 마이크로소프트 윈도에서는 아랫줄대로 하면 됩니다. Vim이 프로그램을 실행합니다. 실행이 끝나면 편집 중이던 화면으로 돌아가기 전
<Enter>
키를 누르라는 프롬프트가 나타나는데, 이때 실행한 프로그램의 결과를 살펴볼 수 있습니다. "!"는 프로그램의 실행이 필요한 다른 위치에도 쓰입니다. 간단하게 살펴보도록 하겠습니다: :!{program}
{program}
실행 :r !{program}
{program}
실행 후 결과를 문서에 끼워 넣음 :w !{program}
{program}
실행 후 문서를 입력으로 넣음 :[range]
!{program}
[range]
범위에 대해{program}
실행 후 결과로 대체 "!{program}
"앞에 범위를 넣으면 실행방법이 크게 바뀌는데 주의하십시오. 범위가 없으면 그냥 실행될 뿐이지만, 범위가 지정되는 경우 문서의 내용이 프로그램에 의해 변환됩니다. 이런 방식으로 여러 개의 셸 명령어를 실행할 수도 있지만, 셸에서 직접 실행하는 것보다는 불편한 것이 사실입니다. 다음 명령으로 새로운 셸을 시작할 수도 있습니다:
:shell
이 명령은
CTRL-Z
로 Vim을 중지하는 것과 유사하지만, 새로운 셸을 구동한다는 것이 차이점입니다. GUI를 사용 중이라면 셸은 Vim창을 입/출력용으로 사용할 것입니다. Vim은 터미널 프로그램이 아니기 때문에, 완벽하게 동작하지는 않지만, 혹시 문제가 생긴다면 'guipty' 옵션을 바꿔보십시오. 만약 그래도 제대로 동작하지 않는다면, 셸을 실행시킬 수 있는 새로운 터미널을 여십시오. 예를 들어 다음과 같이 하면 됩니다::!xterm&
*21.3* 정보 기억하기, viminfo 한참 편집을 하고 나면, 레지스터에 이런 저런 텍스트가 들어있을 것이고, 여러 파일에 마크도 되어있을 것이며, 명령어 히스토리는 복잡하게 짜인 명령어들로 가득 차 있을 것입니다. Vim을 나가면 이런 정보가 모두 사라져 버립니다. 하지만 다시 복구할 수 있습니다! viminfo 파일에는 다음 상태 정보들이 저장됩니다: 명령줄과 찾기 패턴 히스토리 레지스터의 문자열들 여러 파일의 마크들 버퍼 목록 전역 변수들 Vim을 나갈 때마다, 이런 정보들이 바로 viminfo파일에 저장됩니다. Vim은 다시 시작될 때, viminfo 파일을 읽어서 정보들을 다시 채웁니다. 'viminfo' 옵션의 기본 값은 제한된 수의 정보만 복구하도록 되어있습니다. 더 많은 정보를 기억하도록 하고 싶다면, 다음 명령을 사용하십시오:
:set viminfo=문자열
어떤 정보를 저장할지 문자열로 설정합니다. 문자열에는 각 설정문자와 인자가 차례대로 들어가고, 각 설정/인자 쌍은 콤마로 구분됩니다. viminfo 문자열을 어떻게 만드는지 살펴봅시다. 먼저, ' 설정은 마크(a-z)를 저장할 파일의 수를 나타냅니다. 적절한 숫자(예를 들어 1000)를 골라봅시다. 다음과 같은 명령이 됩니다:
:set viminfo='1000
f 설정은 전역 마크(A-Z와 0-9)를 저장할 지를 나타냅니다. 0이면 저장하지 않고, 1이거나 지정하지 않으면 마크를 저장합니다. 저장하기 원한다면 다음과 같이 하면 됩니다:
:set viminfo='1000,f1
다음으로 < 설정은 각 레지스터에 몇 줄까지 저장할 지를 나타냅니다. 기본 값은 몇 줄이든 저장하는 것입니다. 0으로 지정하면 하나도 저장되지 않습니다. viminfo파일에 수천 줄의 내용이 저장되는 것을 피하려면(쓰지도 않을 내용 때문에 Vim을 시작하는 데 오래 걸리게 될 수도 있으므로) 500 줄 정도까지만 저장합시다:
:set viminfo='1000,f1,<500
이 외에도 다음과 같은 설정들이 있습니다: : 명령어 히스토리로 저장할 줄 수 @ 입력 줄 히스토리로 저장할 줄 수 / 찾기 히스토리로 저장할 줄 수 r 마크를 저장하지 않을 이동식 미디어 경로(여러 번 지정할 수 있습니다) ! 대문자로 시작하고, 소문자를 갖지 않는 전역 변수들 h 시작 시 'hlsearch' 강조를 사용하지 않음 % 버퍼 목록(Vim이 파일 인자 없이 시작되었을 경우) c 문자열을 'encoding'으로 변환 n viminfo 파일의 이름(마지막 설정이어야 함) 더 자세한 설명은 'viminfo' 옵션과 |viminfo-file
|을 참고하십시오. Vim을 여러 번 실행하는 경우에는, 마지막으로 종료된 Vim의 설정이 저장됩니다. 각 정보는 단 한 번만 저장되므로, 이 때문에 기존에 저장되었던 내용이 지워질 수 있습니다. 작업하던 곳으로 돌아오기 ------------------------ 파일 하나의 작업을 반쯤 했는데, 그만두고 놀러가야 한다고 합시다. Vim을 나가서 모든 것을 잊고 한참 놀다가 돌아온 후, 다음 명령을 사용하세요:'0
Vim을 나갈 때 작업하던 곳으로 돌아왔을 것입니다. Vim은 종료될 때마다 마크를 만듭니다. 가장 마지막 것이 '0이 됩니다. '0에 있던 것은 '1이 되고, '1은 '2가 되는 식입니다. '9에 있던 마크는 사라집니다. |
:marks
| 명령어는 '0에서부터 '9까지의 위치를 보여줍니다. 다른 파일로 돌아오기 -------------------- 최근에 편집한 파일로 돌아오고 싶은데, Vim을 나갈 때 그 파일은 아니었다면, 약간 더 복잡한 방법이 있습니다. 다음 명령으로 파일들의 목록을 볼 수 있습니다:
:oldfiles
1: ~/.viminfo
2: ~/text/resume.txt
3: /tmp/draft
만약 목록에서 앞에 "2:"가 붙은 두 번째 파일을 편집하고 싶다고 합시다. 다음과 같이 입력하세요:
:e #<2
":e" 대신 파일명을 인자로 하는 어떤 명령이든 쓸 수 있습니다. "#<2"는 "%" (현재 파일명)나 "#"(교대 파일명)과 같은 자리에 들어갑니다. 따라서 세 번째 파일을 창을 나누어 편집하려면:
:split #<3
#<123 을 쓰는 건 파일 좀 편집하는 건데 복잡하지요? 다행히도 더 간단한 방법이 있습니다:
:browse oldfiles
1: ~/.viminfo
2: ~/text/resume.txt
3: /tmp/draft
-- 더 -- |:oldfiles
|와 동일한 파일 목록이 나옵니다. 만약 "resume.txt"를 편집하고 싶다면, 먼저 "q"를 눌러서 출력을 멈춥니다. 그러면 다음과 같은 프롬프트가 나옵니다:숫자 입력후
"2"를 입력한 후<엔터>
(숫자없으면 취소):<Enter>
를 누르고, 두 번째 파일을 편집하면 됩니다. 더 자세한 내용은 |:oldfiles
|, |v:oldfiles
|, |c_#<
|를 확인하세요. 하나의 Vim에서 다른 Vim으로 이동하기 ------------------------------------ ":wviminfo"와 ":rviminfo"를 사용해서 Vim이 수행 중일 때도 정보들을 저장하거나 불러올 수 있습니다. 이 명령들은 두 개의 Vim 사이에 레지스터 내용을 바꿀 필요가 있을 때 유용합니다. 예를 들어, 첫 번째 Vim에서 다음 명령을 수행합니다::wviminfo! ~/tmp/viminfo
두 번째 Vim에서는:
:rviminfo! ~/tmp/viminfo
당연히 "w"는 쓰기(write)를 의미하고, "r"은 읽기(read)를 의미합니다. ":wviminfo"의 ! 문자는 기존에 있는 파일을 덮어쓰도록 지정합니다. 만약 !가 없고 파일이 이미 존재하고 있었다면, 정보는 하나의 파일로 통합됩니다. ":rviminfo"의 ! 문자는 모든 정보를 읽어오도록 합니다. 이 경우 기존의 정보가 덮어 쓰일 수도 있습니다. !가 없다면 현재 설정되지 않은 정보들만 읽어 들입니다. 이 명령들은 정보를 저장했다가 나중에 다시 쓰기 위해 사용할 수도 있습니다. viminfo를 저장하기 위한 디렉터리를 만들고, 그때그때 목적에 따라 여러 viminfo파일에 저장할 수도 있을 것입니다.
*21.4* 세션 편집 중인 작업이 있는데, 하루 일을 끝마쳐야 한다고 해봅시다. 일단은 작업을 멈추고 내일 계속하고 싶을 텐데요. 이럴 때는 편집중인 세션을 저장했다가, 내일 다시 불러올 수 있습니다. Vim 세션(session)은 현재 작업 중인 모든 정보를 갖고 있습니다. 파일 목록이나 창 구성, 전역변수와 갖가지 설정 등을 모두 포함합니다. (실제로 무엇이 저장되는지는 아래에서 살펴볼 'sessionoptions'에 따라 달라집니다.) 아래 명령은 세션 파일을 만듭니다:
:mksession vimbook.vim
저장한 세션을 불러오고 싶다면 다음 명령을 사용하십시오:
:source vimbook.vim
다음 명령을 써서 Vim을 시작할 때 세션을 불러올 수도 있습니다:
vim -S vimbook.vim
위 명령은 Vim을 시작할 때 특정 파일을 읽어오도록 지정합니다. 'S'는 세션(session)을 의미합니다 (사실, -S 로 ":source"처럼 다른 Vim 스크립트 파일도 읽어와 실행시킬 수 있으므로 "source"를 의미한다고 볼 수도 있습니다). 열려있던 창들이 정확히 같은 위치와 같은 크기로 다시 만들어집니다. 매핑이나 옵션 값들도 그대로입니다. 정확히 무엇이 복원되는지는 'sessionoptions' 옵션으로 지정합니다. 기본 값은 "blank,buffers,curdir,folds,help,options,winsize"입니다. blank 빈 창을 유지함 buffers 창에 열려있지 않은 버퍼들도 유지함 curdir 현재 디렉터리 folds 폴드, 직접 만든 것 포함 help 도움말 창 options 모든 옵션과 매핑들 winsize 창 크기 원하는 대로 이 설정을 바꾸면 됩니다. 예를 들어 Vim 전체의 크기도 복원하고 싶다면:
:set sessionoptions+=resize
여기 세션, 저기 세션 -------------------- 세션이 쓰이는 대표적인 경우는 여러 프로젝트를 번갈아가며 작업해야 할 때 입니다. 세션 파일을 "~/.vim" 디렉터리에 저장한다고 해봅시다. "비밀" 프로젝트 작업을 하다가 "지루함" 프로젝트로 바꾸려면 다음과 같이 하면 됩니다:
:wall
:mksession! ~/.vim/비밀.vim
:source ~/.vim/지루함.vim
먼저 ":wall"로 모든 수정사항을 저장합니다. 그 다음의 ":mksession!"로 모든 세션을 저장했습니다. 만약 이미 저장된 세션이 있더라도 덮어 쓰입니다. 다음에 "비밀" 세션을 불러올 때, 현재 상태 그대로 작업을 계속할 수 있을 것입니다. 그리고 "지루함" 세션을 불러왔습니다. 만약 도움말 창도 열고, 또 창을 나누고, 닫고 하다가 창 구성이 지저분해 졌다면, 마지막에 저장된 세션을 불러와서 간단히 정리할 수 있습니다:
:source ~/.vim/지루함.vim
따라서 적절히 세션으로 현재 상태를 저장하고, 이 세션 파일을 불러와 시작함으로써 다음 작업을 다시 시작할 때 어떤 상태에서 시작할 것인지 선택할 수 있습니다. 세션을 쓰는 다른 방법 중 하나는 쓰고 싶은 창 구성을 하나 만들고, 이를 세션으로 저장하는 것입니다. 그러면 언제든지 이 구성으로 돌아갈 수 있습니다. 예를 들어, 다음과 같이 멋진 창 구성을 만들었습니다: +----------------------------------------+ |
VIM - 도움말 시작 파일
| || |
돌아다니기: 화살표키를 사용하거나, "h"
| |help================================
| |탐색기
| | |디렉터리
|~ | |디렉터리
|~ | |파일
|~ | |파일
|~ | |파일
|~ | |파일
|~ | |~/=========
|[파일 없음]=================| || +----------------------------------------+ 이 구성은 도움말 창을 위쪽에 두고 읽을 수 있도록 하고, 왼쪽의 좁은 수직 창은 파일 탐색기를 연 것입니다. 이 탐색기는 디렉터리 내용을 보여주는 Vim 플러그인입니다. 이 탐색기에서 편집할 파일을 찾을 수 있는데, 자세한 내용은 다음 장을 보시기 바랍니다. 이 화면 구성은 다음 명령들로 만들 수 있습니다:
:help
CTRL-W
w:vertical split ~/
원하는 대로 창 크기를 조절하면 됩니다. 그리고 세션을 다음과 같이 저장합니다:
:mksession ~/.vim/내창구성.vim
Vim을 다음과 같이 시작하여 언제든 저장한 창 구성을 불러올 수 있습니다:
vim -S ~/.vim/내창구성.vim
힌트: 탐색기에서 파일을 빈 창으로 열려면, 커서를 파일명으로 옮긴 후, "O"를 누르면 됩니다. 마우스로 더블클릭을 해도 됩니다. 유닉스와 마이크로소프트 윈도 ---------------------------- 마이크로소프트 윈도와 유닉스를 번갈아가며 사용해야할 수도 있습니다. 그렇다면 'sessionoptions'에 "slash"와 "unix"를 추가하십시오. 세션 파일이 양쪽 플랫폼 모두에서 사용할 수 있는 형태로 저장될 것입니다. 다음 명령을 vimrc 파일에 추가하면 됩니다:
:set sessionoptions+=unix,slash
마이크로소프트 윈도 Vim은 유닉스 포맷 세션 파일을 읽고 쓸 수 있지만, 유닉스 Vim은 마이크로소프트 윈도 포맷을 읽지 못하므로, Vim은 유닉스 포맷을 사용할 것입니다. 마찬가지로 마이크로소프트 윈도 Vim은 /를 파일 경로 구분자로 인식할 수 있지만, 유닉스 Vim은 \를 인식하지 못합니다. 세션과 viminfo -------------- 세션은 많은 정보를 저장하지만, 마크나 레지스터의 내용, 명령어 히스토리는 저장하지 않습니다. 이런 정보들은 viminfo 기능을 써야 저장할 수 있습니다. 대부분의 경우에는 세션과 viminfo를 함께 사용하지 않습니다. 따라서 다른 세션으로 바꾸더라도 명령어 히스토리는 유지됩니다. 또 한 세션에서 레지스터에 복사한 내용은 다른 세션에서 붙여 넣을 수 있습니다. 하지만 때로는 이러한 정보들을 세션과 함께 저장하고 싶을 수도 있습니다. 이 때는 다음과 같이 직접 둘 다 저장을 하면 됩니다:
:mksession! ~/.vim/비밀.vim
:wviminfo! ~/.vim/비밀.viminfo
그리고 다음과 같이 불러오면 됩니다:
:source ~/.vim/비밀.vim
:rviminfo! ~/.vim/비밀.viminfo
*21.5* 뷰 세션은 Vim 전체의 모양을 저장합니다. 뷰는 창 하나의 속성을 저장할 때 사용 합니다. 뷰는 파일 하나를 일정한 방법으로 편집할 때 사용됩니다. 예를 들어, 'number' 설정으로 줄 번호를 보이게 했고, 폴드도 몇 개 만들었다고 합시다. 세션과 마찬가지로 이 정보를 뷰에 저장했다가 나중에 다시 불러올 수 있습니다. 사실, 세션을 저장한다는 것은 각 창의 뷰를 저장하는 것입니다. 뷰를 사용하는 방법에는 크게 두 가지가 있습니다. 첫 번째 방법은 Vim이 알아서 뷰 파일의 이름을 정하도록 하는 것입니다. 나중에 같은 파일을 편집할 때 저장한 내용을 불러올 수 있습니다. 현재 창의 뷰를 저장하려면:
:mkview
Vim이 뷰를 어디에 저장할지 알아서 결정합니다. 나중에 같은 파일을 편집하는 경우 뷰를 불러오려면 다음 명령을 사용하면 됩니다:
:loadview
참 쉽죠? 다시 줄 번호도 없애고, 모든 폴드도 열린 상태로 보고 싶어서 이런 저런 설정을 바꾸었다고 합시다. 이 뷰를 다음과 같이 저장할 수도 있습니다:
:mkview 1
물론, 이 뷰는 다음 명령으로 불러올 수 있습니다:
:loadview 1
이제 ":loadview"를 "1"을 주고 실행하기도 하고 인자 없이 실행하기도 해서 두 가지 뷰를 바꿔가며 사용할 수 있습니다. 번호를 붙이지 않는 뷰와 1에서 9까지의 뷰를 사용할 수 있으므로, 파일 하나당 최고 10개까지의 뷰를 저장할 수 있습니다. 뷰에 이름 붙이기 ---------------- 뷰를 쓰는 두 번째 방법은 뷰를 저장할 파일을 직접 지정하는 것입니다. 이 뷰는 뷰를 저장할 때와 다른 파일을 편집 중일 때도 불러올 수 있습니다. 그러면 Vim은 파일을 바꾸어 뷰를 저장할 때 편집 중이던 파일을 편집하게 해줍니다. 이 기능을 이용하면 빠르게 다른 파일로 바꾼 후, 예전에 저장했던 옵션들이 유지된 채로 편집할 수 있습니다. 예를 들어, 현재 파일의 뷰를 저장하려면:
:mkview ~/.vim/파일.vim
다음 명령으로 불러올 수 있습니다:
:source ~/.vim/파일.vim
*21.6* 모드 줄 어떤 파일을 편집할 때, 그 파일에만 특별히 설정을 따로 해주고 싶을 수 있습니다. 파일을 열 때마다 매번 설정을 입력하려면 귀찮을 겁니다. 세션과 뷰를 쓸 수도 있겠지만, 여러 사람이 파일을 공유해야할 때에는 무용지물입니다. 이런 때에는 모드 줄(modeline)을 사용하면 됩니다. 모드 줄은 이 파일에서 만큼은 이 옵션 값을 사용해야한다고 지정하는 본문 내의 줄입니다. 가장 전형적인 예는 C 프로그램을 작성할 때 4칸씩 들여쓰기를 하도록 설정하는 것입니다. 'shiftwidth' 옵션을 4로 지정해주면 되는데, 모드 줄로 설정해보면 다음과 같습니다: /* vim:set shiftwidth=4: */
파일의 맨 첫 다섯 줄이나 마지막 다섯 줄 안에 위 줄의 내용을 넣으면 됩니다. 이 파일을 열면 'shiftwidth'가 언제나 4로 설정될 것입니다. 다른 파일을 열면 기본 값인 8로 알아서 돌아갑니다. 파일의 종류에 따라, 모드 줄이 머리 부분에 들어가는 것이 적당할 때는 파일의 맨 앞에 모드 줄을 넣으면 됩니다. 일반 텍스트 파일 같이 모드 줄이 본문 내용과 혼동될 여지가 있는 경우에는 파일의 맨 마지막에 넣으면 됩니다. 'modelines' 옵션은 파일의 시작과 끝 부분에서 모드 줄 여부를 몇 줄이나 검사할지 지정합니다. 열 줄을 검사하려면:
:set modelines=10
'modeline' 옵션으로 모드 줄 기능을 끌 수도 있습니다. 관리자 계정으로 작업할 때나 편집하는 파일을 신뢰할 수 없는 경우에 이 기능을 사용하십시오:
:set nomodeline
모드 줄은 다음과 같은 형식을 갖습니다:
임의의 문자열 vim:set
"임의의 문자열"부분은 모드 줄의 앞이나 뒷부분에 어떤 내용이 들어가도 상관없다는 의미입니다. 따라서 위쪽 C 프로그램 예에서 /* 와 */ 사이에 넣은 것처럼 모드 줄 내용을 주석으로 만들 수 있습니다. Vim은 " vim:" 부분을 인식합니다. 따라서 꼭 "vim" 앞에는 공백이 있거나 아니면 "vim"이 줄의 맨 첫 부분이어야 합니다. 따라서 "gvim:" 등과 같이 쓸 수는 없습니다. 두 콜론 사이의 내용은 ":set" 명령어와 동일합니다. 따라서 Vim에서 ":set"명령어를 쓸 때와 동일하게 사용하되, 옵션 내에서 콜론을 써야할 때는 구분을 위해 백슬래시를 앞에 추가해 주어야 합니다 (그렇지 않으면 그 부분을 모드 줄의 끝으로 인식할 것입니다). 예:{옵션}
={값}
... : 임의의 문자열// vim:set textwidth=72 dir=c\:\tmp: c:\tmp 디렉터리를 사용합니다
첫 번째 콜론 앞에 백슬래시가 있으므로, 이 콜론은 ":set"명령의 인자 중 일부로 해석됩니다. "tmp" 다음의 두 번째 콜론 앞까지가 옵션 값으로 인식되고, 그 이후의 내용은 무시됩니다. 그래서 뒤의 무시되는 부분에는 앞의 설정에 대한 간단한 설명을 써주었습니다. 모드 줄에 대한 더 자세한 설명은 |modeline
|을 참고하십시오.
다음 장: |usr_22| 편집할 파일 찾기 저작권: |manual-copyright| 참고 vim:tw=78:ts=8:ft=help:norl:
Generated by vim2html on 2013. 12. 14. (토) 20:47:01 KST