*usr_08.txt* Vim version 7.4 대상. 새로 고침: 2006년 7월 18일 VIM 사용설명서 - Bram Moolenaar 저 정지용 역 창 나누기 서로 다른 두 개의 파일을 한 번에 표시할 수 있습니다. 또는 한 파일의 서로 다른 위치를 동시에 볼 수 있습니다. 두 파일을 바로 옆에 놓고 그 차이를 비교하면서 볼 수도 있습니다. 이 모든 것이 창 나누기로 가능합니다. |08.1| 창 나누기 |08.2| 다른 파일로 창 나누기 |08.3| 창 크기 |08.4| 세로로 창 나누기 |08.5| 창 옮기기 |08.6| 모든 창에 명령 내리기 |08.7| vimdiff로 파일들의 차이를 보기 |08.8| 기타 |08.9| 탭 다음 장: |usr_09| GUI 사용하기 이전 장: |usr_07| 여러 파일 편집하기 차례: |usr_toc|
*08.1* 창 나누기 가장 쉽게 새 창을 여는 방법은 다음과 같습니다:
:split
이 명령은 창을 둘로 나누고, 커서를 맨 위 창에 놓습니다: +----------------------------------+ |
/* 파일 one.c */
| |~
| |~
| |one.c=============================
| |/* 파일 one.c */
| |~
| |one.c=============================
| || +----------------------------------+ 하나의 파일이 두 개의 창에 열려있는 것을 볼 수 있습니다. "===="로 표시된 줄은 상태표시줄인데, 여기에는 그 위의 창에 대한 정보가 표시됩니다. (실제로는 상태표시줄이 반전되어 표시될 것입니다.) 창이 두 개가 되었으므로 한 파일의 서로 다른 두 부분을 동시에 볼 수 있습니다. 예를 들어, 위 창으로는 프로그램 중 변수 선언 부분을 보면서, 아래 창에서는 변수들을 사용하는 코드를 볼 수 있습니다.
CTRL-W
w 명령으로 두 창 사이를 이동할 수 있습니다. 만약 위 창에 있을 때CTRL-W
w를 누르면 아래 창으로 이동합니다. 아래 창에 있을 때CTRL-W
w를 누르면 위 창으로 이동합니다. (CTRL-W
CTRL-W
도 마찬가지 일을 합니다. CTRL을 좀 더 누르고 있어도 되겠지요.) 창 닫기 ------- 창을 닫으려면 다음 명령을 사용하십시오:
:close
실제로는 파일을 닫는 모든 명령어-예를 들어 ":quit"나 "ZZ"같은-가 같은 역할을 합니다. 다만, ":close"를 사용하면 창이 하나 밖에 남지 않은 경우 실수로 Vim에서 빠져나가는 것을 방지할 수 있습니다. 다른 창을 모두 닫기 ------------------- 창이 많이 열려있는 상태에서 하나에만 집중하고 싶다면 다음 명령어가 유용합니다:
:only
이 명령은 현재 창을 제외한 모든 다른 창을 닫습니다. 단, 다른 창에 변경 사항이 있는 경우, 에러 메시지와 함께 창이 닫히지 않을 것입니다.
*08.2* 다른 파일로 창 나누기 다음 명령은 새로운 창을 열고 주어진 파일을 편집하기 시작합니다::split two.c
만약 one.c 파일을 편집하고 있었다면 다음과 같이 됩니다. +----------------------------------+ |
/* 파일 two.c */
| |~
| |~
| |two.c=============================
| |/* 파일 one.c */
| |~
| |one.c=============================
| || +----------------------------------+ 빈 파일로 새 창을 열고 싶다면 다음 명령어를 사용하면 됩니다:
:new
":split"과 ":new"를 여러 번 사용하여 새로운 창을 얼마든지 원하는 대로 만들 수 있습니다.
*08.3* 창 크기 ":split" 명령에는 숫자 인자를 줄 수 있습니다. 이 숫자 인자는 새로운 창의 높이를 지정하게 됩니다. 예를 들어 다음 명령을 사용하면, 세 줄 높이의 창을 만들고, 그 창에서 alpha.c를 편집하기 시작합니다:
:3split alpha.c
이미 열려있는 창의 높이를 조절하는 방법도 몇 가지 있습니다. 만약 마우스가 동작한다면, 두 창을 나누고 있는 상태표시줄을 드래그해서 간단하게 크기를 조절할 수 있습니다. 창의 크기를 늘리려면:
CTRL-W
+줄이려면:
CTRL-W
-두 명령어 모두 숫자를 지정하여 한 번에 여러 줄 만큼씩 크기를 조절할 수 있습니다. "4
CTRL-W
+"는 높이를 네 줄만큼 늘립니다. 창의 높이를 특정한 값으로 지정하려면:
{height}
CTRL-W
_위 명령은 숫자
{height}
,CTRL-W
그리고 밑줄(시프트를 누르고 - 키를 누르는 것)을 누르는 것을 의미합니다. 창의 크기를 최대로 만들고 싶다면, 숫자를 생략하고CTRL-W
_ 명령을 사용하면 됩니다. 마우스 사용하기 --------------- Vim에서는 키보드만을 사용하여 많은 일들을 매우 빠르게 할 수 있습니다. 하지만 창 크기를 조절하기 위해서는 많은 명령어를 입력해야하고, 이 경우 마우스를 사용하는 것이 더 빠릅니다. 마우스 포인터를 상태표시줄로 이동한 다음, 왼쪽 마우스 버튼을 누른 채로 드래그 하십시오. 상태표시줄이 움직이면서, 한쪽 창은 더 크게, 반대쪽 창은 더 작게 만들 것입니다. 옵션들 ------ 'winheight' 옵션은 바람직한 창의 최소 높이를 지정합니다. 'winminheight'는 절대적인 창의 최소 높이를 지정합니다. 유사하게 'winwidth'는 바람직한 창의 폭을 지정하고, 'winminwidth'는 절대적인 창의 최소 폭을 지정합니다. 'equalalways'는 새로운 창이 열리거나 닫힐 때 창들의 크기를 균일하게 조정하도록 합니다.
*08.4* 세로로 창 나누기 ":split" 명령은 새로운 창을 위쪽에 만듭니다. 새로운 창이 왼쪽에 나타나게 하려면 다음 명령을 사용하십시오:
:vsplit
또는:
:vsplit two.c
수행 결과는 다음 그림과 같습니다: +--------------------------------------+ |
/* 파일 two.c */
|/* 파일 one.c */ | |~
|~ | |~
|~ | |~
|~ | |two.c===============one.c=============
| || +--------------------------------------+ 실제로는 가운데의 | 줄이 반전되어 보일 텐데, 이것이 수직분리대(vertical separator)입니다. 수직분리대는 두 개의 창을 좌측과 우측으로 나눕니다. 빈 파일로 새로운 창을 열고 싶을 때 사용할 수 있는 ":vnew" 명령도 있습니다. 이 명령은 다음과 같이 사용할 수도 있습니다:
:vertical new
":vertical" 명령어는 창을 나누는 다른 명령어들 앞에 나와서, 창을 수평으로 나누지 않고 수직으로 나누도록 만듭니다. (창을 나누는 명령어가 아닌 경우 아무 효과가 없습니다.) 창 사이를 이동하기 ------------------ 창을 원하는 대로 수평으로 또는 수직으로 나눌 수 있으므로, 거의 모든 창의 배치를 만들어 낼 수 있게 되었습니다. 다음 명령어는 이 창들 사이를 이동할 수 있게 해 줍니다:
CTRL-W
h 왼쪽 창으로 움직이기CTRL-W
j 아래쪽 창으로 움직이기CTRL-W
k 위쪽 창으로 움직이기CTRL-W
l 오른쪽 창으로 움직이기CTRL-W
t 제일 첫 창으로 움직이기CTRL-W
b 제일 마지막 창으로 움직이기 잘 보시면 커서를 움직이는 명령과 같은 문자를 사용한다는 것을 알 수 있습니다. 물론 화살표 키를 사용하고 싶으시다면, 그것 역시 마찬가지로 동작합니다. 창 사이를 이동하는 더 많은 명령어들: |Q_wi|.
*08.5* 창 옮기기 창을 나누기는 했는데, 창이 엉뚱한 위치로 나뉘어졌다고 해봅시다. 이 경우 창을 다른 위치로 옮기는 명령어가 필요할 것입니다. 예를 들어 다음과 같이 세 개의 창이 열려있다고 합시다: +----------------------------------+ |/* 파일 two.c */
| |~
| |~
| |two.c=============================
| |/* 파일 three.c */
| |~
| |~
| |three.c===========================
| |/* 파일 one.c */
| |~
| |one.c=============================
| || +----------------------------------+ 맨 아래쪽 창을 맨 위로 옮기고 싶어지실 겁니다. 맨 아래쪽 창으로 가서(
CTRL-W
w를 이용하세요) 다음 명령어를 사용해보십시오:
CTRL-W
K대문자 K를 누르셔야 합니다. 맨 아래에 있던 창이 맨 위로 올라간 것을 확인하실 수 있습니다. 위로 올라가는 명령인 k가 또 사용된 것에 주목하십시오. 세로로 창을 나눈 경우,
CTRL-W
K 는 현재 창을 위로 올려서 Vim 창의 전체 폭을 차지하도록 만듭니다. 만약 창의 배치가 다음과 같았다고 하면: +-------------------------------------------+ |/* two.c */
|/* three.c */ |/* one.c */
| |~
|~ |~
| |~
|~ |~
| |~
|~ |~
| |~
|~ |~
| |~
|~ |~
| |two.c=========three.c=========one.c========
| || +-------------------------------------------+ 가운데 창(three.c)에서
CTRL-W
K를 사용하는 경우 다음과 같이 됩니다: +-------------------------------------------+ |/* three.c */
| |~
| |~
| |three.c====================================
| |/* two.c */
|/* one.c */ | |~
|~ | |two.c==================one.c===============
| || +-------------------------------------------+ 다른 세 가지 명령도 확인해보세요(이미 다 추측하셨을 겁니다):
CTRL-W
H 창을 제일 왼쪽으로 이동CTRL-W
J 창을 맨 아래쪽으로 이동CTRL-W
L 창을 제일 오른쪽으로 이동
*08.6* 모든 창에 명령 내리기 창이 여러 개 열려있을 상황에서 Vim을 빠져나가려 한다고 합시다. 각 창을 일일이 닫을 수도 있겠지만, 다음 명령을 사용하여 좀 더 빠르게 빠져나갈 수도 있습니다:
:qall
qall은 "quit all"을 의미합니다. 만약 파일 내용이 변경된 창이 하나라도 있다면 Vim은 종료되지 않을 것입니다. 커서는 변경 사항이 있는 창으로 알아서 이동할 것입니다. ":write"를 해서 저장을 하거나 ":quit!"를 해서 변경 사항을 무시하고 빠져나가면 됩니다. 만약 내용이 변경된 창이 있다면 다음 명령으로 열려있는 모든 창의 변경 사항을 한 번에 저장할 수 있습니다:
:wall
wall은 "write all"(모두 쓰기)을 의미합니다. 하지만 실제로 모든 파일을 새로 저장하는 것은 아니고, 변경 사항이 있는 창의 내용만을 저장합니다. 변경된 것도 없는 데 저장을 또 하는 것은 아무 의미가 없기 때문입니다. 물론 위 두 가지 명령 역할을 한 번에 해주는 명령도 있습니다. 모든 파일을 저장하고 닫기 명령은 다음과 같습니다:
:wqall
위 명령은 변경 사항이 있는 모든 창의 내용을 저장한 후 Vim을 종료시킬 것입니다. 마지막으로 변경 사항을 저장하지 않고 Vim을 종료하는 명령은 다음과 같습니다:
:qall!
이 명령은 되돌릴 수 없으니 주의하여 사용하시기 바랍니다. 모든 인자를 창으로 열기 ----------------------- 여러 파일들을 창으로 열고자 하는 경우에는 Vim 시작 시에 "-o" 인자를 앞에 주면 됩니다:
vim -o one.txt two.txt three.txt
위 명령을 수행하면 다음과 같이 됩니다: +-------------------------------+ |
파일 one
| |~
| |one========================
| |파일 two
| |~
| |two========================
| |파일 three
| |~
| |three======================
| || +-------------------------------+ 창을 세로로 나누고 싶을 때는 "-O" 인자를 사용하시면 됩니다. Vim이 이미 실행중인 경우에는 ":all" 명령을 사용하면 인자로 넘긴 각 파일을 개별 창으로 열 수 있습니다. ":vertical all"은 창을 세로로 나누도록 지시하는 명령입니다.
*08.7* vimdiff로 파일들의 차이를 보기 두 파일의 차이점을 비교하기에 편하도록 Vim을 색다르게 동작시킬 수 있습니다. 예를 들어 "main.c"라는 파일이 있는데, 여기에 글자 몇 개를 추가했다고 합시다. 'backup' 옵션이 활성화 된 채로 이를 저장하여, "main.c~"라는 백업파일에 파일의 예전 버전이 저장되어있다고 합시다. 다음 명령을 셸에서 (Vim 내에서가 아니라) 입력하십시오:
vimdiff main.c~ main.c
Vim이 실행되면서 두 개의 창이 세로로 분할된 채 열릴 것입니다. 그리고 글자가 추가된 줄과 그 앞뒤로 몇 라인 정도만 볼 수 있을 것입니다. VV VV +-----------------------------------------+ |
+ +--123 줄: /* ㄱ
|+ +--123 줄: /* ㄱ| <- 폴드 |내용
| 내용 | |내용
| 내용 | |내용
| 내용 | |내용
| 변경된 내용 | <- 변경된 줄 |내용
| 내용 | |내용
| ------------------| <- 삭제된 줄 |내용
| 내용 | |내용
| 내용 | |내용
| 내용 | |+ +--432 줄: 내용
|+ +--432 줄: 내용| <- 폴드 |~
| ~ | |~
| ~ | |main.c~==============main.c==============
| || +-----------------------------------------+ (위 그림은 강조를 보여주고 있지 않습니다. 실제로 vimdiff를 사용해보십시오. 훨씬 멋진 모습을 볼 수 있습니다.) 변경 사항이 없는 부분은 하나의 줄로 접혀있습니다. 이 부분을 접힌 폴드라고 부릅니다. 이 부분은 위 그림에서 "<- 폴드"라고 표시된 부분입니다. 맨 위의 한 줄로 접혀있는 폴드는 123 줄을 줄여서 보여주는 것입니다. 이 부분은 양쪽 파일의 내용이 똑같습니다. "<- 변경된 줄"이라고 표시된 부분은 강조되어있고, 추가된 문자들(위 예에서는 "변경된 ")은 다른 색으로 표시되어있을 것입니다. 이 부분은 당연히 두 파일 사이의 차이를 가리키는 것입니다. 삭제된 줄은 main.c 창에서 "---"와 같이 표시될 것입니다. 위 그림에서 "<- 삭제된 줄" 이라고 표시된 곳처럼 말입니다. 이 문자들은 실제로 있는 문자가 아니지만, main.c의 빈 공간을 채워 다른 창과 줄을 맞추기 위해 사용된 것입니다. 폴드 열 ------- 각 창에는 맨 왼쪽에 약간 색이 다른 열이 있습니다. 위 그림에서는 "VV"로 표시되어있습니다. 접힌 폴드의 앞에는 이 폴드 열에 더하기 표시가 있습니다. 마우스로 이 더하기 표시를 클릭해보십시오. 폴드가 펼쳐지면서 접혀져 보이지 않던 부분을 볼 수 있게 될 것입니다. 펼쳐진 폴드의 폴드 열에는 마이너스 표시가 됩니다. 여기를 다시 클릭하면 폴더가 접혀지게 됩니다. 물론 이 동작은 마우스가 제대로 동작하는 경우에만 쓸 수 있습니다. 그렇지 않은 경우에는 "zo"로 폴드를 펼치고, "zc"로 폴드를 접을 수 있습니다. VIM 내에서 차이를 비교하기 -------------------------- Vim 내에서도 비교를 시작할 수 있습니다. "main.c" 파일을 조금 고쳤다고 합시다. 창을 나누어 비교를 시작하려면 다음 명령을 사용하면 됩니다:
:edit main.c
:vertical diffsplit main.c
":vertical"은 창을 세로로 나누기 위해 사용되었습니다. 이 부분을 생략하면 창이 가로로 나뉘게 됩니다. 패치나 디프(diff) 파일을 사용하여 차이를 비교하는 방법도 있습니다. 먼저 패치를 적용할 파일을 여십시오. 그리고 Vim에게 패치파일의 이름을 다음과 같이 알려주면 됩니다:
:edit main.c
:vertical diffpatch main.c.diff
주의: 패치파일은 현재 편집중인 파일 하나에 대한 패치만을 가지고 있어야 합니다. 그렇지 않을 경우 수많은 에러 메시지와 함께 의도치 않게 패치가 다른 파일들에 적용될 수도 있습니다. 패치는 Vim 내에서만 적용되고, 직접 저장명령을 내리지 않는 한 실제 디스크에 저장된 파일에는 아무런 영향을 미치지 않을 것입니다. 스크롤 연계 ----------- 파일에 여러 변경 사항이 있는 경우, 평소 하던 것처럼 화면을 스크롤 할 수 있습니다. 이때 Vim은 양쪽 파일의 같은 부분을 화면에 표시하여 쉽게 차이를 비교할 수 있도록 할 것입니다. 만약 이 기능을 사용하지 않으려면 다음 명령을 사용하십시오:
:set noscrollbind
변경 사항으로 건너뛰기 ---------------------- 특정한 이유로 폴드 기능을 사용하지 않는다면, 변경 사항이 있는 줄로 이동하기가 쉽지 않을 것입니다. 이 경우 다음 명령을 사용하면 다음 변경 사항으로 이동합니다:
]c
반대방향으로 이동하기 위해서는:
[c
앞에 숫자를 덧붙이면 한 번에 더 많이 이동할 수 있습니다. 변경 사항을 없애기 ------------------ 파일의 내용을 이리저리 옮기다 보면, 두 파일의 차이를 없앨 수도 있고, 새로운 차이를 만들 수도 있을 것입니다. 하지만 Vim은 이에 따라 강조나 폴드를 항상 바로바로 바꿔주지는 않습니다. 이를 반영하려면 다음 명령을 사용하십시오:
:diffupdate
차이를 없애기 위해서 한 창의 강조된 부분을 다른 창으로 옮길 수도 있을 것입니다. 위의 "main.c"와 "main.c~"의 예를 다시 생각해봅시다. 커서를 왼쪽 창으로 옮겨서, 오른쪽 창에서는 지워진 내용이 있는 줄에 위치시킵니다. 그리고 다음 명령을 사용해봅시다:
dp
왼쪽 창의 내용을 오른쪽 창의 지워진 부분에 넣음으로써 두 창의 차이가 없어지게 될 것입니다. "dp"는 "diff put"(차이 보내기)을 의미합니다. 반대방향의 동작도 가능합니다. 예를 들어 커서를 오른쪽 창으로 옮겨서, 수정사항이 있는 줄에 위치시킵니다. 그리고 다음 명령을 사용해봅시다:
do
다른 창으로부터 내용을 가져옴으로써 두 창의 차이가 없어졌을 것입니다. 이제 모든 차이가 없어졌으므로, Vim이 파일의 모든 내용을 접힌 폴드 하나에 넣어버릴 것입니다. "do"는 "diff obtain"(차이 얻어오기)을 의미합니다. "diff get"라는 의미로 "dg"를 썼다면 더 좋았겠지만, "dg"는 "dgg"의 일부이므로 사용할 수 없었습니다. ("dgg"는 현재 줄부터 파일의 맨 첫 줄까지를 지우는 명령입니다.) 차이 비교 모드에 대한 자세한 설명은 |
vimdiff
|를 참조하십시오.
*08.8* 기타 'laststatus' 옵션으로 다음과 같이 상태표시줄 표시여부를 설정할 수 있습니다: 0 항상 숨김 1 창이 나누어졌을 때만 표시(기본 값) 2 항상 표시 다른 파일을 편집하는 명령들에는 대부분 창을 나누기 위한 명령이 함께 딸려있습니다. 명령줄에서 사용하는 명령의 경우는 대부분 앞에 's'를 붙이면 됩니다. 예를 들어, 태그로 이동하기 위한 ":tag" 명령의 앞에 's'를 붙인 ":stag"는 창을 나누면서 태그로 이동합니다. 보통 모드 명령의 경우CTRL-W
가 앞에 붙습니다. 예를 들어 CTRL-^는 다른 파일로 넘어가는 명령인데,CTRL-W
CTRL-^를 누르면 창을 나누면서 다른 파일로 넘어가게 됩니다. 새로운 창이 항상 현재창의 아래쪽에서 뜨게 하고 싶다면 'splitbelow' 옵션을 설정하면 됩니다. 마찬가지로 세로로 창을 나눌 때 새로운 창이 오른쪽에 뜨게 하고 싶다면 'splitright'옵션을 설정하면 됩니다. 아니면 창을 나눌 때 다음 수식 명령어를 앞에 붙여서 새로운 창의 위치를 지정할 수도 있습니다: :leftabove{cmd}
현재 창의 왼쪽이나 위쪽 :aboveleft{cmd}
상동 :rightbelow{cmd}
현재 창의 오른쪽이나 아래쪽 :belowright{cmd}
상동 :topleft{cmd}
Vim 창의 맨 위나 왼쪽 :botright{cmd}
Vim 창의 맨 아래나 오른쪽
*08.9* 탭 이제까지는 창들이 절대 서로 겹쳐지지 않았습니다. 그래서 창을 몇 개만 열어도 금방 공간이 부족해지게 됩니다. 너무 많이 열린 창 때문에 공간이 부족하다면, 탭을 사용해보십시오. "이파일"을 편집하는 중이라고 합시다. 다음 명령은 새 탭을 만듭니다:
:tabedit 저파일
"저파일"이라는 창이 열리고, 새로 열린 창이 Vim 창 전체를 차지하게 되었을 것입니다. 또한 창의 위쪽에서는 두 개의 파일명을 확인할 수 있을 것입니다. +----------------------------+ |
이파일
| /저파일/ ________X| (저파일이 굵게 표시됨) |/* 저파일 */
| |가나다
| |123
| |~
| |~
| |~
| || +----------------------------+ 두 개의 탭이 열려있습니다. 첫 번째 탭은 "이파일" 창의 것이고, 두 번째 탭은 "저파일" 창의 것입니다. 마치 두 창이 겹쳐져있고, 파일 이름이 적혀있는 탭이 위로 삐져나와서 표시되고 있는 것처럼 보이지 않습니까? 마우스로 맨 윗줄의 "이파일" 부분을 클릭해봅시다. 다음과 같이 바뀌었을 것입니다. +----------------------------+ |
/이파일/
| 저파일 ________X| (이파일이 굵게 표시됨) |/* 이파일 */
| |하파타
| |098
| |~
| |~
| |~
| || +----------------------------+ 맨 윗줄의 파일명을 클릭해서 화면에 보이는 탭을 바꿀 수 있습니다. 만약 마우스가 없거나 사용하기 싫다면, "gt"(Goto 탭 을 의미)를 사용하시면 됩니다. 다음과 같이 탭을 추가해봅시다:
:tab split
위 명령은 편집중인 버퍼로 같은 내용을 가진 새로운 탭을 만듭니다: +-------------------------------+ |
이파일
| /이파일/ |저파일 __X
| (이파일이 굵게 표시됨) |/* 이파일 */
| |하파타
| |098
| |~
| |~
| |~
| || +-------------------------------+ 창을 여는 모든 Ex 명령 앞에 ":tab"을 붙이면 새로운 창이 탭으로 열리게 됩니다. 예를 들어:
:tab help gt
명령은 "gt"의 도움말을 새 탭에 표시합니다. 그 외에 탭과 관련된 기능을 몇 가지 보면: - 탭 막대에서 마지막 탭의 이름 뒤쪽 빈 공간을 마우스로 클릭 "gt"와 같이 다음 탭이 선택됩니다. - 오른쪽 위 구석의 "X"를 마우스로 클릭 현재 창이 닫힙니다. 물론 마지막으로 저장한 후 바뀐 내용이 없어야 합니다. - 탭 막대의 빈 공간을 더블 클릭 새로운 탭이 생성됩니다. - "tabonly" 명령 현재 탭만 빼고 모든 다른 탭이 닫힙니다. 마지막으로 저장한 후 바뀐 내용이 없어야 합니다. 탭에 관해서는 |
tab-page
|를 더 참고 하십시오.
다음 장: |usr_09| GUI 사용하기 저작권: |manual-copyright| 참고 vim:tw=78:ts=8:ft=help:norl:
Generated by vim2html on 2013. 12. 14. (토) 20:47:01 KST