파일 관련 기능
Vim/Tutorial 2013. 2. 4. 03:13 |열었던 파일 다시 열기
a.c 파일을 작업하다가 e! b.c 를 불러들였다는 가정하에,
그럼 현재 b.c 파일을 편집하고 있을텐데 여기서 <CTRL-^> 를 누르면 이전 파일인 a.c 파일이 열린다. 계속 <CTRL-^> 를 누르면 a.c 파일과 b.c 파일 사이를 오갈 수 있다.
이렇게 한번 열었던 파일을 다시 열 수 있는 이유는, vim이 최근에 연 파일 목록을 기억하고 있기 때문이다.
한번에 여러 파일 열기
vim a.txt b.txt c.txt 라고 명령하면 a.txt가 열린 상태로 vim이 시작되지만, 내부적으로는 세 파일이 목록에 등록이 된다. 이 상태에서 :n 이나 :N 명령을 사용하면 파일 사이를 전환할 수 있다. 반복 횟수를 지정하여 :2n 이라고 하면 두 번째 뒤의 파일로 이동한다.
파일 사이를 이동할 때, 실제로는 현재 파일을 닫고 다음 파일을 여는 순서로 진행되므로 변경된 내용을 저장하지 않으면 역시 에러가 발생한다.
만일 변경된 내용을 버리고 강제로 다른 파일을 열려면 느낌표(!) 기호를 넣어 :n! 이나 :N! 으로 명령하면 된다.
여러 파일 닫기
여러 파일이 열려 있을 때 :q 로 종료하려고 하면 다른 파일이 있기 때문에 종료되지 않는 경우가 있다. 이를 무시하고 종료하려면 :q! 나 모든 윈도우를 다는 :qa 명령을 사용하면 된다.
Tip: 표준 입력을 통해서 읽어오기
유닉스, 리눅스, 맥에서는 다른 프로세스에서 출력된 결과를, 표준 입력을 통해 vim에서 읽어 올 수 있다.
예를 들어, ps -ef 명령의 결과를 vim으로 가져오고 싶다면 쉘에서 'ps -ef | vim -' 명령을 실행하면 된다. (아니면, vim에서 'r !ps -ef' 명령을 내려도 된다.)
이때 '-' 는 표준 입력을 의미한다. 이 기능은 명령의 결과가 길거나 실행 결과를 편집해야할 때 유용하다.
다양한 파일 저장법
파일을 저장하는 명령에는 :w 외에도 다른 이름으로 저장하거나 변경점이 있는지 확인해서 저장하는 명령도 있다.
파일을 저장하는 다양한 명령어
:w filename 파일을 저장
:sav filename 현재 파일을 다른 이름으로 저장(save as)
:up 변경 사항(update)이 있는 경우에만 저장
:x vim을 종료하면서 변경 사항이 있는 경우에는 저장 (일반 모드에서는 ZZ)
※ 새로운 파일로 저장하면서 편집 중인 파일도 바꾸는 명령: sav[!] {file}
변경 사항이 있을 때만 파일 저장하기
:up 명령은 변경 사항이 있는 경우에만 저장하고 변경 사항이 없을 때는 아무일도 하지 않는다. 이에 비해 :w 명령은 무조건 저장하므로 변경 사항이 없을 때도 디스크 입출력이 발생하는데, 여러 사용자가 공동으로 사용하는 서버에서는 이러한 디스크 입출력은 부담이 된다.
따라서 :up 명령을 권장한다.
:x 명령은 :up과 :q 명령을 결합한 형태로서 :wq 대신 사용할 수 있다. 많은 사용자들이 :wq 로 vim을 종료하는데, :w 명령은 무조건 저장하여 디스크 입출력을 발생시킨다는 단점이 있다.
따라서, 이제부터는 :wq 대신 :x나 ZZ 의 사용을 권장한다.
창 분할
창 수평 분할
:sp 명령을 입력하면, 창이 위/아래로 분할된다. 단축키로는 <CTRL-W> s 이다.
다른 파일로 창을 분할하고 싶다면 :sp file 명령을 사용하면 된다. 기본적으로 새 창과 기존 창은 균등한 크기로 나뉘며, 새창의 크기를 직접 지정하려면 sp 명령 앞에 크기를 넣으면 된다.
예를 들어 :10sp file 로 명령하면 새로 생성되는 창의 크기는 10행이 된다.
창 수직 분할
:vs 명령을 입력하면(vertical), 창이 왼쪽/오른쪽으로 분할 된다. 단축키로는 <CTRL-W> v 이다.
창 분할 명령어 정리
:[#]sp [파일명] [#]CTRL-W s 상하로 창을 분할. 파일명 생략하면 현재 파일을 의미
:[#]vs [파일명] [#]CTRL-W v 좌우로 창을 분할
:[#]new [파일명] [#]CTRL-W n 상하로 분할하고, 위쪽에 새로운 창을 만듦
:[#]vnew [파일명] [#]CTRL-W v 좌우로 분할하고, 왼쪽에 새로운 창을 만듦
여러 파일을 분할된 창에 열기
vim을 시작하면서 여러 파일을 분할도니 창에 열고 싶다면 -o 옵션을 사용하면 된다.
vim -o hello.c hello2.c
이렇게 옵션을 넣으면 위쪽 창에 hello.c 를, 아래쪽 창에 hello2.c 를 열어준다.
소문자 -o 대신에 대문자 -O 를 사용하면 창은 좌우로 분할된다.
창 크기 조절
창의 크기를 조절할 때는 <CTRL-W> 에 +,- 를 사용하여 크기를 키우거나 줄일 수 있다.
그리고 현재 열린 창의 크기를 모두 균등하게 만들 때는 <CTRL-W> = 를 사용한다.
분할된 창의 크기를 조정하는 명령어
CTRL-W = 모든 창의 크기를 동일하게 조절
CTRL-W [#]+ # 크기만큼 크기를 키운다. #을 생략하면 1을 키운다.
CTRL-W [#]- # 크기만큼 크기를 줄인다.
파일 내용 비교하기
vim 을 시작할 때 -d 옵션을 사용하여 vim -d file1 file2 처럼 명령하면, file1과 file2 를 수직 창 분할로 열면서 내용이 서로 다른 부분을 강조하여 표시해준다.
윈도우용 vim에서는 여러 파일을 선택한 뒤에 마우스 오른쪽 팝업 메뉴의 '빔으로 Diff' 를 실행하면 된다.
※ 다른 점을 비교한 후, 다른 점을 가져오는 기능(do)과 다른 점을 복사해 넣는 기능(dp)도 사용할 수 있다
:diffthis 명령을 양쪽 모두 실행시키면, vim이 실행되어있는 상태에서 두 파일을 비교할 수 있다.
그리고, :diffget, diffput 의 명령을 이용하면 다른점을 파일로 복사해 올 수 있다.
탭 페이지
창 분할 기능에는 결정적인 단점이 있다. 바로 분할할 때마다 편집 화면이 반으로 줄어든다는 점이다.
그래서 vim 7 버전에서는 전체 화면에서 여러 파일을 열 수 있는 탭 페이지 기능이 추가되었다.
탭으로 열기
:tabedit aa.c 라곰 명령하면 화면 상단에 탭이 생기면서 현재 파일몇에 aa.c 파일의 탭이 열린다.
탭 사이 이동하기
:tabprevious 명령은 이전(previous) 탭으로 이동한다.
:tabnext 명령은 다음(next) 탭으로 이동한다.
단축 명령인 :tabn, :tabp 으로 할 수 있다.
단축키인 <CTRL-PageDown>, <CTRL-PageUp> 이 많이 쓰인다. 주의할 점은 터미널에서는 <CTRL-PageDown>, <CTRL-PageUp> 키가 스크롤다운, 스크롤업으로 예약되어 제댜로 작동하지 않을 수 있다는 점이다.
탭 이동 명령
:[#]tabn[ext] 다음 탭으로 이동, 일반 모드의 gt와 동일
[#]gt #에 숫자를 지정하면 탭 번호가 지정됨
[#]<CTRL-PageDown>
:[#]tabp[revious] 이전 탭으로 이동, 일반 모드의 gT와 동일
[#]gT #에 숫자를 지정하면 반복수가 지정됨
[#]<CTRL-PageUp>
:tabm[ove] [#] #번째 탭으로 현재 탭을 이동시킨다(0부터 시작). #이 생략되면 가장 오른쪽으로 이동.
탭 열고 닫기
:tabclose 명령을 입력하면 탭을 닫을 수 있다.
새 파일을 탭으로 여는 명령은 :tabnew 이다. 파일명을 지정하면서 새 탭을 열고 싶다면 :tabnew filename 명령을 사용한다.
탭 생성과 종료 명령
:[#]tabe[dit] filename #번째 탭에 파일을 연다. #이 생략되면 현재 탭 뒤에 생성. 번호는 0부터 시작
:[#]tabnew filename #번째 위치에 비어있는 탭을 만든다.
:[#]tabc[lose] #번째 탭을 닫는다. #을 생략하면 현재 탭을 닫는다.
tabedit, tabnew, tabclose 의 앞에 숫자를 넣으면 열거나 닫는 탭의 숫자를 정할 수 있다.
Tip: vim 시작 시 여러 파일을 탭으로 열기
vim을 시작하면서 여러 파일을 탭으로 열고 싶은 경우!! 이를 위해서 -p 옵션이 제공된다.
예를 들어 vim -p aaa.txt bbb.txt 라고 명령하면 두 파일이 각각 탭으로 열린다
'Vim > Tutorial' 카테고리의 다른 글
공백 지우기 (0) | 2013.02.05 |
---|---|
파일 열기(고급) (0) | 2013.02.05 |
문자, 문자열 검색/치환 (0) | 2013.02.02 |
vim 에러 처리 (0) | 2013.02.02 |
명령어 표기법에 대해서 (0) | 2013.02.02 |