개요

 

안녕하세요 피터입니다.

오늘은 vim에서 대문자 또는 소문자로 일괄적으로 변경하는 방법에 대해서 알려드리겠습니다. 

전체적으로 대문자 또는 소문자로 변경하는 것도 가능하지만 대문자인 것은 소문자로 소문자인 것은 대문자로 반전(inverse)하는 것도 가능합니다. 

 

vim 에서 대소문자를 변경하는 방법은 크게 두 가지가 있습니다. 

첫 번째는 일반 모드에서 명령어를 입력해서 변경하는 방법이고, 

두 번째는 비주얼 모드에서 영역을 지정하고 변경하는 방법입니다.

 

일반 모드

일반 모드에서 대소문자를 변경하는 명령어는 아래와 같습니다.

Command Description Examples
gU<motion>

<motion> 에 해당하는 범위의 문자를

대문자로 변경

gUU : 현재 라인 전체 대문자로 변경

gUw : 현재 커서부터 단어의 끝까지 대문자로 변경

gUaw : 현재 단어 전체 대문자로 변경

gUG : 현재 라인부터 문서의 끝까지 대문자로 변경

gu<motion>

<motion> 에 해당하는 범위의 문자를

소문자로 변경

guu : 현재 라인 전체 소문자로 변경

guw : 현재 커서부터 단어의 끝까지 소문자로 변경

guaw : 현재 단어 전체 소문자로 변경

guG : 현재 라인부터 문서의 끝까지 소문자로 변경

g~<motion>

<motion> 에 해당하는 범위의 문자를

반전시킴

g~~ : 현재 라인 전체 대소문자 반전

g~w : 현재 커서부터 단어의 끝까지 대소문자 반전

g~aw : 현재 단어 전체 대소문자 반전

g~G : 현재 라인부터 문서의 끝까지 대소문자 반전

기본적으로 gU, gu 명령어는 현재 커서 위치를 시작으로 <motion> 에 지정된 범위까지 영향을 받게 됩니다.

 

아래 gU 명령어 사용 예제를 참고해주세요. (gu, g~ 명령어도 동일한 원리로 동작합니다)

gUU 실행 결과

 

gUw 실행 결과

 

gUaw 실행 결과

 

gUG 실행 결과

 

비주얼 모드

비주얼 모드에서 영역을 지정한 다음에 U 키(shift + u)를 누르면 영역 내의 문자들이 대문자로 변경됩니다.

마찬가지로 영역 지정 후 u 키를 누르면 소문자로, ~ 키를 누르면 대소문자 반전이 됩니다.

비주얼 모드에서 영역 지정 후 shift + u 실행 결과

 

 

 

-Peter의 우아한 프로그래밍

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

 

 

블로그 이미지

친절한 Peter Ahn

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

댓글을 달아 주세요

 

안녕하세요 피터입니다.

오늘은 vim에서 특정 문자열을 검색하거나 원하는 문자열로 변경하는 방법을 소개해드리겠습니다.

 

개요

vim은 다른 텍스트 에디터들이 기본적으로 제공하는 "찾기 및 바꾸기"와 같이 현재 열려 있는 문서 내에서 특정 문자열을 검색하거나 원하는 문자열로 바꿀 수 있습니다. 

vim이 강력한 이유는 바로 찾기 및 바꾸기 기능에서 정규 표현식(Regular Expression)을 활용할 수 있기 때문입니다. 

 

 

문자열 검색하기

vim에서 특정 문자열을 검색하기 위해서는 일반모드에서 슬래시( / ) 키를 이용하여 검색 대화창을 띄워야 합니다.
 
/ 키를 눌러 검색 입력 활성화 후 score 검색어 입력

화면 하단에 / 문자가 표시되며 커서가 활성화 되면 원하는 검색어를 입력할 수 있습니다. 

간단하게 score 라는 검색어를 입력해보겠습니다. 

 

 

위와 같이 문서 전체에서 score 라는 문자열을 모두 찾아 음영으로 표시해줍니다. 

이 때 커서 위치는 현재 커서에서 가장 가까운 검색 결과로 자동으로 이동됩니다. 

이 상태에서 n 키를 누르면 다음 검색 결과로 커서가 이동되며, N (shift + n) 키를 누르게 되면 이전 검색 결과로 커서가 이동됩니다. 

 

마지막 검색 결과에서 n 키를 누르면 맨 처음 검색 결과로 이동

 

검색 결과의 마지막에 도달한 경우 n 키를 한번 더 누르면 맨 처음 결과로 되돌아갑니다.  

 

정규표현식으로 검색하기

앞서 말씀드린대로 vim에서의 검색 기능은 정규표현식을 지원하기 때문에 매우 강력합니다. 

아래는 정규표현식을 써서 " " 로 감싸여 있는 문자열만 검색하는 예제입니다.

 

정규표현식으로 검색

 

위에서 입력된 정규표현식 ".*" 를 간단하게 설명드리겠습니다.

먼저 특수기호 . (마침표)* (별표: 애스터리스크)는 특별한 의미를 지니는 문자입니다. 

.  기호모든 문자 1개와 매칭이 됩니다. 즉, 어떤 문자가 와도 상관이 없다는 의미입니다. 

*  기호바로 앞 문자0개 이상 반복된다는 의미입니다. 0개부터 무한대로 반복되죠.

전체를 다 해석해보면 " 로 시작하고 " 로 끝나며 " " 사이에 어떤 문자가 몇 글자가 오던 전부 매칭이 되는 것이죠.

즉, " " 로 감싸여진 모든 문자열과 매칭됩니다. 

 

문자열 바꾸기

vim에서 문자열을 바꾸기 위해서는 명령행 모드에서 치환 명령어를 입력해야 합니다. 

문자열을 바꾸는 명령어는 substitute 라는 단어에서 따온 s 이며 아래와 같은 형식으로 구성되어 있습니다.  

(시작줄),(끝줄)s/찾을패턴/바꿀문자열/옵션

위와 같이 s 명령어 바로 앞에는 범위를 지정할 수 있는데, 문서 전체에서 바꾸기를 원하는 경우 % 라는 특수 기호를 사용합니다. 

 

아래 예제에서는 : 키를 눌러 명령행 모드로 진입한 뒤 %s/score/num/g 라고 치환 명령어를 입력하여 문자열을 바꿔봤습니다. 

score 를 num 으로 변경하는 예제. 변경이 적용된 라인 수를 알 수 있다

 

위 예제에서는 / (슬래시) 를 구분자(delimeter)로 사용하였지만, 바꾸고자 하는 패턴이나 문자열에 슬래시가 있는 경우 구분자를 @ 또는 | 등으로 변경해서 사용할 수 있습니다.

%s@score@num@g

%s!score!num!g

%s?score?num?g

%s#score#num#g

한 가지 주의하셔야 할 부분은 구분자를 위와 같이 통일시켜야 한다는 것입니다.

일부만 바꿔 쓰는 것은 허용되지 않습니다.

 

명령어의 가장 뒤에 옵션 부분에는 아래와 같은 옵션을 지정할 수 있습니다.

g: 매칭되는 문자열을 물어보지 않고 변경

i: 대소문자를 구분하지 않고 변경 (ignore cases)

c: 매칭되는 문자열마다 바꿀 것인지 사용자에게 물어보고 변경

 

옵션은 두가지 이상 한번에 지정할 수 있지만 g 옵션보다 c 옵션이 더 우선됩니다.

 

찾을 패턴에는 정규 표현식을 사용할 수 있기 때문에 활용도가 매우 높습니다. 

패턴을 사용하여 변경하는 경우 패턴이 의도한대로 동작하는지 검색을 통해 확인한 뒤에 바꾸기를 하는 것이 좋습니다. 

 

-Peter의 우아한 프로그래밍

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

블로그 이미지

친절한 Peter Ahn

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

댓글을 달아 주세요


안녕하세요 피터입니다.

오늘은 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 정보 공유, 프로그래밍 지식 공유

댓글을 달아 주세요

안녕하세요 Peter입니다. 

오늘은 Vim에서 이전에 했던 동작을 반복하는 명령어를 소개해드리겠습니다.

 

 

바로 마침표(.) 명령인데요. 이 명령어를 통해 이전 작업을 계속 반복시킬 수 있습니다.

반복되는 이전 작업은 다음과 같습니다. 

 

동작모드 

반복되는 이전 작업 

 일반모드

 바로 전에 실행된 명령어 키 반복 

 입력모드

 <ESC> 키를 누르기 전까지 입력된 내용 반복

 

예를들면 일반모드에서 o 키를 눌러 입력모드로 전환한 뒤 "test" 라고 입력하고 <ESC> 키를 눌러 일반모드로 돌아온 뒤, 마침표 '.' 키를 누르면 한 행이 개행되면서 "test"라고 입력되는 것을 볼 수 있습니다. 

마찬가지로 일반모드에서 dd 를 눌러서 한 행을 삭제 한 다음 마침표 '.' 를 누르면 dd 명령을 실행했을 때와 마찬가지로 한 행씩 삭제되는 것을 볼 수 있습니다. 

간단하게 이전 작업을 반복하고 싶을 때 사용하시면 됩니다.

 

보다 복잡한 명령을 반복하고 싶을 때는 매크로 녹화 기능을 사용하면 되는데 이 부분은 나중에 자세히 포스팅하겠습니다.

 

-Peter의 우아한 프로그래밍

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


 

블로그 이미지

친절한 Peter Ahn

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

댓글을 달아 주세요

안녕하세요 피터입니다.

오늘은 문서 편집시 필수 기능이라고 할 수 있는 복사, 붙여넣기, 삭제, 실행취소 기능에 대해서 설명드리겠습니다. 


Vim 의 편집 기능

코딩을 포함해서 문서 작업을 하다 보면 이전에 썼던 내용을 재사용해야 하는 일이 비일비재하게 일어납니다. 

매번 같은 문장을 타이핑하기에는 에너지와 시간이 많이 낭비되죠. 

그래서 대부분의 문서 편집기에는 일명 복붙이라고 칭하는 복사, 붙여넣기 기능이 존재합니다. 

여러 행을 한번에 삭제하는 기능도 필수적이구요. 

또한 작업을 하다가 실수로 잘못 지우거나 덮어쓰는 경우 이전 상태로 돌아가는 기능이 필요할 때가 많습니다. 

실행취소 기능 또한 대부분의 문서 편집기에 포함되어 있습니다. 

(심지어 이런 기능은 메모장에도 있습니다)


그런데 텍스트 에디터계의 조상뻘인 vim 에 이런 기능이 없을리가 없겠죠?

지금부터 하나하나 살펴보겠습니다.


1. 복사

vim에서 복사는 일반모드에서 y 또는 yy 명령을 사용해서 합니다. 

y는 '뽑아내다' 라는 뜻을 가진 yank 에서 따온 것이죠. 

일반모드에서 사용되는 대부분의 명령들은 반복수를 지정할 수 있습니다. 

예를 들어 5yy 이렇게 입력하면 현재 행 기준 5행을 복사하는 것이죠. 

 명령어

 설명

 y

 레지스터에 복사. 

 yy

 현재 행을 레지스터에 복사.

 :y

 Y


2. 붙여넣기

복사 또는 잘라내기로 레지스터에 저장한 내용을 일반모드에서 p 키를 이용해서 붙여넣을 수 있습니다.

 명령어

 설명

 p

 현재 행에 붙여넣기.  개행 문자가 포함된 경우에는 현재 행의 아래에 붙여넣기.

 :pu

 P

 현재 행의 위쪽에 붙여넣기.


3. 삭제 (잘라내기)

일반적인 문서 편집기에서 내용을 삭제할 때는 키보드의 Delete 키를 사용합니다. 

vim 에서도 마찬가지로 입력모드에서 Delete 키를 이용해서 삭제할 수 있습니다. 

일반모드에서 x 키를 이용해서 한글자씩 삭제할 수도 있습니다. 

그런데 엄밀하게 말하면 vim에서 삭제만 수행하는 기능은 없습니다. 

모든 '삭제' 기능이 삭제한 내용을 레지스터에 기록하는 '잘라내기'로 동작하기 때문입니다.

 명령어

 설명

 x

 커서에 위치한 문자 삭제.

 dd

 현재 행 삭제

 :d

 D

 현재 컬럼 위치에서 현재 행의 끝부분 까지 삭제  

 d$

 J

 아래 행을 현재 행의 끝에 붙임 (아래 행의 앞부분 공백은 제거됨)


4. 실행취소

vim에서는 매우 강력한 실행취소 기능을 제공합니다.

일반모드에서 u 명령을 통해 직전 명령을 취소할 수 있는데요. u 명령을 계속해서 사용하면 해당 문서를 처음 열었던 상태까지 돌아갈 수 있습니다. 

이 상태에서 Ctrl+R 명령으로 최근 상태까지 다시 복귀가 가능하기 때문에 편집하다가 실수로 잘못 편집하거나 이전 상태를 확인하고 다시 편집하려고 할 때 유용하게 사용할 수 있습니다. 

 명령어

 설명

 u

 undo 기능. 바로 직전 명령 취소. (이전 상태로 돌아감)

 Ctrl+R

 redo 기능. 바로 직전에 취소했던(undo) 명령 되돌림.


-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 정보 공유, 프로그래밍 지식 공유

댓글을 달아 주세요