Vim 사용법 정리


Reference

Practical Vim - Drew Neil

Cheet Sheet

image-20231011111408136.png|center

기본

실행 반복

기능 동작 예시 반복(redo) 되돌리기(undo)
내용 변경 . u
문자 찾기 f/t or F/T ; ,
문자 일치 찾기 /패턴 or ?패턴 n N
치환 동작 :s/대상/치환 & u
연속 변경 실행 qx{변경}q @x u

* 단축키

단어 선택
단어 위에서 * 버튼

검색

파일 내부 탐색

파일 사이 이동

이동

단어 단위(word 단위) 이동

image-20231011111752868.png|round

명령 커서 이동
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> 명령행 모드에서 명령행 창으로 전환하기

외부 명령 사용

표준 입출력 버퍼에서 활용하기

외부 명령을 사용해서 버퍼 내용 거르기

예시

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/nulls

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] [파일명] 현재 창을 수직으로 분리, [파일]을 새 창에 불러옴

사용 플로우 - 새로운 파일을 오른쪽 창으로 오픈

  1. <Ctrl-w> v --> :edit [파일명]
  2. :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 복사 명령 사용시 저장되는 레지스터
"_ 아무 내용도 반환하지 않는 레지스터
'"+와 "*' 시스템 레지스터와 영역 레지스터 - 크롬에서 복사 한 것을 붙여넣을 때 등에 사용
"= 표현식 레지스터 계산 등에 사용되는 표현식을 저장하는 레지스터

그 외 레지스터

매크로

매크로 사용법

q{레지스터}{명령어 시작} - {마지막 명령어}q

레지스터에 저장된 메크로 확인

:reg {레지스터}

매크로 다시 실행

@{레지스터}

마지막으로 실행한 매크로 다시 실행
@@

실행 횟수 지정
{숫자}@@ 또는 {숫자}@{레지스터}

매크로 실행 방법(직렬, 병렬)