'vim 강좌'에 해당되는 글 4건


안녕하세요 피터입니다.

오늘은 vim에서 범위를 지정하는 방법을 소개해드리겠습니다.

앞어 강좌에서 복사, 붙여넣기, 삭제 등의 기능을 살펴봤는데요. 이 기능들을 좀 더 효과적으로 사용하기 위해서는 범위 지정에 대해 알고 있어야 합니다. 


범위 지정하기

vim에서 범위를 지정하는 방법은 크게 두 가지 방법이 있습니다. 

첫 번째 방법명령행 모드에서 명령어를 입력할 때 범위를 지정하는 방법이고, 

두 번째 방법비주얼 모드에서 범위를 선택해서 지정하는 방법입니다. 


명령어를 특정 범위에 적용하는 동작은 같지만 사용하는 방법이 다릅니다. 

한 가지 방법만 알고 있어도 사용하는데 크게 문제는 없으나, 상황에 따라 더 편리한 방법이 존재하고 별로 어렵지도 않으니 두 가지 방법 모두 익혀두시고 사용하시기 바랍니다.


명령행 모드에서 범위 지정하기

우선 범위 지정할 때 사용되는 특수 기호들에 대해 알아보겠습니다.

 특수기호

 설명

 .

 현재 행.

 $

 마지막 행.

 +#

 현재 위치에서 #만큼 아래 행.

 -#

 현재 윛치에서 #만큼 위 행.

 %

 파일 전체.

위 특수기호를 활용하면 명령행 모드에서 효과적으로 범위 지정을 할 수 있습니다.

아래에 몇 가지 예를 소개합니다.

 명령어 (명령행 모드)

 설명

 :20d

 20행 삭제(잘라내기). 

 :10,20d

 10~20행 삭제(잘라내기). 

 :10,$d

 10~마지막 행 삭제(잘라내기). 

 :%y

 파일 전체 복사. 

 :.,+10y

 현재 행부터 아래 10행 복사.

위 명령어를 응용해서 몇 번 범위 지정을 해보면 금새 익숙해질겁니다.


비주얼 모드에서 범위 지정하기 (영역 선택하기)

앞서 vim 모드 이해 편에서 비주얼 모드에 대해 배웠습니다.

[Vim] vim 모드 이해


비주얼 모드로의 전환은 또는 V 키를 통해 가능합니다.


v(소문자)는 현재 커서를 시작으로 블록을 지정할 수 있습니다.


 V(대문자)는 현재 커서가 위치한 행부터 행 단위로 블록을 지정할 수 있습니다.



그리고 vim은 열단위 블록 지정을 지원합니다. ctrl + v 키 or ctrk + q (윈도우 환경에서는 ctrl + v 가 붙여넣기 동작이므로 ctrl + q 를 사용하시면 됩니다)를 누르면 현재 커서를 기준으로 열(Column)단위로 블록을 지정할 수 있습니다.



비주얼 모드에서 범위를 선택 한 후 명령을 입력하면 선택한 범위에 대해 명령어가 동작합니다. 

이 같은 방법으로 좀 더 직관적으로 선택한 블록을 삭제(잘라내기), 복사할 수 있습니다. 


-Peter의 우아한 프로그래밍

여러분의 댓글은 저에게 크나큰 힘이 됩니다. 오류 및 의견 남겨주시면 감사하겠습니다.


블로그 이미지

친절한 Peter Ahn

IT 정보 공유, 프로그래밍 지식 공유

댓글을 달아 주세요

vim에서 커서 이동하기

vim가 개발된 시기에는 마우스가 없었기 때문에 커서를 조작하기 위해서는 키보드를 이용해야 합니다. 

일반적으로 키보드의 화살표 키나 PageUP/Down, Home, End 키 등을 사용해서 커서이동을 할 수 있습니다. 그런데 vim에서는 이 밖에도 별도의 영문 키로 커서 이동이 가능한데요, 이것은 vim이 개발되던 당시의 키보드는 텐키(키보드 우측에 숫자가 있는 부분)나 화살표 키 등이 없는 형태였기 때문에 별도의 키로 구현이 된 것입니다. 

요즘 나오는 키보드에 화살표키가 없는 경우는 굉장히 드물지만 오른손의 동선을 최소화할 수 있고 향후 포스팅할 자동화 매크로 기능에서도 영문자 키를 이용한 커서 이동이 활용되기 때문에 알아두시는게 좋습니다. 

vim 에서 사용되는 모든 명령은 대소문자를 구분합니다. 일반모드를 포함해서요. caps lock 키가 ON 된 상태에서 일반모드에서 평소처럼 명령어를 입력하면 전혀 다른 명령어로 인식하기 때문에 주의가 필요합니다.  


1. 커서 이동 (영어 소문자)

vim에서 사용되는 영문자 커서 이동 키는 다음과 같습니다.

←(h) ↓(j) ↑(k) →(l)

키보드에서 h, j, k, l 순으로 배열되어 있으니 적응하는데는 어려움이 없으실 거라 생각합니다. 단, 반드시 소문자로 입력하셔야 제대로 동작합니다. 

vim에서 커서 이동과 같이 반복되는 명령의 경우 반복횟수를 지정하여 한번의 명령어로 여러번 동작할 수 있습니다. 

예를들어 일반모드에서 5h 라고 입력하면 커서가 왼쪽으로 이동합니다. 마찬가지로 10k 이렇게 입력하면 커서가 위로 10행 이동합니다. 

h,j,k,l 키 외에 많이 사용되는 커서 이동 키가 있습니다. 공백을 제외한 현재 행의 맨 앞으로 이동하는 키인 ^ 키와 행의 맨 뒤로 이동하는 $ 키입니다. 

커서 이동 명령을 정리하면 다음과 같습니다.

 command

description 

 [#]h

#칸 왼쪽으로 커서 이동

 [#]j

#칸 오른쪽으로 커서 이동 

 [#]k

#칸 위쪽으로 커서 이동

 [#]l

#칸 아래쪽으로 커서 이동

 ^

공백을 제외한 현재 행의 맨 앞으로 커서 이동

 $

현재 행의 맨 뒤로 커서 이동 

[ ] 괄호로 된 부분은 생략이 가능하며, 생략 시 1을 입력한 것과 동일하게 동작합니다.


2. 화면 단위 커서 이동

커서 이동 명령인 j, k로는 한칸씩만 이동이 가능하기 때문에 내용이 많은 문서를 편집할 때 불편함이 있습니다. 물론 10j, 10k 이런식으로 n개의 행만큼 이동이 가능하지만 불편하기는 마찬가지입니다.

이럴 때는 화면 단위로 스크롤하는 키를 활용하면 편리합니다. 

 command

description 

 ctrl+b

위로 한 화면 스크롤 (PageUp 키와 동일)

 ctrl+f

아래로 한 화면 스크롤 (PageDown 키와 동일)

 ctrl+u

위로 1/2 화면 스크롤

 ctrl+d

아래로 1/2 화면 스크롤



3. 특정 행으로 커서 이동

대용량 문서를 편집할 경우에는 한 화면씩 스크롤 하는 것으로도 부족할 때가 있습니다. 특히 문서의 맨 뒤나 맨 앞으로 가는 경우에 한번에 이동하는 키를 알아두면 편리합니다.

 command

description 

[#]gg

#행으로 이동 (# 생략 시 첫 번째 행으로 이동)

[#]G

#행으로 이동 (# 생략 시 마지막 행으로 이동)

:#

#행으로 이동

gg, G 명령은 주로 #을 생략하고 첫 번째 행이나 마지막 행으로 이동할 때 사용합니다. 

특정 행으로 이동하는 것은 명령행 모드에서 입력(:#)하는 방법을 주로 사용합니다.

현재 행이 몇 번째 행인지 알고 싶을 때는 일반모드에서 ctrl+g 키를 입력하면 하단에 현재 편집중인 문서와 행이 표시됩니다.


-Peter의 우아한 프로그래밍

여러분의 댓글은 저에게 크나큰 힘이 됩니다. 오류 및 의견 남겨주시면 감사하겠습니다.



블로그 이미지

친절한 Peter Ahn

IT 정보 공유, 프로그래밍 지식 공유

댓글을 달아 주세요


이제 본격적으로 vim 의 사용법에 대해 알아보겠습니다.


파일 열기


리눅스 쉘 프롬프트 상에서 vim hello.c 이렇게 명령어를 입력하면 vim 이 실행되면서 hello.c 파일이 열립니다.

만약에 hello.c 파일이 존재하지 않는 다면 새로 생성합니다.




이렇게 새로 생성하게 되면 하단에 “hello.c” [새 파일] 이라고 표시가 됩니다.

하지만 vim에서 저장을 하지 않으면 실제로 파일이 생성되지는 않습니다. (메모리 상에만 존재하는 거죠)



vim이 처음 실행되면 일반 모드로 시작되기 때문에 바로 편집을 할 수 없습니다. 

i 키를 통해 입력 모드로 전환해서 편집을 해보겠습니다.



입력 모드로 진입하면 하단에 -- 끼워넣기 -- 라고 표시가 됩니다.

(한글이나 워드 등에서 삽입 모드와 같습니다)



저장하기


편집이 끝나면 저장을 해야 합니다.


우선 ESC 키를 입력해 일반 모드로 전환한 뒤 : (콜론) 키를 입력하여 명령행 모드로 전환합니다.


그러면 화면에 : 프롬프트가 나타납니다.

여기에 저장하는 명령어(w)를 입력하고 Enter 키를 누르면 저장이 됩니다.

vim에서 사용하는 명령어는 모두 대소문자를 구분하여 동작이 달라지니 주의해주세요.



종료하기

vim 종료 명령어는 q 입니다.

w 명령어를 입력했을 때와 마찬가지 방법으로 q 명령을 실행하면 vim을 종료할 수 있습니다.


만약에 저장과 동시에 vim을 종료하고 싶을 때에는 w 명령어와 q 명령어를 연달아서 입력할수 있습니다.

: wq




hello.c 파일이 생성된 것을 확인할 수 있습니다.


정말 저장이 되었는지 다시 열어볼까요?

저장이 잘 되었습니다.



어떤 경우에는 편집된 내용을 저장하지 않고 종료하고 싶을 때가 있습니다.

편집된 후에 저장하지 않고 q 명령을 통해 종료를 하려고 하면 편집된 내용이 저장되지 않았다는 경고 메시지가 뜨면서 종료가 되지 않습니다.


이럴 때는 ! (강제 명령 실행) 명령을 함께 입력해주면 저장하지 않고 바로 종료할 수 있습니다.



-Peter의 우아한 프로그래밍

여러분의 댓글은 저에게 크나큰 힘이 됩니다. 오류 및 의견 남겨주시면 감사하겠습니다.


블로그 이미지

친절한 Peter Ahn

IT 정보 공유, 프로그래밍 지식 공유

댓글을 달아 주세요

Vim을 이해하려면 vim에 존재하는 여러 가지 모드(Mode)를 이해해야 합니다.

이러한 모드가 vim의 가장 큰 특징이라고 할 수 있습니다. 여러 모드들로 인해 강력한 기능을 수행할 수 있지만 vim을 배우려는 사람들에게 진입장벽이 되는 것도 사실입니다.


때문에 vim의 러닝커브(Learning curve)는 다른 에디터에 비해 남다를 수 밖에 없는데요.

이를 재밌게 표현한 그림이 있어서 소개해드립니다.




조금 과장되긴 했지만 그만큼 vimemacs가 강력하지만 익숙하게 다루는 게 힘들다는 것을 잘 표현하고 있네요.


사실 저도 vim을 처음 실행했을 때 바로 문서 편집이 안되서 당황했던 기억이 납니다.



그럼 이제부터 vim의 모드에 대해 간략하게 설명드리겠습니다.

vim에는 굉장히 다양한 모드가 있는데요, 이 중에서 오늘 소개해드릴 일반 모드, 입력 모드, 명령라인 모드, 비주얼 모드만 이해해도 vim을 사용하는 데에는 크게 지장이 없습니다.


1. 모드 종류


1.1 일반 모드 (Normal Mode)

일반 모드는 키 입력을 통해 vim에 명령을 내리는 모드입니다.

커서를 이동하거나 삭제, 복사, 붙여넣기 등의 작업을 수행할 수 있습니다. 보통의 에디터는 처음 실행하면 편집이 가능한 상태로 실행이 되지만 vim은 일반 모드로 실행이 되기 때문에 바로 편집이 불가능합니다.

이러한 점 때문에 vim을 처음 접하는 사람들을 당황하게 만들곤 합니다.


1.2 입력 모드 (Insert Mode)

입력 모드는 실제로 문서를 편집하기 위한 모드입니다.

입력 모드에서 키보드로 타이핑 하면 화면에 글자들이 출력되면서 편집되는 것을 볼 수 있습니다.

다른 일반적인 에디터의 기본 모드와 같다고 보시면 됩니다.


1.3 명령라인 모드 (Command-line Mode)

명령라인 모드는 명령 입력으로 여러 가지 일을 수행할 수 있는 모드입니다.

vim의 설정을 바꾼다거나 다른 파일을 열 수도 있고 저장도 할 수 있습니다.

편집중인 문서 내에서 특정 패턴으로 검색을 하거나 외부 명령을 수행도 가능합니다.

vim의 종료 또한 명령라인 모드에서 q 명령어를 입력하는 것인데요. 이러한 vim의 종료 방법을 몰라 2년째 vim을 사용중이라는 풍자 트윗이 화제가 되기도 했습니다.


1.4 비주얼 모드 (Visual Mode)

vim에서 대부분의 명령을 수행할 때에는 범위를 지정할 수 있습니다.

문서 전체를 지정하거나 특정 행 또는 특정 행으로부터 N개의 행 등 다양한 방법으로 범위를 지정할 수 있습니다.

이런 방법은 범위를 지정할 때 범위의 시작과 끝을 명시해줘야 하는 불편함이 있기 때문에 비주얼 모드가 탄생하게 되었습니다.

비주얼 모드에서는 마치 마우스로 드래그 해서 범위를 지정하듯이 커서 이동을 통해 블록 단위로 범위를 지정할 수 있습니다.


2. 모드 전환



vim의 모드 전환은 위 그림 처럼 일반 모드에서 특정 키를 입력 했을 때 이루어집니다.


입력 모드로의 전환은 i, a, o, s 키 등으로 할 수 있습니다. 키 입력에 따라 커서 위치가 달라지니 직접 한번 해보세요. linux 기반의 대부분의 동작이 대소문자를 가리듯이 vim도 대소문자에 따라 동작이 달라지니 주의하시기 바랍니다.


2.1 입력 모드로 전환


world에서 'w' 문자 위에 현재 커서가 있을 때 입력모드 진입 시의 위치를 표시했습니다. 보시다시피 대소문자가 구별되어 전혀 다른 동작을 하는 것을 알 수 있습니다. o(소문자), O(대문자) 키 입력시에는 빈 행이 생성되고 커서가 이동된다는 점 참고해주세요.


s(소문자) 키는 현재 커서의 글자 하나를 지우고 그 위치부터 입력 모드가 시작되고,

S(대문자) 키는 현재 커서가 위치한 행을 지우고 입력 모드가 시작됩니다.

R(대문자) 키는 다른 에디터에서 수정 모드와 같이 이후 입력 되는 글자들이 덮어쓰게 됩니다.


2.2 명령행 모드로 전환

명령행 모드로 진입할 때는 일반 모드에서 : 키를 입력 하면 되는데요. 화면 하단에 : 문자와 함께 명령을 입력받는 Prompt 가 표시됩니다. 

/, ? 키는 특정 패턴을 검색할 때 사용하는데 /키는 정방향, ? 키는 역방향 탐색입니다.



2.3 비주얼 모드로 전환

비주얼 모드로의 전환은 v 또는 V 키를 통해 가능합니다.


v(소문자)는 현재 커서를 시작으로 블록을 지정할 수 있습니다.


 V(대문자)는 현재 커서가 위치한 행부터 행 단위로 블록을 지정할 수 있습니다.



그리고 vim은 열단위 블록 지정을 지원합니다. ctrl + v 키 or ctrk + q (윈도우 환경에서는 ctrl + v 가 붙여넣기 동작이므로 ctrl + q 를 사용하시면 됩니다)를 누르면 현재 커서를 기준으로 열(Column)단위로 블록을 지정할 수 있습니다.


2.3 일반 모드로 전환

일반 모드로의 전환은 ESC키를 눌러서 전환합니다.

입력 모드, 명령행 모드, 비주얼 모드 등의 모드들은 서로 간에 전환이 불가능합니다. 

예를들어 입력 모드에서 명령행 모드로 전환하려면 반드시 ESC 키를 눌러 일반 모드로 전환한 후에 전환이 가능합니다.






블로그 이미지

친절한 Peter Ahn

IT 정보 공유, 프로그래밍 지식 공유

댓글을 달아 주세요