*usr_20.txt* Vim version 7.4 대상. 새로 고침: 2006년 4월 24일 VIM 사용설명서 - Bram Moolenaar 저 정지용 역 명령줄 명령 빨리 치기 Vim은 명령을 쉽게 입력하는데 통용되는 몇 가지 기능을 갖고 있습니다. 콜론 명령은 줄여서 쓰거나, 편집하거나 반복할 수 있습니다. 그리고 거의 모든 곳에서 자동완성을 사용할 수 있습니다. |20.1| 명령줄 편집하기 |20.2| 명령줄 약어 |20.3| 명령줄 자동 완성 |20.4| 명령줄 히스토리 |20.5| 명령줄 창 다음 장: |usr_21| 나갔다가 되돌아오기 이전 장: |usr_12| 멋진 기술들 차례: |usr_toc|
*20.1* 명령줄 편집하기 콜론(:) 명령이나 / 또는 ?로 문자열을 찾으면, Vim은 커서를 화면의 맨 밑으로 옮깁니다. 여기서 명령이나 찾을 패턴을 입력하지요. 이 부분을 명령줄(Command Line)이라고 부릅니다. 찾기 명령을 입력할 때도요. 명령을 편집하는 가장 빤한 방법은<BS>
(백스페이스) 키를 누르는 것입니다. 커서 앞의 글자를 지우지요. 그 전에 입력한 다른 문자를 지우려면, 커서를 화살표 키로 먼저 움직인 후 지우면 됩니다. 예를 들어, 다음과 같이 입력했다면:
:s/col/pig/
그런데
<Enter>
를 누르기 전에 "cow"를 "col"라고 잘못 친 것을 발견했다고 합시다. 이걸 고치려면<Left>
(왼쪽 화살표 키)를 다섯 번 누르세요. 이제 커서가 "col" 바로 다음에 왔을 텐데요.<BS>
를 누르고 "w"를 눌러서 다음과 같이 고치세요:
:s/cow/pig/
이제 바로
<Enter>
를 누르면 됩니다. 명령을 실행하기 전 커서를 맨 끝으로 옮길 필요는 없습니다. 명령줄에서 움직일 때 가장 많이 사용하는 키는 다음과 같습니다:<Left>
(왼쪽 화살표 키) 한 글자 왼쪽으로<Right>
(오른쪽 화살표 키) 한 글자 오른쪽으로<S-Left>
또는<C-Left>
한 어절 왼쪽으로<S-Right>
또는<C-Right>
한 어절 오른쪽으로CTRL-B
또는<Home>
명령줄의 맨 처음으로CTRL-E
또는<End>
명령줄의 맨 끝으로Note:
<S-Left>
(시프트키를 누른 채로 왼쪽 화살표 키)와<C-Left>
(컨트롤키를 누른 채로 왼쪽 화살표 키)는 모든 키보드에서 동작하지는 않을 수도 있습니다. 다른 시프트키나 컨트롤키 조합도 마찬가지입니다. 마우스를 이용해서 커서를 움직일 수도 있습니다. 지우기 ------ 앞에서 언급했듯이,<BS>
(백스페이스)는 커서 앞의 글자 하나를 지웁니다. 어절(word) 하나를 통째로 지우려면CTRL-W
를 사용하세요./the fine pig
CTRL-W
/the fine
CTRL-U
는 전체를 지웁니다. 처음부터 다시 입력하고 싶을 때 사용하세요. 수정하기 --------<Insert>
키를 누르면 문자 삽입하기 상태와 수정하기 상태를 오갑니다. 다음 문자열이 있다고 해보지요:/the fine pig
<S-Left>
를 두 번 눌러서(<S-Left>
가 동작하지 않는다면<Left>
를 여덟 번 눌러서) 커서를 "fine"의 시작 위치로 옮깁시다. 이제<Insert>
를 눌러서 수정하기 상태로 바꾸고 "great"를 입력합시다:/the greatpig
앗, 공백이 없어졌습니다. 이때<BS>
를 사용하지는 마세요. "t"가 지워져 버립니다(바꾸기 모드와 동작이 다릅니다). 대신,<Insert>
를 눌러서 수정하기에서 삽입하기 상태로 바꾼 다음, 스페이스바를 누르세요:/the great pig
취소하기 -------- 콜론 명령이나 찾기를 하려다가, 생각이 바뀌어 그만두고 싶어졌다고 합시다. 지금까지 입력한 내용을 실행하지 않고 그만두려면CTRL-C
나<Esc>
를 누르세요.Note:
<Esc>
는 어디에서나 쓰이는 "나가기" 키입니다. 하지만 불행하게도 위대한 옛날 Vi에서는 명령줄에서<Esc>
를 누르면 명령이 실행됩니다! 이는 버그라고 생각할 수 있기 때문에 Vim에서는<Esc>
를 명령 취소로 쓰고 있습니다. 하지만 'cpoptions' 옵션으로 Vi와 동일하게 동작하도록 바꿀 수 있습니다. 또한 매핑(Vi에 맞추어 쓰였을 수도 있는)을 사용할 때는<Esc>
가 Vi와 동일하게 동작합니다. 따라서CTRL-C
를 써야 언제나 잘 동작합니다. 명령줄의 맨 앞에서<BS>
를 눌러도 명령이 취소됩니다. 줄이 시작하는 ":"나 "/"를 지우는 것과 같으니까요.
*20.2* 명령줄 약어 몇 가지 ":" 명령은 매우 깁니다. 앞에서 ":substitute"를 ":s"로 줄여서 쓸 수 있다는 것은 이야기 했습니다. 이는 일반적인 방식으로, 모든 ":" 명령을 줄여서 쓸 수 있습니다. 명령이 얼마나 짧아질 수 있을까요? 알파벳은 26글자이고, 명령은 이보다 훨씬 많습니다. 예를 들어, ":set"도 ":s"로 시작하지만 ":s"는 ":set" 명령으로 동작하지 않습니다. 대신 ":set"은 ":se"로 줄여서 쓸 수 있습니다. 명령의 짧은 형태가 두 가지 명령을 의미할 수 있을 때, 실제로는 언제나 그 중 한 가지만을 의미합니다. 어떤 것을 의미하는지에 대한 규칙은 없고, 그냥 외워야 합니다. 명령의 도움말에 동작하는 가장 짧은 형태가 나옵니다. 예를 들어:
:s[ubstitute]
위와 같이 나와 있다면 ":substitute"의 가장 짧은 형태가 ":s"라는 것입니다. 뒤에 나오는 문자들은 생략 가능합니다. 따라서 ":su"나 ":sub"도 동작합니다. 사용설명서에서는 명령 전체를 쓰거나, 읽어서 이해하기 쉬운 짧은 형태를 사용합니다. 예를 들어 ":function"은 ":fu"로 줄여 쓸 수 있습니다. 하지만 대부분의 사람들은 이것이 어떤 명령을 줄인 것인지 알기 어려우므로, ":fun"을 사용하고 있습니다. (Vim에는 ":funny"같은 명령은 없으니까요. 그렇지 않았다면 ":fun"도 헷갈렸겠지요). Vim 스크립트에서는 명령 전체를 쓰는 것을 추천합니다. 나중에 수정할 일이 생기더라도 읽기가 더 쉬울 테니까요. ":w" (":write")나 ":r" (":read") 같이 자주 쓰는 것들은 빼고요. 특히 헷갈리는 것은 ":end" 입니다. ":endif"일 수도 있고, ":endwhile"이나 ":endfunction"으로 생각할 수도 있습니다. 따라서 언제나 전체를 써주세요. 짧은 옵션 이름 -------------- 사용설명서에서는 긴 옵션 이름을 사용합니다. 많은 옵션들은 짧은 이름도 갖고 있습니다. ":" 명령과 달리 단 하나의 짧은 이름만 쓸 수 있습니다. 예를 들어 'autoindent'의 짧은 이름은 'ai'입니다. 즉 다음 두 명령은 동일합니다:
:set autoindent
:set ai
모든 옵션들의 전체 이름과 짧은 이름들은 |option-list|에서 확인할 수 있습니다.
*20.3* 명령줄 자동 완성 명령줄 자동 완성은 Vi에서 Vim으로 바꿔야하는 이유 중 하나인 기능입니다. 한 번 사용해보면, 자동 완성 없이는 살 수 없을 거예요. 다음 파일들을 갖고 있는 디렉터리가 있다고 합시다: info.txt intro.txt bodyofthepaper.txt 마지막 파일을 편집하려면 다음 명령을 사용하면 됩니다:
:edit bodyofthepaper.txt
타자 실수를 하기 쉽겠지요. 훨씬 더 편한 방법은:
:edit b
<Tab>
이러면 동일한 명령이 됩니다. 무슨 일이 일어난 걸까요?
<Tab>
키가 커서 앞의 내용을 끝까지 완성시켜주었습니다. 여기서는 "b"였지요. Vim은 디렉터리를 살펴본 후, "b"로 시작하는 파일이 하나밖에 없다는 것을 알아냈습니다. 당신이 찾는 파일이 이 파일일 테니 Vim은 파일명을 완성시켜준 겁니다. 이제 다음과 같이 입력해봅시다:
:edit i
<Tab>
Vim은 삐 소리를 내며 다음과 같은 화면을 보여줄 겁니다:
:edit info.txt
삐 소리는 Vim이 둘 이상의 일치하는 파일을 찾았다는 뜻입니다. 그리고는 일치하는 파일 중 첫 번째 것(알파벳 순)을 사용한 것입니다.
<Tab>
을 다시 누르면, 다음과 같아집니다:
:edit intro.txt
즉 첫 번째
<Tab>
으로 원하는 파일이 나오지 않았다면, 다시 눌러보세요. 일치하는 파일이 더 있다면, 한 번에 하나씩 차례대로 모두 나올 겁니다. 일치하는 마지막 파일이 나온 후에<Tab>
을 또 누르면, 처음 입력한 내용으로 돌아갑니다:
:edit i
그리고는 처음부터 다시 반복됩니다. 즉 Vim은 일치하는 파일들을 순환합니다. 순환하는 목록에서 반대 방향으로 가려면
CTRL-P
를 사용하세요:<------------------- <Tab>
-------------------------+ |<Tab>
--><Tab>
--> :edit i :edit info.txt :edit intro.txt <--CTRL-P
<--CTRL-P
| +----------------------CTRL-P
------------------------> 문맥 ----- ":edit i" 대신 ":set i"를 입력하고<Tab>
을 누르면 다음과 같이 됩니다:
:set icon
아니, ":set info.txt"가 아니네요? Vim이 문맥을 고려해서 자동 완성을 하기 때문입니다. Vim이 완성에 사용하는 단어는 그 앞의 명령에 따라 달라집니다. Vim은 ":set" 명령 다음에는 파일명이 나오지 않고, 대신 옵션 이름이 나온다는 것을 알고 있습니다. 앞에서와 마찬가지로
<Tab>
을 반복해서 누르면, Vim은 일치하는 옵션들을 순환합니다. 일치하는 수가 꽤 많으니 몇 글자를 더 입력하는 것이 낫겠네요:
:set isk
<Tab>
결과는:
:set iskeyword
이제 "="를 입력하고
<Tab>
을 눌러봅시다:
:set iskeyword=@,48-57,_,192-255
이때는 Vim이 옵션의 기존 값을 넣어줍니다. 이제 이걸 적당히 편집하면 됩니다.
<Tab>
으로 완성되는 것은 Vim이 그 자리에서 기대하는 것입니다. 어떻게 동작하는지 보려면 일단 한번 해보세요. 몇몇 상황에서는 기대하는 결과가 나오지 않을 수도 있습니다. 이는 Vim이 당신의 의도를 잘 몰랐거나, 아니면 그런 상황에서의 자동 완성이 구현되지 않아서일 겁니다. 그런 경우<Tab>
이 그냥 입력됩니다(^I로 표시됩니다). 일치하는 후보들 보기 -------------------- 일치하는 후보가 여럿 있다면, 전체를 한번 보고 싶을 수도 있습니다.CTRL-D
를 누르면 됩니다. 예를 들어 다음과 같이 입력하고CTRL-D
를 누르면:
:set is
다음과 같이 나옵니다:
:set is
incsearch isfname isident iskeyword isprint
:set is
일치하는 후보들이 나온 후, 입력한 내용으로 돌아갑니다. 이제 후보들에서 원하는 것을 찾으면 되겠지요. 만약 원하는 것이 없다면,
<BS>
를 눌러서 입력을 수정할 수도 있습니다. 후보가 너무 많다면 몇 글자를 더 입력한 후<Tab>
을 눌러서 완성하세요. 위 내용을 주의 깊게 보았다면, "incsearch"가 "is"로 시작하지 않는다는 것을 눈치 챘을 겁니다. 위 예에서 "is"는 "incsearch"의 짧은 이름입니다. (많은 옵션들은 긴 이름과 짧은 이름을 가지고 있습니다.) Vim은 영특하게도 옵션의 짧은 이름을 긴 이름으로 바꾸고 싶어 했을 거라고 추측하고 후보에 넣은 것이지요. 이 뿐만이 아닙니다 ------------------CTRL-L
으로 단어를 확실한 부분까지만 완성시킬 수 있습니다. ":edit i"를 입력하고CTRL-L
을 눌렀는데 파일이 "info.txt"와 "info_backup.txt"밖에 없다면, ":edit info"가 됩니다. 'wildmode' 옵션으로 자동 완성의 동작 방식을 바꿀 수 있습니다. 'wildmenu' 옵션으로 메뉴 형태의 후보 목록을 볼 수 있습니다. 'suffixes' 옵션으로 덜 중요하므로 파일 목록의 맨 마지막에 나올 파일들을 지정할 수 있습니다. 'wildignore' 옵션으로 아예 목록에서 뺄 파일을 지정할 수도 있습니다. 이 모든 것에 대해 더 자세한 내용은 |cmdline-completion
|에서 확인하세요.
*20.4* 명령줄 히스토리 3장에서 히스토리에 대하여 간단히 살펴봤습니다. 기본은<Up>
(위쪽 화살표 키)으로 예전 명령줄 내용을 불러낼 수 있다는 것입니다.<Down>
(아래쪽 화살표 키)으로 다시 더 최근 명령으로 돌아갈 수도 있고요. 사실, Vim에는 네 가지 히스토리가 있습니다. 여기서 살펴볼 것은 ":" 명령 히스토리와 "/", "?" 찾기 명령을 위한 히스토리입니다. "/"와 "?"는 같은 히스토리를 공유합니다. 둘 다 같은 찾기 명령이니까요. 다른 두 가지 히스토리는 표현식과 input() 함수의 입력 내용을 위한 것입니다. |cmdline-history
| ":set" 명령을 실행하고 난 후 다른 콜론 명령을 열 개 입력했고, ":set" 명령을 다시 반복하고 싶다고 합시다. ":"를 누른 후<Up>
을 열 번 누를 수도 있습니다. 하지만 더 빠른 방법이 있습니다:
:se
<Up>
Vim은 "se"로 시작하는 이전 명령으로 돌아갑니다. 운이 좋다면 찾고 있는 ":set" 명령을 바로 찾을 수 있을 겁니다. 최소한
<Up>
을 아주 많이 누를 필요는 없어지겠지요(":set" 명령만 줄곧 사용하는 것이 아니라면 요).<Up>
키는 현재까지 입력된 내용을 히스토리의 항목들과 비교할 겁니다. 일치하는 항목들만 사용됩니다. 만약 원하는 항목을 찾을 수 없다면,<Down>
키를 눌러서 입력한 내용으로 돌아간 다음 수정하십시오. 아니면CTRL-U
를 누르고 처음부터 다시 시작하세요. 히스토리의 모든 항목을 보려면:
:history
이건 ":" 명령의 히스토리입니다. 찾기 히스토리는 다음 명령으로 볼 수 있습니다:
:history /
CTRL-P
는<Up>
과 유사하지만, 현재 입력중인 내용을 무시한다는 차이가 있습니다.CTRL-N
과<Down>
도 동일한 관계입니다.CTRL-P
는 이전(Previous)을,CTRL-N
은 다음(Next)을 의미합니다.
*20.5* 명령줄 창 명령줄에 명령을 입력하는 것은 입력 모드에서 내용을 입력하는 것과 다릅니다. 편집을 위한 많은 명령들을 쓸 수 없습니다. 대부분의 명령을 사용하는 데는 문제가 없지만, 가끔 복잡한 명령을 입력해야할 때가 있습니다. 이때는 명령줄 창이 유용합니다. 명령줄 창을 아래 명령으로 여세요:
q:
Vim은 아래쪽에 (작은) 창을 엽니다. 여기에는 명령줄 히스토리와 함께 맨 끝에 빈 줄이 있습니다: +-------------------------------------+ |
다른 창
| |~
| |file=============================
| |:e c
| |:e config.h.in
| |:set path=.,/usr/include,,
| |:set iskeyword=@,48-57,_,192-255
| |:set is
| |:q
| |:
| |명령줄===============================
| || +-------------------------------------+ Vim은 이제 보통 모드입니다. "hjkl"을 써서 움직일 수 있습니다. 예를 들어, "5k"로 ":e config.h.in" 줄로 올라가 보세요. "$h"를 눌러서 "in"의 "i"로 움직인 다음 "cwout"를 입력하세요. 이제 다음과 같이 내용이 바뀌었을 겁니다:
:e config.h.out
이제<Enter>
를 누르면 이 명령이 실행됩니다. 명령줄 창도 닫힙니다.<Enter>
명령은 커서가 위치한 줄의 명령을 실행시킵니다. Vim이 입력 모드이든 보통 모드이든 상관없습니다. 명령줄 창의 변경 사항은 사라집니다. 히스토리가 바뀌지도 않습니다. 단지 실행한 명령이 히스토리의 맨 끝에 추가될 겁니다. 다른 명령을 실행했을 때와 마찬가지로요. 명령줄 창은 히스토리 전체를 보고, 비슷한 명령을 찾아서 약간 바꾼 다음 실행시킬 때 매우 유용합니다. 찾기 명령으로 무언가를 찾을 수도 있습니다. 위 예에서 "?config" 찾기 명령으로 "config"를 포함한 이전의 명령을 찾을 수 있었을 겁니다. 명령줄 창에서 찾기를 하기 위해 명령줄을 또 사용하는 것은 약간 이상하지요. 찾기 명령을 입력하는 중에는 또 다른 명령줄 창을 열 수 없습니다. 명령줄 창은 딱 하나만 있을 수 있습니다.
다음 장: |usr_21| 나갔다가 되돌아오기 저작권: |manual-copyright| 참고 vim:tw=78:ts=8:ft=help:norl:
Generated by vim2html on 2013. 12. 14. (토) 20:47:01 KST