vim에 푹빠진 많은
사람들은 자신들을
Vim Lovers, 심지어
빔파이어(Vimpires, Vim +
inspires?)라고 부르며
세계 곳곳에 온라인
소굴을
만들었다.[25] 이
문서에서도 어느
정도의 명령어와
팁들을
소개하겠지만 이들
빔파이어들이
준비한 가공할
무기들에는 미치지
못할 것이다 - vi를
더 잘 쓰기
위해서라기보다
GNU/Linux에서의
일처리를 더 잘
하고 싶다면 이들의
웹싸이트를
참고하기 바란다.
move / copy paste delete replace /
undo / find
문서 편집의
기본은 단연 파일
내에서의 이동과
복사, 붙여넣기,
삭제 등의 일이다.
vi는 명령 모드에서
간단한 키 조합으로
이런 작업을 빠르고
세밀하게 할 수
있도록 해준다.
당당한 Vimpire가 되기
위해 꼭 기억할 것이
있다 - 화살표 키나 PageUp/Dn
등 멀리 있는
키에까지 절대로 손을
뻗지 말자! vi의
내부 명령들은
키보드의 기본 위치
부근에 있는 것들,
즉 문자와 숫자,
기호, 제어키(Ctrl,
Shift 등)
정도만으로도 모두
이용할 수 있다.
 |
커서 이동 |
- h j k l - 문자
단위 이동
-
키보드에[26] 나열된
순서대로 왼쪽(h),
오른쪽(l), 그리고
위(k), 아래(j)
순이다. 이 편안한(?)
키들을 익히지
않고 끝까지
화살표 키를
고집하지
말기를!
- w b - 단어
단위 이동
-
이들은 한 단어를
단위로 해서 커서를
앞 뒤로 이동시킨다.
호기심이 많다면 w W b
B을 모두 실험해
보자.
어떤 줄 내에서 그
줄의 처음으로 가는
키는 |(파이프
문자), 마지막으로
가는 키는 $ 문자다
- 줄의 처음과
끝으로 가면서 입력
모드로 전환하는
키(I A)도 있음을
기억할 것이다.
- Ctrl-f / b -
페이지 단위
이동
-
Ctrl-f는
앞으로(forward), Ctrl-b은
뒤로(backword)
한 페이지씩 넘긴다.
또 강조하는데, PgUp/Dn
키를 이용하지
말자!
- gg G 123g - 문서,
줄번호 단위
이동
-
gg는 그 파일의
처음으로, G는
끝으로 단 번에
이동한다. 그리고
문서의 특별한 줄
번호로 곧바로
찾아가려면 원하는
줄
번호를
입력하고 G를
누른다. 예를들어
1G 명령은 gg와
같다. |
 |
복사, 붙여넣기,
삭제, 덮어쓰기 |
- y[move] -
복사하기 (yank)
-
y를 먼저 누르고
이동명령을 하면
실제 커서는
움직이지 않지만
해당하는 구간의
텍스트가
버퍼(buffers[27])에
저장된다. 예를들어
한 단어의 첫 글자
위에서 yw라고 하면
그 단어가, 한 줄의
임의 위치에서
y$라고 하면 그
위치에서 줄
끝까지의 내용이
복사된다. 복사된
내용을 어떤 위치에
붙여 넣으려면 일단
그 위치로 이동한
후, 다음에 소개되는
붙여넣기 명령을
한다.
자주 이용하는
복사명령은 대개 한
줄 전체에 대한
것이며 이때는 yy
명령을 하면
된다.
- p P -
붙여넣기 (paste)
-
위에서 소개한
복사하기 기능이
실제로 어떻게
동작하는지 확인해
보자. yy로 한 줄
전체를 복사한 후
p를 누르면 현재
줄의 다음 줄에,
그리고 P를 누르면
앞 줄에 내용이
삽입된다. 이것은
단어 단위 또는 단락
단위로 복사한
내용에 대해서도
마찬가지다 - 즉,
yw로 한 단어를
복사한 경우에도
p는 현재 커서의
다음 위치에, 그리고
P는 그 이전 위치에
(커서에 있는 문자를
뒤로 밀어내며)
내용이 삽입된다.
- d[move] x - 지우기
(delete)
-
입력 모드에서는
백스페이스(BackSpace)
키로써 "왼쪽으로"
한 글자씩 지울 수
있지만, 일반적으로
명령 모드에서는 이
키가 동작하지
않는다. 명령
모드에서 커서가
위치한 글자를
하나씩 지우려면
x를 이용한다; 이때
커서 위치는
고정되어 있고 대신
커서 이후의
문자들이 하나씩
"끌어당겨"지는 것에
주의.
복사하기 위해서
y와 이동명령을
차례로 누르는 것과
마찬가지로,
텍스트를 지울 때도
d와 이동명령을
이용할 수 있다.
예를들어 한 단어를
지울 때는 dw, 커서
위치에서 줄 끝까지
지울 때는 d$(또는
D)라고 하면 된다.
한 줄 전체를 지울
때도 yy와 유사하게
dd 명령을 한다.
참고로 어떤 단위로
삭제하더라도 그
삭제된 내용이 일단
버퍼에 기억됨을
'기억'하자.
- r R -
덮어쓰기 (replace)
-
현재 커서가
위치한 곳의 문자
하나를 다른 것으로
바꾸려 할 때,
그것을 x로 지우고
입력 모드로
전환해서 새 문자를
입력하는 수고를
하지 말자. 바꿀
문자에 커서를 둔 채
먼저 r을 한 번
누르고 새 문자를
입력하면 된다.
대문자 R을
누르면 Esc를
누르기 전까지
입력하는 모든
텍스트가 원래 있던
것을 덮어쓰며
입력된다.
- v Ctrl-v -
블럭 선택하기 (visual
block)
-
이들은 텍스트를
복사하거나 잘라낼
때 시각적인 블럭을
지정할 수 있도록
하는 명령이다. v를
누르고 커서를
움직이면 다들
익숙해져 있을
방식으로 텍스트가
선택되며, Ctrl-v의
경우 아래아한글
소프트웨어에서의
구역(열) 블럭과
같은 방식으로
선택된다. 이들
명령을 시작하면 vi
화면의 메시지(가장
아래 있는 한 줄)에 --
VISUAL -- 이라는 말이
보이고, 선택한
영역의 텍스트도
반전되어
나타나므로 다른
상태와 쉽게 구별할
수 있을 것이다.
블럭 선택을
취소하려면 Esc
키를 누른다.
블럭을 다
선택했다면
복사(y),
잘라내기(c - cut),
그리고 지우기(d)
명령을 할 수 있는데
- 잘라내기와
지우기는 사실상
차이가 없다. 앞서
언급했듯이, 지워진
내용도 일단 버퍼에
저장되어 버리기
때문이다. |
 |
되살리기, 문자열
검색 |
- u U -
되살리기 (undo)
-
방금 지운 내용을
되살리거나, 또는
입력한 내용을
취소하려면 u
명령을 한다. 이것을
계속 누르면 결국 그
문서를 처음 열었을
때의 상태로 가
버리므로 주의해서
이용하자.
- /[string] n N -
문자열 찾기 (find), 다음
찾기 (next)
-
명령 모드에서
슬래쉬(/) 문자를
누르면 가장 아래
줄에 / 라는
프롬프트가 뜨고,
커서의 위치도 그
프롬프트 문자의
바로 옆으로 간다.
만약 파일에서
찾고자 하는
문자열이 있으면 그
곳에 입력하고 엔터
키를 치면 된다.
예를들어 어떤
문서에서 "C P U"라는
문자열을 찾고
싶다면 /C P U, 이렇게
한다. 문서 안에
있는 해당하는
부분들이 반전되어
나타나고 커서는
처음 해당하는 "C P U"로
이동하게 된다.
이렇게 검색된
부분들을 따라
커서를 빨리
이동시킬 수 있다.
n 명령은 문서의
진행 방향으로,
그리고 N 명령은
반대 방향으로,
해당하는 문자열로
커서를
이동시킨다.
 |
/ 문자는 어떻게? |
슬래쉬 문자나
인용 부호 등 다른
의미로 오해받을 수
있는 특별한
문자들을
표현하려면
백슬래쉬
문자(\)를
이용한다.
예를들어 /home/jedi/ 라는
문자열을
찾으려면
/\/home\/jedi\/라고 하면
된다. 위의
보기에서 C P U 라는
문자열을
검색하는
경우에도 올바른
표현은 /C\ P\ U, 즉
공백문자도 \
문자로써 명확히
표현해 주는
것이다. 물론
백슬래쉬 문자
자체도 \\으로
표현할 수
있다. | |
set / substitution /
abbreviation
명령 모드에서 :
문자를 입력하면 Ex
프롬프트 상태로
가고, 몇 가지
예(저장, 종료 등)를
앞에서 접했다. Ex
프롬프트에서 할 수
있는 일은 어쩌면
지금까지 명령
모드에서 했던 것을
합친 것보다도 더
많을 수 있지만 이
문서에서 그 모든
것을 다 소개하진
않겠다. 자주 쓰이는
중에서도 쉽게
따라해 보고 활용할
수 있는 것들만
정리해 보자.
 |
자주 쓰이는 Ex 모드
명령들 |
- :set [option[=value]] -
편집 환경 설정
(setting)
-
먼저 :set 명령을
그냥 실행해 보면
누구 짓인진 몰라도
이런 저런
설정값들이
만들어져 있음을 알
수 있다. 이렇게
설정된 환경을
그대로 이용해도
되겠지만
필요하다면 다음과
같은 유용한 사용자
설정도 해보자.
:set nu # 줄 번호가 보이도록 (number)
:set cin # C/C++/Java 프로그래밍에서 자동 들여쓰기 (cindent)
:set ts=4 # 탭(tab) 문자의 너비; 여덟 자는 너무 크다. (tabstop)
보기에서처럼 nu, cin,
ts라고 쓰지 않고
길고 정확히 써도
물론
상관없다(예를들어
:set number). 그리고
설정한 내용을
해제하려면 :set
nonu처럼 no를 명시해
준다. 이상은
vi라는 프로그램의
동작에 관한 설정일
뿐, 실제 파일의
내용은 전혀 변화가
없음을 기억하라.
- :%s/old_string/new_string/g -
문자열 바꾸기 (substitution,
find and replace)
-
문자열을
대치하는 이 명령의
보다 장황한(?)
이용법은
:[range]/old_string/new_string/[option]이다.
하지만 실제
이용자들이 가장
자주 쓰는 형태는
"문서 전체에서" "단
번에" 바꾸는
것이다. 앞서 소개한
찾기(/[string]) 명령과
마찬가지로 공백
문자나 특수
문자들을 표현하기
위해 백슬래쉬
문자를 이용한다. 몇
가지 자주 쓰이는
예를 보며
참고하자.
:%s/_cpu/Computational Physics Unlimited/g
:%s/_phys/Department of Physics/c
:%s/\t/ /g
처음 명령은 문서
전체에서 "_cpu"를 찾아
전체 이름으로
대치시킨다. 두 번째
명령도 이와
유사하지만 global 대신
confirm
옵션을 이용해서
귀찮게도(?) 매번
대치시킬 것인지
물어본다. 세 번째
명령에서는 자주
쓰는 특수 키인 탭
키를 \t로
표현함을 알 수
있다(탭 키를 모두
찾아 공백 문자 두
개로 대치).
- :ab short very_long_string -
줄여 쓰기 (abbreviation)
-
줄여 쓰기 기능은
텍스트를 입력할 때
긴 문자열을 단 번에
입력하거나 또는
예상되는 오탈자를
자동으로 교정해
주는, 일반
워드프로세서에서도
흔히 이용되는
기능이다. 예를들어
:ab 3d 3-Dimension 명령을 한
이후로는 입력
모드에서 "3d"라고만
쳐도 저절로 "3-Dimension"이
입력된다.
이렇게 줄여 쓸 수
있는 문자열이
어떻게 정의되어
있는지 확인하려면
그냥 :ab 명령을
해보자. |
.vimrc .viminfo / :!(shell command) /
edit
vim은 다른
소프트웨어들과
마찬가지로 /usr/share/
아래에 있는 해당
디렉토리에서 설정
파일을 읽어들이며
동작한다. 그러므로
개인적으로 아무런
설정을 하지
않았다면 바로 그
파일에서 결정된
환경을 이용하게
된다. vi 자체가
열리는 파일의
확장자에 따라 문법
하이라이팅[28], 자동
들여쓰기 등
일반적으로 유용한
기능을 잘
제공하지만, 그래도
많은 이용자들이
저마다의 손 맛(?)을
원하기 때문에 각자
따로 정의한 설정
파일도 이용할 수
있도록 해 준다.
이것은 vi 뿐만
아니라 GNU/Linux
시스템에서
돌아가는 모든
소프트웨어들이
지키려고 하는
원칙이기도 하다.
 |
Vim의 사용자 설정
파일 |
- ~/.vimrc - 사용자
환경 설정 파일
-
각 이용자가
자신의 홈디렉토리,
즉 ~/에 놓아두고
이용할 수 있는
파일이다. 이 파일이
있는지 확인해 보고,
없다면 지금 만들어
보자. (여기선
간단히 abbreviation의
활용만 보임)
$ vi ~/.vimrc
ab _cpu Computational Physics Unlimited
ab _home http://cpu.phys.cau.ac.kr/
:wq # (명령 모드에서!) 저장하고 종료
이제부터는
자신이 vi를 실행할
때마다 이 파일의
내용이 읽혀지고,
따라서 어떤
파일에서든 _cpu, _home과
같이 짧은
입력으로도 전체
문자열을 입력할 수
있다. 보기로 든
것은 매우 간단한
경우지만,
빔파이어들의
소굴에 가보면
틀림없이 유용하게
설정된 ~/.vimrc 파일을
누구나 다운받을 수
있도록 배려해 줄
것이다. 자신이 직접
만들어 보고 싶다면
시스템에 설치된 Vim
패키지에 포함되어
있을 샘플을
복사해서 연구해
보자 -
/usr/share/vim/vim60/vimrc_example.vim.
- ~/.viminfo - vi가
생성하는 파일
-
한편, vi를
이용하다 보면
시키지도 않았는데
상당히 많은 것을
기억하고 있다는
사실을 알아챌
것이다. 예를들어
어떤 파일을
열었는데 예전에
종료했던 줄 번호로
알아서
찾아간다거나, 또는
Ex 모드에서 내렸던
명령들을 (마치 Bash의
히스토리처럼)
기억하는 등; 이렇게
각자가 vi를
이용했던 내역도
자신의 홈
디렉토리의 파일,
~/.viminfo에 저장된다.
~/.viminfo 파일을 열어
보면 vim 프로그램
자신이 만들었다;
재주 있으면 알아서
편집해 써라; 이런
말이 있을 것이다.
이 문서에서도 이와
똑같은 말을
해야겠다
:-) |
vi는 어지간해서
모든 명령어를 알
수도 없고, 또 그럴
필요도 없다. 처음
이것을 접한 많은
사람들은 누가
시키지도 않았는데
주요 명령어와
기능을 요약해서
모니터 옆에 붙이고,
그것에 먼지가 쌓일
때쯤 되면 "이제
나도 피 맛을
알아!"라면서 떼내어
버리곤 한다. 아마도
이런 도움말 카드를
빔파이어들의
온라인 소굴에서도
찾아볼 수 있을
것이다.
당연한
이야기겠지만, vi를
잘 아는 것보다 잘
이용하는 것이
중요하다. 하루종일
명령어들을
암기하고 있지 말고
틈나는대로 파일을
열어보고 또 내용을
편집해 보자!
그러다가 어느 날
문득 ... 다른 문서
편집 소프트웨어를
쓰면서 무의식 중에
h j k l : Esc 키를 열심히
누르고 있는 자신의
모습을 발견한다면
그 때가 바로 새로운
빔파이어가 탄생한
순간일 것이다.
 |
vi를 이용하는 몇
가지 팁 |
- :!(shell command) - 쉘
명령 실행
-
vi를 이용하는
중에 종종 쉘의 다른
명령 또는 다른
프로그램을
실행해야 될 때가
있다. 이 때는
다음과 같이 하자.
:!ls # Ex 프롬프트에서 ! 문자, 그리고 명령
:sh # 쉘로 잠시 빠져 나간다.
두 번째 명령 :sh은
vi 실행 중에 "잠시"
빠져 나가는 것이다.
따라서 쉘에서
작업이 끝나고 $ exit,
즉 쉘 종료 명령을
하면 다시 vi의
실행 화면으로
돌아온다.
- K - 함수에
대한 매뉴얼
페이지
-
GNU/Linux 시스템에서
매뉴얼 페이지를
참고하기 위해 man
명령을 한다고 했다.
vi로 편집 중인
상태에서 어떤 함수
이름 위에 커서를
놓고 Shift-k(K)를 눌러
보자. 예를들어 printf
함수 위에서 이렇게
하면 man 3 printf를
실행했을 때의
결과가 뜰
것이다.
- :e [filename] - 다른
파일 편집
-
현재 편집 중인
파일을 저장하고 또
다른 파일을
편집해야 된다면
굳이 vi를 종료할
필요가 없다. Ex 명령
모드에서 :e filename
명령을 하면 된다.
Bash의 기능처럼 이
경우에도 자체적인
자동 완성(auto-completion)
기능을 쓸 수 있어서
편집하려는 파일의
처음 몇 글자만
입력하고 Tab 키를
눌러서 전체 이름을
빨리 입력할 수
있다. |