Vim 사용법 정리
Reference
Practical Vim - Drew Neil
Cheet Sheet
기본
실행 반복
기능 | 동작 예시 | 반복(redo) | 되돌리기(undo) |
---|---|---|---|
내용 변경 | . |
u |
|
문자 찾기 | f/t or F/T | ; |
, |
문자 일치 찾기 | /패턴 or ?패턴 | n |
N |
치환 동작 | :s/대상/치환 | & |
u |
연속 변경 실행 | qx{변경}q | @x |
u |
* 단축키
단어 선택
단어 위에서 * 버튼
검색
파일 내부 탐색
파일 사이 이동
이동
단어 단위(word 단위) 이동
명령 | 커서 이동 |
---|---|
w |
다음 단어 시작 위치 |
b |
현재 단어의 시작 위치 또는 이전 단어의 시작 위치 |
e |
현대 단어의 마지막 위치 또는 다음 단어의 마지막 위치 |
ge |
이전 단어의 마지막 위치로 이동 |
별도 조합
gea
: 이전 단어 끝에 덧붙이다
공백 단위(WORD 단위) 이동
명령 | 커서 이동 |
---|---|
W |
다음 단어 시작 위치 |
B |
현재 단어의 시작 위치 또는 이전 단어의 시작 위치 |
E |
현대 단어의 마지막 위치 또는 다음 단어의 마지막 위치 |
문장 단위 이동
명령 | 행 이동 |
---|---|
0 |
행에서 맨 앞으로 이동 |
$ |
행에서 맨 뒤로 이동 |
^ |
행에서 공백을 제외한 맨 앞 문자로 이동 |
명령 | 행 이동 |
---|---|
f{문자} |
행에서 해당 문자로 이동 |
t{문자} |
행에서 해당 문자 앞으로 이동 |
F{문자} |
행에서 해당 문자로 이동 |
T{문자} |
행에서 해당 문자 앞으로 이동 |
스크롤
명령 | 동작 |
---|---|
Ctrl+e |
한 페이지 아래로 스크롤 |
Ctrl+y |
한 페이지 위로 스크롤 |
Ctrl+d |
반 페이지 아래로 스크롤 |
Ctrl+u |
반 페이지 위로 스크롤 |
gg |
페이지 맨 위로 이동 |
G |
페이지 맨 아래로 이동 |
:행번호 |
특정 행으로 이동 |
일반 모드
기본 오퍼리에터 명령
트리거 | 효과 |
---|---|
c |
변경 |
d |
삭제 |
y |
레지스터로 복사하기 |
g~ |
대소문자 변환하기 |
gu |
대문자로 변환 |
gU |
소문자로 변환 |
> |
우측으로 탭 이동 |
< |
좌측으로 탭 이동 |
= |
자동으로 들여쓰기 |
! |
[모션]에 해당하는 행을 외부 프로그램을 사용해 여과(필터) |
Append 모드
Bash와 공통
키 입력 | 효과 |
---|---|
<C-h> |
앞에 있는 글자 하나를 제거(=백스페이스) |
<C-w> |
앞에 있는 단어 하나를 제거 |
<C-u> |
행의 시작 부분까지 제거 |
일반 모드로 돌아가기
키 입력 | 효과 |
---|---|
ESC |
일반 모드로 전환 |
<C-[> |
일반 모드로 전환(ESC키 보다 손이 편함) |
<C-o> |
잠깐 일반 모드로 전환 |
사용예: <C-o> zz |
Append 모드에서 레지스터 붙여넣기
<C-r> {레지스터}
<C-r> <C-p> {레지스터}
즉석해서 계산
<C-r>=6*23<CR>
비주얼 모드
괄호 선택
명령 | 동작 |
---|---|
i{괄호} |
내부(inside) |
a{괄호} |
주변(around) |
괄호 객체 | 예시 |
---|---|
) |
(word) |
} |
{word} |
> |
<word> |
` |
`word` |
' |
'word' |
" |
"word" |
t |
<xml>word</xml> |
주변 선택 및 조작
사용 예시
동작 | 선택 | 선택 단위 | ||
---|---|---|---|---|
d/c |
a/i |
w(word) or W(WORD) or s(문장) or p(문단) |
daw
: aw
로 선택한 영역을 삭제
마크 달기 - 위치를 자유롭게 이동
마크 등록
m{a-zA-Z}
마크 이동
'{a-zA-Z}
또는 `{a-zA-Z}
괄호 넘나들기
Key: %
%
을 이용해 넘나들면 자동으로 마트가 생성된다. 즉 마크에서 사용하는 이동 버튼을 동일하게 사용가능하다.
명령행 모드
기본 명령어(Ex 명령어)
명령 | 효과 |
---|---|
:\[범위\]delete \[x\] |
지정한 행을 삭제 [이 후 레지스터 x에 저장됨] |
:\[범위\]yank \[x\] |
지정한 행을 복사 [레지스터 x에 저장됨] |
:\[행\]put \[x\] |
지정한 행을 뒤에 레지스터 x에 저장된 문서를 붙여넣기 |
:\[범위\]copy {주소} |
지정한 행을 복사해서 {주소} 행 아래에 붙여넣기 |
:\[범위\]move {주소} |
지정한 행을 {주소} 행 아래로 이동하기 |
:\[범위\]join |
지정한 행을 한 줄로 연결하기 |
:\[범위\]normal {명령} |
일본 모드에서 쓰는 {명령}을 지정한 범위의 각각 행에서 실행하기 |
:\[범위\]substitute/{패턴}/{문자열}/\[플래그\] |
지정한 행에서 {패턴}이 나타나면 {문자열}로 치환 |
:\[범위\]global/{패턴}/\[명령\] |
[명령]을 지정한 모든 행 중 {패턴}이 나타나는 곳에서 실행하기 |
명령행 모드의 범위 지정과 연속된 행에서 명령
예시
<!DOCTYPE html>
<html>
<head><title>Practical Vim</title></head>
<body><h1>Practical Vim</h1></body>
</html>
범위 지정 | 의미 |
---|---|
:1 |
1 번 행 |
:$ |
마지막 행 |
:2, 5 |
2에서 5행 |
':.' | 현재 행 |
검색 히스토리
명령 | 기능 |
---|---|
q/ |
검색 히스토리 명령행 창 열기 |
q: |
Ex 명령 히스토리 명령행 창 열기 |
<C-f> |
명령행 모드에서 명령행 창으로 전환하기 |
외부 명령 사용
표준 입출력 버퍼에서 활용하기
- 읽기
:read !{명령}
- 쓰기
:write !{명령}
!=:write! {파일명}
외부 명령을 사용해서 버퍼 내용 거르기
예시
first name, last name, email
john, smith, hello@world.com
yuu, ri, world@hello.com
hong, gildong, nice@world.com
:2, $!sort -t ',' -k2
2행에서 $(마지막) 행 까지 shell의 sort 명령을 이용하여 필터링한다
Advanced
Tip 23. 가능하면 비주얼 명령 대신 오퍼레이터 명령 사용하기
Tip 12. '표 2 Vim의 오퍼레이터 명령'
TIP
파일 넘나들기
:jumps
변경했던 부분으로 되돌아가기
u + <C-r>
- 편법
:changes
파일 확장자 변경하기
:set suffixesadd+=.rb
관리자 권한으로 파일 저장하기
:w !sudo tee % > /dev/null
s
Hex 에디터 모드
:%!xxd
입력하면 헥스 모드로 전환
:%!xxd -r
입력하면 텍스트 모드로 돌아옴
실행 옵션
읽기 전용
vim -R [file_name]
-R: open file with read-only mode
창 관리
창 생성및 삭제
명령 | 효과 |
---|---|
<C-w> s |
창을 수평으로 분리, 현재 버퍼를 분리한 창에서 사용 |
<C-w> v |
창을 수직으로 분리, 현재 버퍼를 분리한 창에서 사용 |
:sp[lit] [파일명] |
현재 창을 수평으로 분리, [파일]을 새 창에 불러옴 |
:vsp[lit] [파일명] |
현재 창을 수직으로 분리, [파일]을 새 창에 불러옴 |
사용 플로우 - 새로운 파일을 오른쪽 창으로 오픈
<Ctrl-w> v
--> :edit [파일명]- :vsp[lit] [파일명]
명령 | 효과 |
---|---|
:clo[se] or <Ctrl-w> c |
활성화 창 닫기 |
:on[ly] or <Ctrl-w> o |
활성화 창 유지, 나머지 창 닫기 |
창 사이즈 조절
명령 | 동작 |
---|---|
<Ctrl-w> = |
모든 창의 폭과 높이를 동일하게 조절 |
<Ctrl-w> _ |
활성 창 높이 최대화 |
<Ctrl-w> | |
활성 창 폭 최대화 |
[숫자]<Ctrl-w> _ |
활성 창 높이를 [숫자] 행으로 조절 |
[숫자]<Ctrl-w> | |
활성 창 폭을 [숫자] 열로 조절 |
탭으로 창 관리
명령 | 효과 |
---|---|
:table[dit] [파일명] |
[파일명]을 새 탭에서 열기 |
<Ctrl-w> T |
현재 탭에서 활성화 창을 새 탭으로 열기 |
:tabc[lose] |
현재 탭과 탭에 열린 모든 창 닫기 |
:tabo[nly] |
현재 활성화된 탭 페이지를 제외한 모든 탭 닫기 |
:tabn[ext] [숫자] |
[숫자]번째 탭 페이지로 이동 |
:tabn[ext] or gt |
다음 탭 페이지로 이동 |
:tabp[revision] or gT |
이전 탭 페이지로 이동 |
:tabmove [숫자] |
탭 페이지 순서를 정렬 |
레지스터
기본적인 명령과 함께 사용가능
"{레지스터 이름}{명령}
"ayiw --> 현재 단어를 a 레지스터에 복사
"bdd --> 현대 행을 레지스터 b에 잘라내기
레지스터 종류
이름 | 사용처 |
---|---|
"a-"z |
그냥 레지스터 |
"" |
무명 레지스터 - 기본적인 복사 붙여넣기 등에 사용되는 레지스터 |
"0 |
복사 명령 사용시 저장되는 레지스터 |
"_ |
아무 내용도 반환하지 않는 레지스터 |
'"+와 "*' | 시스템 레지스터와 영역 레지스터 - 크롬에서 복사 한 것을 붙여넣을 때 등에 사용 |
"= |
표현식 레지스터 계산 등에 사용되는 표현식을 저장하는 레지스터 |
그 외 레지스터
"%
- 현재 파일명"#
- 직전에 편집한 파일명".
- 마지막 삽입 본문":
- 마지막 Ex 명령"/
- 마지막 검색 패턴
매크로
매크로 사용법
q{레지스터}{명령어 시작} - {마지막 명령어}q
레지스터에 저장된 메크로 확인
:reg {레지스터}
매크로 다시 실행
@{레지스터}
마지막으로 실행한 매크로 다시 실행
@@
실행 횟수 지정
{숫자}@@ 또는 {숫자}@{레지스터}