vi
http://deliciouslearning.tistory.com/category/Anki%EB%A1%9C%20%EA%B3%B5%EB%B6%80%ED%95%98%EA%B8%B0/vi%20%EB%98%90%EB%8A%94%20vim%20%EC%9D%B5%ED%9E%88%EA%B8%B0
vim에서 글자 삭제하기
vim에서 글자를 삭제하는 것은 쉽다. 다른 텍스트 에디터와 마찬가지로 [Delete] 키나 [Backspace] 키를 누르면 된다. 하지만 항상 그렇듯이 vim에서는 효율적으로 다양한 삭제 작업을 수행할 수 있는 단축키를 갖고 있다. 이를 확인해보자.
가장, 기본적인 키는 x 로 현재 커서가 위치한 글자를 지운다. 우리가 흔히 사용하는 [Delete]와 비슷한 작용을 한다.
x → 커서가 아래에 있는 한 글자를 삭제
name age phone etc → x
↓
name ge phone etc
소문자 x키를 제외하면 삭제와 관련된 대부분의 키는 소문자 d키와 관련이 있다.
dw → 커서가 놓여 있는 단어를 삭제
name age phone etc → dw
↓
name phone etc
→ 다음 단어의 첫 글자 바로 전까지 삭제되고 커서는 다음 단어의 첫 글자에 위치하게됨
dd → 커서가 놓여 있는 행 전체를 삭제하고 다음 행이 현재 행으로 끌어올려진다.
아래와 같이 커서가 위치해 있는 상황에서 명령 모드에서 dd 키를 누르면
1 name age phone etc
2 name age phone etc
↓
2 name age phone etc
→ 원래 커서가 있던 1행이 지워지고 2행이 위로 끌어올려진다. 그리고 커서는 그 행의 가장 첫 글자에 위치한다.
※ 커서 아래에 행이 더이상 없다면 커서가 위치한 행이 지워지고 커서는 이전행으로 올라가 가장 첫 글자에 위치한다.
1 name age phone etc
2 name age phone etc
↓
1 name age phone etc
명령 모드에서 x, dw, dd 키는 앞에 숫자를 붙일 경우 해당 숫자 만큼 명령을 반복한다.
8x → 현재 커서 위치에서 8개 글자가 삭제
5dw → 현재 커서 위치에서 5개 단어가 삭제
7dd → 현재 커서 위치에서 7개 행이 삭제
이제 d 키와 다른 키를 조합해서 사용할 수 있다.
d^ → 캐럿(^)은 행의 첫 글자로 이동하는 키이므로 커서 위치에서부터 그 행의 첫 글자까지 삭제
d$ → 달러($)는 행의 마지막 칸으로 이동하는 키이므로 커서 위치에서부터 그 행의 마지막까지 삭제
dk → k는 커서를 위로 1행 움직이는 키이므로 커서가 있는 행과 그 위의 행을 전부 삭제
dj → j는 커서를 아래로 1행 움직이는 키이므로 커서가 있는 행과 그 아래의 행을 전부 삭제
그 외의 기타는 다음과 같다.
D → d$와 동일하게 커서 위치에서부터 그 행의 마지막까지 삭제
d0 → 커서 위치부터 행의 처음까지 삭제
d^은 행의 첫 글자까지 삭제이므로 첫 글자 앞에 공백이 있을 경우 공백을 지우지 않는다. 하지만 d0의 경우 행의 처음까지 삭제이므로 공백이 있을 경우 공백까지 깔끔하게 삭제한다.
vim의 화면 변경 및 스크롤
vim에서도 화면을 이동할 수도 있다.
커서를 중심으로 화면 변경
vim에서는 작업하기 편하게 커서를 중심으로 화면을 변경할 수 있다.
z[Enter] → 현재 커서가 위치한 행이 화면의 최상단이 되게끔 화면 변경
z. → 현재 커서가 위치한 행이 화면의 중앙이 되게끔 화면 변경
z- → 현재 커서가 위치한 행이 화면의 최하단이 되게끔 화면 변경
화면 스크롤
마우스의 스크롤 대신 키를 이용하여 화면을 스크롤할 수 있다.
다음은 반 화면 위 아래로 스크롤 하는 키들이다.
<Ctrl+u> → 반 화면 위로 스크롤
<Ctrl+d> → 반 화면 아래로 스크롤
※ Up과 Down으로 이해하면 쉽다.
다음은 한 하면 위 아래로 스크롤하는 키들이다.
<Ctrl+b> → 한 화면 위로 스크롤
<Ctrl+f> → 한 화면 아래로 스크롤
vim 기타 커서 이동(3)
vim은 마우스를 쓰지 않고 작업하는 것을 기본으로 하기 때문에 다양한 커서 이동 방식이 존재한다.
앞에서 커서를 단어 단위, 행 단위, 문장 단위, 공백인 행 단위로 움직이는 법을 배웠는데 이번에는 화면 내부에서 움직이는 법이다.
당연히, 모든 키는 명령 모드를 전제한다.
대문자 H → 현재 vim 화면의 최상단으로 커서 이동
대문자 M → 현재 vim 화면의 중앙으로 커서 이동
대문자 L → 현재 vim 화면의 최하단으로 커서 이동
※ High, Middle, Low로 생각하면 편하다.
화면 내에서 커서 이동에 대해서는 다음의 사진을 보면 이해하기 쉬울 것이다.
vim 화면에서 커서의 위치
이 사진은 vim의 화면이 현재 1행부터 23행까지 나타나 있다.
명령 모드에서 대문자 H를 누르면 화면의 최상단으로 커서가 이동하므로 커서는 1행에 위치해 있다.
대문자 M을 누르면 화면의 중앙인 12행에 위치하게 되고, 대문자 L을 누르면 화면의 가장 마지막 행인 23행으로 이동한다.
이때, 대문자 H키와 대문자 L키는 다음과 같이 응용할 수 있다.
[n]H → 현재 화면에서 커서를 위에서 n번째 행으로 이동(가령, 8H는 화면 상단에서 8번째 행으로 이동)
[n]L → 현재 화면에서 커서를 아래에서 n번째 행으로 이동(가령, 7L 화면 최하단에서 7번째 행으로 이동)
vim 기타 커서 이동(2)
커서의 위치를 주의깊게 보면서 아래의 내용을 확인해보자.
1) 왼쪽 괄호 '(' → 문장(sentence) 단위 첫 글자로 역방향 이동
명령 모드에서 왼쪽 괄호 '(' 키를 계속 누르면 다음과 같이 움직인다.
문장 단위 첫 글자 역방향 이동 사례
이 사례를 보면 문장(sentence)의 단위는 이어진 행들과 공백인 행을 각각 하나의 문장으로 본다는 것을 알 수 있다.
①에서 ②로 이동하는 것은 문서의 역방향으로 탐색했을 때 처음으로 만나는 문장의 첫 글자이기 때문이다.
③의 공백인 행은 첫 글자가 없어도 해당 빈칸으로 이동한다.
④에서 가장 첫 번째 행에 도달했고 더 이상 이전 문장이 없기 때문에 ⑤번처럼 가장 첫 번째 행의 가장 첫 번째 칸으로 이동한다.
2) 오른쪽 괄호 ‘)’ → 문장 단위 첫 글자로 정방향 이동(다음 문장의 첫 글자로 이동)
명령 모드에서 오른쪽 괄호 ')' 키를 계속 누르면 다음과 같이 움직인다.
문장 단위 첫 글자 정방향 이동 사례
③에서 마지막 문장이 첫 글자로 이동한 후에 다음 문장이 없을 경우 ④처럼 가장 끝으로 이동한다.
3) 왼쪽 중괄호 ‘{’ → 공백인 행으로 역방향 이동(이전 공백인 행으로 이동)
명령 모드에서 왼쪽 중괄호 '{'룰 계속 누르면 아래와 같이 커서가 이전의 공백인 행으로 점프한다.
공백인 행으로 역방향 이동 사례
④번처럼 더 이상 공백인 행이 남아 있지 않을 경우 가장 처음으로 이동한다.
4) 오른쪽 중괄호 ‘}’ → 공백인 행으로 정방향 이동(다음 공백인 행으로 이동)
명령 모드에서 오른쪽 중괄호 '}'룰 계속 누르면 아래와 같이 커서가 다음 공백인 행으로 점프한다.
다음 공백인 행으로 이동 사례
④번처럼 더 이상 공백인 행이 남아 있지 않을 경우 가장 끝으로 이동한다.
5) 원하는 문서 위치로 바로 이동
[n]gg → n 번째 행으로 이동, 숫자를 생략할 경우 문서의 맨 처음으로 이동
[n]G → n 번째 행으로 이동, 숫자를 생략할 경우 문서의 맨 마지막으로 이동
:n → n 번째 행으로 이동
<Ctrl + g> → 커서가 문서 전체에서 현재 어떤 위치에 있는지 확인(Ctrl키를 누르면서 g 키를 눌러야 한다.)
vim의 커서 이동 키
일반적인 텍스트 에디터와 마찬가지로 vim에서도 화살표 키를 눌러 커서를 이동할 수 있다. 그렇지만 vim은 명령 모드에서는 h, j, k, l 키들을 화살표 키처럼 사용할 수 있다.
소문자 k = ↑
소문자 h = ←
소문자 l = →
소문자 j = ↓
h, j, k, l 과 화살표를 단순하게 매칭하면 낯설기 때문에 이 키들을 아래처럼 시계방향으로 그려보면 조금 편하게 익숙해진다.
k(↑)
(←)h l(→)
j(↓)
화살표 키는 명령 모드와 편집 모드에서 전부 사용할 수는 있지만 h, j, k, l은 명령 모드에서만 사용된다. 그럼, 화살표 키를 쓰는 것이 편하고 더 낫지 않을까?
아쉽지만, vim을 공부하다 보면 h, j, k, l과 결합된 단축키가 많이 등장한다. 또, vim에서는 대부분의 명령어 앞에 숫자를 붙여서 동일한 명령을 수회 반복할 수 있는데 이렇게 숫자를 결합해서 쓸 경우에도 h, j, k, l 이 더 유리하다. 마지막으로, h, j, k, l 에 익숙해지면 손이 키보드의 중심에서 벗어나지 않아 빠르고 효율적이 되기 대문에 결국 h, j, k, l에 익숙해지는 것이 좋다.
다음의 명령어에서 [n]은 숫자를 의미하며 명령 모드에서 10k, 5l, 3j, 8h 와 같이 키를 누르면 된다.
[n]k → 위로 n행, 숫자 생략할 경우 1행 이동
[n]l → 오른쪽으로 n칸, 숫자 생략할 경우 1칸 이동
[n]j → 아래쪽으로 n행, 숫자 생략할 경우 1행 이동
[n]h → 왼쪽으로 n칸, 숫자 생략할 경우 1칸 이동
vim 기타 커서 이동(1)
vim의 커서 이동은 상하좌우 외에 다양한 방식의 이동이 가능해서 익숙해지면 매우 효과적으로 작업할 수 있게 도와준다.
커서의 위치를 주의깊게 보면서 아래의 내용을 확인해보자.
1) 캐럿(^) 키는 커서가 위치한 행의 첫 글자로 이동
name age phone etc → 캐럿(^)
name age phone etc ← 이렇게 된다.
첫 글자로 이동하므로 첫 글자 앞에 공백이 있어도 그 공백으로는 가지 않는다.
2) 달러($) 키는 커서가 위치한 행의 마지막 칸으로 이동한다.
name age phone etc → 달러($)
name age phone etc ← 이렇게 된다.
달러($)는 캐럿(^)과 달리 마지막 칸이 공백일 경우에는 공백으로 이동한다.
3) w or W → 단어의 첫 글자로 정방향 이동(다음 단어의 첫 글자로 이동)
name age phone etc → w or W
name age phone etc ← 이렇게 된다.
4) b or B → 단어의 첫 글자로 역방향 이동(이전 단어의 첫 글자로 이동)
name age phone etc → b or B
name age phone etc ← 다시 누르면
name age phone etc ← 이렇게 된다.
단어의 첫 글자로 역방향 이동이므로 커서가 위치한 글자가 현재 단어의 첫 글자가 아닐 경우 현재 단어의 첫 글자로 우선 이동하게 된다.
5) 플러스(+) 키는 다음 행의 공백이 아닌 첫 글자로 이동
이 상태에서 플러스(+) 키를 누르면
name age phone etc
john 10 000-0000 male
다음 행의 공백이 아닌 첫 글자로 이동
name age phone etc
john 10 000-0000 male
6) 마이너스(-) 키는 이전 행의 공백이 아닌 첫 글자로 이동
이 상태에서 마이너스(-) 키를 누르면
name age phone etc
john 10 000-0000 male
이전 행의 공백이 아닌 첫 글자로 이동
name age phone etc
john 10 000-0000 male
vim 모드 전환
앞에서 vim의 모드에 대하여 간단한 포스팅을 올린 바 있다. 그 내용은 명령(command) 모드와 편집(insert) 모드가 있다는 것이다.
대부분의 작업은 명령 모드에서 이루어진다. 편집 모드는 글자를 입력하는 역할만 하고, 편집, 수정, 삭제, 각종 명령 등 모두 명령 모드에서 이루어진다. 따라서 vim에서의 작업은 명령 모드와 편집 모드의 끊임없는 전환의 형태로 이루어지고 이것에 익숙해져야 한다.
편집 모드 → 명령 모드
편집 모드에서 명령 모드로 전환하는 키는 Esc 키다. 그런데 Esc 키가 키보드에서 누르기 어려운 위치에 있으므로 이것을 대체하는 키가 있는데 그것이 바로 <Ctrl+[> 키다. (< >로 묶인 키는 동시에 누른다. 즉, Ctrl 키를 누른 상태에서 [ 키를 누른다.)
편집 모드에서 Esc 키, <Ctrl+[> 키를 누르면 명령 모드로 전환
명령 모드 → 편집 모드
명령 모드에서 편집 모드로 전환할 때는 필요에 따라 사용할 수 있는 다양한 방식이 있다.
아래의 사례들은 모두 명령 모드에서 누르는 단축키다. 커서의 위치에 주목해서 살펴보자.
i → i(insert)는 현재 커서 위치에서 편집 모드로 전환한다.
I have a dream! → i를 누른다.
I have a dream! → 커서의 위치는 바뀌지 않고 편집 모드로 변경
a → a(append)는 현재 커서 위치 다음 칸에 첨가되고 편집 모드로 전환
I have a dream! → a를 누른다.
I have a dream! → 커서가 한칸 오른쪽으로 이동해서 편집 모드로 전환
A → 현재 커서가 위치한 행의 끝에서 첨가되고, 편집 모드로 전환
I have a dream! → A를 누른다.
I have a dream! → 현재 행의 끝으로 이동해서 첨가
I → I는 현재 행의 맨 앞으로 커서가 이동해서 편집 모드로 전환
I have a dream! → I를 누른다.
I have a dream! → 현재 행의 맨 처음으로 이동해서 끼워넣기
s → 커서가 위치한 글자를 지우고 편집모드로 전환
I have a dream! → s를 누른다.
I have a drem! → 커서가 위치한 글자가 지워짐
o → o(open line)는 커서가 있는 행 아래에 새로운 행을 만들어 커서를 위치시킨 후 편집 모드로 전환
아래의 상황에서 o 키를 누른다.
I have a dream!
I want to be an excellent programmer.
원래 커서가 있던 행의 아래에 새로운 행이 생기고 커서의 위치가 새로운 행의 처음으로 이동한다. 편집 모드로 전환된다.
I have a dream!
I want to be an excellent programmer.
O → 커서가 있는 행 위에 새로운 행을 만들어 커서를 위치시킨 후 편집 모드로 전환
아래의 상황에서 O 키를 누른다.
I have a dream!
I want to be an excellent programmer.
원래 커서가 있던 행의 위에 새로운 행이 생기고 커서의 위치가 새로운 행의 처음으로 이동한다. 편집 모드로 전환된다.
I have a dream!
I want to be an excellent programmer.
cc → 커서가 위치한 행이 지워지면서 편집 모드로 전환
다음과 같은 상황에서 cc를 누르면 그 행의 내용이 전부 지워지면서 편집모드로 전환
I have a dream!
I want to be an excellent programmer.
I have a dream!
→ 기존의 있던 내용이 전부 지워지고 커서가 처음으로 이동되면서 편집모드로 전환
r → 명령 모드에서 한 글자만 바꿀 때 사용한다. 한 번 글자키를 눌러 변경하면 다시 명령 모드로 돌아와 입력이 되지 않는다.
I want → 명령 모드에서 r을 누르고 c를 누르면
I cant → 기존의 w자가 c자로 변함
R → 명령 모드에서 R키를 누르면 바꾸기 모드가 되면서 원래 있던 글자를 덮어 쓰면서 입력된다.
vim 실행하기
vim을 실행하고자 할 때는 프롬프트에서 vim 이라고 입력하면 된다. 특정 파일을 열면서 실행하고 싶다면 vim [열고 싶은 파일 이름] 형식으로 입력하면 된다.
$ vim → vim 실행
$ vim test.txt → vim이 test.txt 파일을 열면서 실행
vim 종료하기
vim을 종료하고 싶다면 명령 모드에서 :q 또는 :quit 라고 입력하면 된다. 그러면 명령 라인에 :q 또는 :quit 명령어가 보이게 되고 [Enter] 키를 눌러 입력하면 종료된다. (:q 로 기억하자)
:q
vim을 종료할 때 아무런 변경 사항이 없다면 아무런 문제 없이 종료되겠지만, 변경 사항이 있다면 저장이 되지 않았다는 내용의 에러 메시지가 나오면서 종료가 되지 않는다. 이 경우 저장하지 않고 종료하려면 느낌표(!)를 q 뒤에 붙여주면 된다.
:q!
※ 느낌표(!)는 vim에서 명령을 강제로 실행하라는 의미이다.
vim 파일 저장하기
강제 종료는 부득이한 상황에 하는 것이고 대부분의 경우 제대로 저장을 하고 종료해야 한다. 윈도우즈에서의 저장은 Save지만 vim 계열은 디스크에 쓴다라는 의미에서 Write 라고 한다. 따라서 명령어는 :write 혹은 :w 이다. (:w 로 기억하자)
:w → 원래 파일 이름으로 저장
:w test.txt → test.txt라는 이름으로 저장
:w > file.txt → file.txt 파일에 덧붙여 저장
저장하고 종료가 같이 이루어지는 경우가 많다. 그래서 저장 명령인 w 와 종료 명령인 q를 합쳐서 :wq 로 명령하는 경우가 많다. 혹은 명령 모드에서 ZZ 키를 눌러 바로 저장하고 종료할 수 있다.
:wq → 원래 파일 이름으로 저장하고 종료
:wq test.txt → test.txt라는 이름으로 저장하고 종료
ZZ → 원래 파일 이름으로 저장하고 종료(명령라인 모드 명령이 아님, 명령 모드에서 대문자 ZZ)
vim 파일 불러오기
마지막으로 vim에서 원하는 파일을 열고 싶을 때는 :e [파일명] 형식으로 원하는 파일을 불러온다.
:e file.txt → file.txt 파일을 불러옴
vim에서 기준이 되는 모드는 명령(command) 모드이다. vim은 명령 모드에서 단축키로 빠르게 대부분의 일을 처리하지만 단축키로는 복잡한 명령을 내리는데 한계가 있기 때문에 복잡한 명령을 내릴 방법이 별도의 방법이 필요하다. 그 방법으로 vim은 명령 라인에 복잡한 명령을 직접 입력하는 방식을 선택했다.
명령 모드에서 콜론(:), 슬래쉬(/), 물음표(?) 키를 누르면 아래의 명령 라인에 명령어를 입력할 수 있게 된다. 아래의 사진은 명령 모드에서 콜론(:) 키를 누른 것으로 가장 하단에 콜론(:)이 입력되는 것을 확인할 수 있다. 이후에 눌려지는 키는 계속 그 줄에 입력이 되므로 명령 라인에 명령어를 입력할 수 있는 상태가 된다. 이 콜론(:)이 입력된 행(Row)을 명령 라인이라고 부른다. 명령 라인을 사용할 수 있는 상태를 명령라인 모드, Ex 모드 등으로 부르기도 한다.
앞서 본 vim 종료 명령도 이 명령 라인에 :q!를 입력한 것이다.
:q!
슬래쉬(/) 키나 물음표(?) 키를 누르면 콜론(:)키와 마찬가지로 명령 라인에 슬래쉬(/) 키나 물음표(?) 키가 입력되면서 명령 라인을 사용할 수 있는 상태가 된다.
슬래쉬(/) 키나 물음표(?) 키를 누른 후 찾으려는 패턴을 입력하면 패턴이 나오는 곳으로 커서가 이동하는데 슬래쉬(/) 키는 정방향(문서의 아래 방향) 탐색, 물음표(?) 키는 역방향(문서의 위 방향) 탐색이다. 슬래쉬(/) 키와 물음표(?) 키에 의한 탐색은 후에 패턴을 지정하는 정규 표현식(Regular Expression)과 함께 다시 논의하기로 한다.
명령 라인은 대부분 콜론(:) 키를 이용하여 vim 설정 명령, 파일 관련 명령, 편집기 명령 등 다양하고 복잡한 명령을 입력하는데 사용한다.
명령 라인에서 다시 명령 모드로 돌아오려면 Esc 키를 누르면 된다. 물론, 명령어를 명령 라인에 입력하고 Enter 키를 치면 명령을 실행하고 명령 모드로 돌아온다.
팁: Esc 키는 키보드에서 조금 누르기 힘든 위치에 있다. 그래서 이것을 대체하는 키가 있는데 그것이 바로 <Ctrl+[> 키다. (< >로 묶인 키는 동시에 누른다. 즉, Ctrl 키를 누른 상태에서 [ 키를 누른다.)
vim이 좋다는 사실에 동의하지만, 시간도 부족하고 그걸 다시 익히는 지난한 과정을 생각하면 선뜻 손이 가지 않는 사람들이 많을 것이다.
바쁘게 사는 현대인들 중에 vim을 붙잡고 단축키를 외울 여유가 있는 사람이 얼마나 되겠는가?
그런데, 약간 오해가 있는 것 같다.
vim을 일반적인 텍스트 에디터처럼 글을 작성하고 편집하는 수준에 오르는데는 그리 많은 시간이 필요하지 않다.
이 부분에서는 마치 vim의 모든 단축키를 외우고 이를 활용할 수 있어야만 vim이 사용가능하다는 식의 오해가 있는 것 같다.
물론, 수많은 단축키와 명령어들을 알면 알수록 vim을 보다 빠르고 효율적인 작업이 가능하다.
하지만 그런 단축키와 명령어들을 모른다고 해서 보통 사람들이 처음 텍스트 에디터를 더듬거리면서 조작하는 초보적인 수준의 에디터 사용이 불가능한 것은 아니다.
이런 초보적인 수준의 vim 사용이 가능해지는데 도움을 주는 것이 바로 vim 튜토리얼이다.
보통, vim을 설치하면 vimtutor라는 프로그램이 같이 설치되는데, 바로 이 vimtutor가 vim의 튜토리얼이다.
프롬프트에서 다음과 같이 명령어를 작성하고 [Enter]를 친다.
$ vimtutor
그러면 다음과 같은 화면이 나온다.
vim 튜토리얼은 어떤 키를 누르고 어떤 행위를 할 것이지 하나하나 친절하게 가르쳐주고 있어서 그대로 읽고 따라하다 보면 25~30분 정도 후 vim을 일반적인 텍스트 에디터 수준으로 사용할 수 있게 된다.
본인도 vim을 사용하면서 처음 한번은 포기했는데, 이미 익숙한 방식과 vim의 방식이 서로 혼동되면서 불편해졌기 때문이다. 그리고 단순히 단축키를 외우는 것 만으로는 vim에 익숙해지는 것이 매우 어려웠다.
하지만 vimtutor를 통해 실습을 하면서 몸에 익게되면서 어느 정도 사용이 가능해지게 되면서 조금 편안해지게 되었다.
역시, 뭐든지 우선 몸이 익숙해지는 과정이 반드시 필요한 것 같다.
vi는 1976년에 태어난 에디터이다.
마우스는 아직 만들어지지 않았고 모든 것을 키보드 위의 자판만을 이용해서 에디터를 조작해야 하는 시절이었다.
그런데 키보드의 자판은 대부분 글자를 입력하는데 사용되어야 하니 자판을 타이핑 외 다른 조작에 사용하려면 별도의 명령 모드(command mode)를 만들 수밖에 없다.
그래서 vi는 명령(command) 모드와 타이핑으로 글자를 입력하는 편집(insert)모드를 갖고 있는 것이고 오늘날까지 이어져 vim도 동일한 모드를 갖고 있게 된 것이다.
우선, vim을 실행해보자. vim이 설치되어 있다면 다음과 같이 명령하여 실행한다.
$ vim
다음과 같은 화면이 보인다.
이 화면에서 여러 키를 눌러보면 자판이 입력되지 않는다는 것을 알 수 있을 것이다.
왜냐하면 현재, vim은 명령 모드이기 때문이다.
타이핑을 하고 싶다면 키보드에서 i 키를 눌러 편집 모드로 들어간다.
'끼워넣기' 또는 'insert' 표시가 나타나면 편집 모드에 들어온 것이다.
이 상태에서 "Hello everyone! :D" 라고 타이핑 한 것이 아래의 화면이다.
타이핑이 끝나면 [Esc] 키를 눌러 다시 명령 모드로 돌아온다.
이제 vim을 종료해야 한다. 명령 모드에서 다음과 같이 :q!를 입력한다.
:q!
그러면 화면 하단의 가장 마지막 줄에 동일한 명령어가 입력되는 것을 확인할 수 있다.
이 상태에서 [enter]를 눌러 명령어를 입력하면 vim이 종료된다.
vim은 명령 모드를 표준으로 채용하고 있다. 왜냐하면 실제로 vim을 사용해보면 커서의 이동같은 사소한 행위부터 다른 파일을 병합하고 셸 명령을 실행시키는 일까지 대부분의 작업이 명령 모드에서 이루어지기 때문이다. 오히려 타이핑으로 글자를 입력하는 작업은 생각외로 많지 않다. 그래서 모든 작업을 명령 모드에서 수행하다가 필요할 때마다 잠깐씩 편집 모드로 들어가서 입력하고 다시 명령모드로 돌아와서 작업하는 식으로 일이 이루어지는 경우가 많다. 아마도 이런 모드 전환을 하는 방식에서 vim을 처음 사용하는 사람들이 크게 이질감을 느끼고 익히기를 포기하는 경우가 많이 발생한다.
나중에라도 간단하게 기억을 환기시키기 위하여 Anki 파일을 만들었으니 이용하고 싶으신 분은 다운로드 하시면 됩니다.
프로그래밍을 익히려고 하면 필수적으로 익혀야할 유틸리티(utility)들이 있다.
텍스트 에디터도 그 중 하나다.
시중에 나와있는 무료 텍스트 에디터들을 몇 가지 추천받아 사용해보았다.
메모장, gedit, Atom, Notepad++, vi 또는 vim(이하 그냥 vim이라고 하겠다) 등을 사용해보았고 어떤 것이 가장 좋은지 고민에 고민을 거듭했다.
가장 쓰기 편한 것은 Notepad++와 Atom이었고 메모장과 geidt는 너무 기본적인 에디터였다.
그리고 vim은 정말 쓰기 어려운 최악의 에디터였다.
그렇다면 Notepad++와 Atom이 가장 합리적인 선택일 것이다.
그럼에도 vim을 써야겠다고 판단한 것은 과거의 경험 때문이다.
나는 군대에서 한글을 배웠고 당시 한글은 단축키를 쓰는 부류와 마우스를 쓰는 부류로 나뉘어져 있었다.
그리고 마우스를 쓰는 경우보다 단축키를 잘 쓰는 경우가 생산성이 훨씬 좋았고 프로그램에 대한 일체감이 무척 뛰어났다.
즉, 문서 편집이 거의 생각의 속도로 이루어지고, 스스로가 한글 워드프로세서가 된 느낌을 받았었다.
당연히, 문서 관련 일에 대한 심리적 부담도 상당히 적고 생산성도 뛰어날 수밖에 없었다.
그래서 당시 나의 사수는 한글을 가르치면서 내가 마우스에 손을 대지 못하게 옆에서 감독했다.
이런 경험에 비추어 볼 때, 모든 것을 키보드 위에서 작업하는 것이 쉬운 일은 아니지만 숙련되기만 한다면 그 이득이 이루 말할 수 없을 것이 분명하다는 확신이 들었다.
그리고 그런 점에서 vim이 가장 충실했기 때문에 결국, vim을 익혀야겠다는 결론에 도달했다.
나의 이런 생각을 뒷받침해주는 것이 사람들이 보여주는 vim에 대한 높은 충성도다.
vim을 싫어하는 사람들도 많은 것 같지만 제대로 사용해본 사람들은 vim에서 벗어나지 못하는 까닭이 무엇일까?
단지, 전통적으로 사용되어온 텍스트 에디터라서 사람들이 충성한다는 생각은 들지 않는다.
오히려 vim에서 느낀 생각의 속도로 편집되는 높은 일체감과 생산성을 다른 텍스트 에디터에서는 맛보기 어렵기 때문이 아닐까?
이외에도 다양한 OS에서 사용할 수 있다는 범용성과, 임베디드 부터 웹까지 모든 작업에 이용할 수 있다는 장점도 있다.
이러저러한 정황을 볼 때 vim을 익힌다면 손해는 보지 않을 것이고 반드시 이득라는 점은 거의 확신할 수 있다.
그렇다면 마지막 남은 문제는 과연 제대로 숙달할 수 있을 것인가 하는 점이다.
vim은 결국 숙달할 수 없다면 최악의 텍스트 에디터일 것이기 때문이다.
예전 같으면 숙달하기 어렵다는 점 때문에 결국, 포기할테지만 다행히도 숙달은 vim을 익히기 위한 튜토리얼과 Anki의 도움을 받으면 큰 무리없이 숙달할 수 있을 것으로 보인다.
그리고 마지막으로 vim을 쓴다고 하면 어째서인지 조금 멋있어 보였다는 것이 내 결정에 상당한 영향을 미쳤다는 점도 첨언하는 바이다.
그럼 오늘부터 vim을 한번 내 것으로 만들어보자.
출처: http://deliciouslearning.tistory.com/210?category=660315 [책 씹어먹는 즐거움]
'Programing > Linux' 카테고리의 다른 글
Linux 서버 구축-crontab 설치 (서버에 설치 안 되었을 경우) (0) | 2018.08.25 |
---|---|
Linux 서버 구축-DNS Server (0) | 2018.08.25 |
[하얀배터리-리눅스]ubuntu/xubuntu/kubuntu/gnome (0) | 2018.07.07 |
[리눅스-하얀배터리]-리눅스 쉘의종류 (0) | 2018.07.01 |
[리눅스-하얀배터리] 아카이브 / 압축 명령어 /tar/gzip/zcat/gunzip/bzip2 (0) | 2018.06.19 |