VIM 유용한 명령

출처 : http://hyok.kr/33

글 수정하기

:12,24j : 12줄부터 24줄까지 합치고 각 줄의 공백은 그대로 두기.
~ : 대소문자 전환하기
r : 현재 커서아래에 있는 글자를 다른 문자로 바꾸기
4rx : 현재 커서 이후 4개의 글자를 “x” 문자로 바꾸기
R : ESC키를 누를때 까지 덮어쓰기
>> : 현재 줄을 오른쪽으로 들여쓰기 하기
3>> : 세 줄을 오른쪽으로 들여쓰기 하기
>% : 괄호등이 있는 곳에서 실행하며, 괄호의 다른 짝이 되는 부분까지를 오른쪽으로 들여쓰기 하기
>} : 한 문단을 오른쪽으로 들여쓰기 하기
>’m : m 문자로 마크된 줄까지 들여쓰기 하기 (마크는 mx 에서 x를 원하는 마크 문자로 지정해서 한다)
<< : 왼쪽으로 내어쓰기 하기(그 외 다른 기능들은 들여쓰기와 같은 조합을 사용할 수 있음)

d^ : 현재 위치부터 줄의 처음까지 삭제하기
d$ : 현재 위치부터 줄의 끝까지 삭제하기
dw : 커서의 현재 위치부터 단어의 끝까지 삭제하기
d3w : 3 단어 삭제하기
3dd : 현재 줄포함 아래로 3 줄 삭제하기
d/word : 현재 위치부터 오른쪽으로 “word” 검색하여 그 직전까지 삭제하기
d?word : 현재 위치부터 왼쪽으로 “word” 검색하여 그것을 포함해서 삭제하기
D : 현재 위치부터 줄 끝까지 삭제하기
u : 삭제 취소하기
U : 방금 수정했던 줄 전체를 원래 상태로 되돌리기
!!cut -c41- : 현재 줄에서 처음 40칸(41 – 1)을 삭제한다.

yw : 한 단어 복사하기
yy : 현재 줄 복사하기
Y : 현재 줄 복사하기(yy와 동일)
nyy : n 줄 복사하기
y$ : 줄 끝까지 복사하기
y) : 문장(구두점 등으로 끝남) 끝까지 복사하기
y’x : 현재 위치부터 마크 x 까지 복사하기 (마크는 mx 에서 x를 원하는 마크 문자로 지정해서 한다)
y/word : 현재 위치부터 “word”라는 단어 직전까지 복사하기

“ay’m : 현재 위치부터 마크 m까지를 복사하여 버퍼 “a”에 저장하기. “:e filename” 혹은 “:n filename”으로 다른 파일로 이동하여서로 다른 파일간의 복사에 사용될 수 있음.
“ayy : 버퍼 “a”에 현재 줄을 복사하여 저장하기
“a3Y : 버퍼 “a”에 세 줄을 복사하여 저장하기
“A3Y : 버퍼 “a”에 3줄을 복사하여 그 이전 버퍼 내용에 이어 저장하기
“ap : 아래 줄에 버퍼 “a”의 내용을 붙여넣기
@a : 버퍼 “a”에 있는 문자열을 명령으로써 실행한다. VI 모드와 EX 모드 모두에서 작동한다. 즉 @a 와 :@a 둘다 된다.

20I-<ESC> : 줄의 시작부분에 20개의 빼기기호(-) 삽입하기

이동하기

0 : 커서를 줄의 맨 처음으로
$ : 커서를 줄의 끝으로
w : 한 단어 앞으로(현재 위치에서 오른쪽으로, 구두점이 있으면 구두점 앞까지 단어로 간주)
3w : 세 단어 앞으로
b : 한 단어 뒤로(현재 위치에서 왼쪽으로, 구두점이 있으면 구두점 앞까지 단어로 간주)
e : 커서를 단어의 맨 끝으로
G : 커서를 파일의 맨 마지막 줄로
nG : 줄번호 n 의 맨 첫칸으로
1G : 파일의 맨 첫 줄로
n| : n번째 칸으로. | 은 Shift- 를 누르면 나오는 세로 바이다.
f: 현재 줄에서 앞으로로 한 문자 찾아가기
fa : 현재 줄에서 앞쪽으로 문자 “a” 찾아가기
2fa : 현재 줄에서 앞쪽으로 두 번째 문자 “a” 찾아가기
F : 현재 줄에서 뒷쪽으로 문자 찾아가기
Fz : 현재 줄에서 뒷쪽으로 문자 “z” 찾아가기
t : 현재 줄에서 앞쪽으로 지정된 문자의 바로 앞 칸으로
T : 현재 줄에서 뒷쪽으로 지정된 문자의 바로 뒷 칸으로
) : 다음 문장으로(구두점으로 구분)
} : 다음 문단으로(빈 줄로 구분)
] : 다음 섹션으로
% : 괄호 짝 찾아가기
^B : 한 페이지 뒤로 스크롤한다. (^B 는 Ctrl-B를 의미한다)
^F : 한 페이지 앞으로 스크롤한다.
^U : 반 페이지 뒤로 스크롤한다.
^D : 반 페이지 앞으로 스크롤한다.
z<enter>: 현재 줄을 화면 맨 위로 올린다.
z. : 현재 줄을 화면 가운데로 옮긴다.
z- : 현재 줄을 화면 맨 아래로 내린다.

검색 및 치환

:set ic : 대소문자를 무시한다.
/word : word를 앞으로 검색한다.
?word : word를 뒤로 검색한다.
n : 검색한 단어의 앞방향 다음 위치로 이동한다.
* : 현재 커서 위치에 있는 단어를 앞으로 검색한다.(vim)
# : 현재 커서 위치에 있는 단어를 뒤로 검색한다.(단어 단위 일치, 완전한 한 단어로 존재할 경우에만 검색됨) (vim)
g* : 현재 커서 위치에 있는 단어를 앞으로 검색한다.(부분 일치, 다른 단어의 일부라도 검색됨) (vim)
g# : 현재 커서 위치에 있는 단어로 뒤로 검색한다.(부분 일치) (vim)
:s/old/new/ : 현재 줄에서 처음 만난 old 문자열을 때 new로 치환한다.
:s/old/new/g : 현재 줄에 있는 모든 old 문자열을 new로 치환한다.
:%s/old/new/g : 현재 버퍼에 있는 모든 old 문자열을 new로 치환한다.
:s/old/new/gc : 치환시 치환여부를 물어본다.

:%s/문자열/_&_/g : 문자열 > _문자열_
:%s/foo/bar/gc : 바꿔도 좋은지 아닌지 확인
:%norm A추가할문자열 : 특정문자열 이후 스트링을 추가
:%s/문자열.*//g : 특정문자열 이후 스트링을 모두 삭제
:g/특정문자열/d : LOG 문자열이 있는 라인 삭제
:%v/\(LOGSTRING1\|LOGSTRING2\).*\n\{0,\}.*—-/d : LOG 문자열만 남기고 삭제
:%s/LOG\.*//g : LOG 문자열 이후 삭제

:%s/^V^M//g : DOS의 Carrage Return(^M)을 모두 제거한다. (^V^M 은 Ctrl-V, Ctrl-M을 의미한다)
:%s/,/^V^M/g : 버퍼 전체에서 쉼표를 새줄로 바꾼다. (DOS Carrage Return 이 추가될 것 같겠지만, UNIX에서는 실제로는 newline만 추가된다)
:%s/s*$// : 줄 끝에서 공백을 제거한다.
:%s/[ ^I]*$/!d : 줄 끝에서 공백을 제거한다.(^I는 Tab키이다)
:%s/.*/L&/ : 버퍼 전체를 소문자로 변경한다.(U는 대문자로)
:s/.*/u&/ : 줄의 첫번재 문자를 대문자로 변경한다.
:%s/<./u&/g : 현재 버퍼의 모든 단어의 첫번째 문자를 대문자로 변경한다.

< 단어의 시작을 의미한다.
. 위와 합쳐져서 단어의 첫번째 문자를 의미한다.
u VI에게 치환할 문자열의 다음 문자를 대문자로 바꾸라고 지시한다.
& 일치한 나머지 문자열들을 의미한다.

:s/book{./l&/ : book을 포함해서, { 직후의 첫번째 문자까지 소문자로 변경한다.
:’x,.s/([a-z])=/1 =/ : 마크 x 부터 현재 줄까지, 알파벳소문자와= 기호인 문자열을 같은 문자에 한 칸 공백에 = 기호로 바꾼다. 예) book= >> book =
::%s/(That) or (this)/2 or 1/ : “That or this”를 “this or That”으로 바꾼다.
::%s/(^\foilhead{(.*)})/%1^M\section{2}/ : “foilhead”로 시작하는 줄에서 “foilhead”를 주석처리(주석기호는 %)하고, 그 아래줄에 “foilhead”를 “section”으로 바꾼 줄을 생성해 넣는다. 아래와 같은 예제가 있을 때,
foilhead{haha} 이런저런…
foilhead{hihi} 그럭저럭…

아래처럼 바뀐다.
%foilhead{haha}
section{haha} 이런저런…
%foilhead{hihi}
section{hihi} 그럭저럭…

::%s/(.*)/<a href=”1″>1</a>/ : 모든 줄에 있는 문자열을 HTML <a>로 감싼다.
:s/ (d{1,2}).(d{1,2})(.*)/<a href=”1-2.sh”>1.23</a> : 현재 커서가 위치한 아래와 같은 줄을
1.1 Accessing Substring

다음처럼 바꾼다.
<a href=”1-1.sh”>1.1 Accessing Substrings</a>

:’x,.s/^/#/ : 마크 x 부터 현재줄까지 줄 시작 부분에 # 기호를 넣는다.
:s/edu/edu/ : edu로 끝나는 줄들을 다음줄과 합친다.(새줄 삭제)
:& : 직전 치환 명령을 다시 실행한다.
:g/.c/+|s/^/.cc/ : 모든 “.c” 명령을 찾아서, 그 다음 줄로 가서, 줄 처음에 “.cc”를 삽입한다.look for all “.c” commands, jump to next line, substitute the beginning of line with “.cc”.
:g/^..*/|s//U&/ : “.”으로 시작하는 줄의 모든 문자를 대문자로 바꾼다.
:v/string/d : string을 포함하지 않은 모든 줄을 삭제한다.
:g/.*/m0 : 현재 파일의 모든 줄의 순서를 바꾼다. m0 는 현재 줄을 0번째 줄로 이동하는 ex 명령이다.
“zyy 그 후에 @z : “zyy 는 현재 줄을 버퍼 z 에 넣는다. 그리고 @z 는 z 버퍼의 내용을 실행한다. 이것을 이용해서 긴 문자열 검색 패턴등이 문서에 있을때 버퍼에 그 패턴을 저장하고, 바로 검색하는 등의 일을 할 수 있다.
:v/./d or :g/^$/d : 빈줄을 삭제한다.
:g/^s*$/d : 공백만 있는 모든 줄을 삭제한다.

창 분할 명령어

Ctrl+w 3+ : 현재 창의 크기를 3줄 넓히기
Ctrl+w 3- : 현재 창으 크기를 3줄 줄이기

Ctrl+w s ( :sp[plit] ) 현재 파일 수평 창으로 분할
Ctrl+w v ( :[n]vs[plit] ) 현재 파일 수직 창 분할 (n은 칸 분할)
Ctrl+w n ( :new ) 빈 파일 열고 수평 창 분할

Ctrl+w ^ 수평 창으로 나누고 이전 파일 열기
Ctrl+w f 수평으로 나누고 위치의 파일 열기
Ctrl+w i 커서 위치의 단어 정의된 파일 열기

Ctrl+w q ( :q[uit] ) 현재 커서의 창으로 닫기
Ctrl+w c ( :clo[se] ) 현재 커서의 창 종료
Ctrl+w o (:on[ly] ) 현재 커서의 창만 남기고 나머지 창 삭제

Ctrl+w = 현재 열린 모든 창 크기 동일하게 분할
Ctrl+w _ 현재 커서 창 크기 최대화
Ctrl+w – 현재 커서 창 크기 줄이기 (한줄씩)
Ctrl+w + 현재 커서 창 크기 늘이기

Ctrl+w w 다음 창으로 커서 이동(순차적으로)
Ctrl+w [방향키 or h/j/k/l] 방향에 창으로 이동
Ctrl+w t/b t:top 창으로 이동 b:bottom 창으로 이동

소스 정렬

3!!sort : 현재 줄 부터 3줄을 sort의 입력으로 제공하고, 그 실행 결과로 대체한다.
!Grev : 현재 줄 부터 끝까지 “rev” 명령의 입력으로 보내고 그 결과로 대체한다. rev 명령은 각 줄의 문자들을 뒤집는다. ( 예) apple -> elppa)
!}sort : 현재 줄 부터 문단 끝(첫번째 빈 줄 나오는 부분)을 정렬한다.
:’x,.!sort : mx 명령으로 마크된 줄부터 현재 줄까지를 정렬한다.

정렬을 원하는 부분의 소스를 비주얼 블럭으로 지정하고 = 키를 누르면 자동으로 정렬된다. 전체 는 gg=G 키를 순서대로 누르면 된다.

여러줄을 주석으로 처리할때

10줄을 주석기호 #을 사용하여 주석처리하려면 다음과 같이 하면 된다.
v 명령으로 영역을 선택 후 다음을 입력합니다.
:'<,’>norm i#

주석을 해제할 때는 다음과 같이 합니다.
v 명령으로 영역을 선택 후 다음을 입력합니다.
:'<,’>norm x
x 개수 만큼 삭제됩니다.

입력했던 단어 자동 채우기

Ctrl + p
프로그래밍 할 때 사용하면 마치 함수/변수명 자동 완성 같은 효과

여러 줄 폴더화 시키기

v 명령으로 영역을 선택 후 zf를 입력하면 해당 줄이 접힙니다.
펼칠 때는 zo
접을 때는 zc

영역 선택

v 일반 선택
shift + v 줄 단위 선택
ctrl + v (또는 q) 컬럼 선택

기타

:’t,. !awk ‘{print $3 ” ” $2 ” ” $1}’ : 마크 t 부터 현재 줄까지 3 컬럼을 역순으로 배열한다.
:%! sed G : 전체 문서의 각 줄에 빈 줄을 삽입한다.
:1,5! sed G : 1 – 5 줄에 각각 빈 줄을 삽입한다.
:’x,.!sed ‘/^$/d’ : 마크 x 줄부터 현재 줄까지 빈 줄을 삭제한다.

Comments are closed.