키보드로만으로도 생산성을 높이기 위해 Vscode 내에서 VIm 플러그인을 설치하여 vscode, vim을 상호보완적으로 사용하려한다.
vscode extension에서 vim플러그인 설치가 가능하다.
명령어
일반
:h[elp] keyword- 도움말 열기
:sav[eas] file- 다른 이름으로 저장
:clo[se]- 현재 창 닫기
:ter[minal]- 터미널 열기
K- 커서가 가리키는 단어의 설명글 열기
Tip터미널에서vimtutor를 실행시켜 Vim의 명령어를 학습해봅시다.
커서이동
h- 왼쪽으로 한 칸 이동
j- 아래로 한 칸 이동
k- 위로 한 칸 이동
l- 오른쪽으로 한 칸 이동
H- 현재화면 상단으로 점프
M- 현재화면 중단으로 점프
L- 현재화면 하단으로 점프
w- 다음 단어 시작으로 점프
W- 다음 단어 시작으로 점프 (특수문자 포함)
e- 다음 단어 끝으로 점프
E- 다음 단어 끝으로 점프 (특수문자 포함)
b- 이전 단어 시작으로 점프
B- 이전 단어 시작으로 점프 (특수문자 포함)
ge- 이전 단어 끝으로 점프
gE- 이전 단어 끝으로 점프 (특수문자 포함)
%- 현재 괄호의 짝으로 점프 (:h matchpairs를 통해 더 많은 정보를 얻을 수 있습니다.)
0- 현재 행 시작으로 점프 (공백 포함)
^- 현재 행 시작으로 점프
$- 현재 행 끝으로 점프 (공백 포함)
g_- 현재 행 끝으로 점프
gg- 문서 첫 줄 시작으로 점프
G- 문서 끝 줄 시작으로 점프
5ggor5G- 5번째 행 시작으로 점프
gd- 지역변수 선언위치로 점프
gD- 전역변수 선언위치로 점프
fx- 다음 검색 문자 x로 점프
tx- 다음 검색 문자 x 앞에 점프
Fx- 이전 검색 문자 x로 점프
Tx- 이전 검색 문자 x 뒤에 점프
;- 최근 f/t/F/T 명령어 실행
,- 최근 F/T/f/t 명령어 실행
}- 다음 단락으로 점프
{- 이전 단락으로 점프
zz- 화면 위치 중간으로 조정
Ctrl+e- 한 줄 아래로 화면 조정
Ctrl+y- 한 줄 위로 화면 조정
Ctrl+b- 한 화면 위로 조정
Ctrl+f- 한 화면 아래로 조정
Ctrl+d- 반 화면 아래로 조정
Ctrl+u- 반 화면 위로 조정
Tip이동 명령 앞에 숫자를 붙이면 그 수만큼 반복합니다. 예를 들면,4j는 4행 아래로 이동합니다.
삽입 모드
i- 현재 커서 앞에 삽입
I- 현재 커서 행 시작에 삽입
a- 현재 커서 뒤에 삽입
A- 현재 커서 행 끝에 삽입
o- 현재 커서 행 아래에 새 행을 삽입
O- 현재 커서 행 위에 새 행을 삽입
ea- 단어 끝 뒤에 삽입
Ctrl+h- 이전 문자 제거
Ctrl+w- 이전 단어 제거
Ctrl+j- 한 줄 바꿈
Ctrl+t- 한 탭 들여쓰기
Ctrl+d- 한 탭 내어쓰기
Ctrl+n- 다음 단어 탐색 (자동완성)
Ctrl+p- 이전 단어 탐색 (자동완성)
Ctrl+rx- 레지스터 x의 내용 삽입
Ctrl+ox- Temporarily enter normal mode to issue one normal-mode command x.
Esc- 삽입모드 종료
편집 모드
r- 한 글자 바꾸기
R- 한 글자 이상 바꾸기(ESC누르면 종료)
J- 현재 행과 다음 행 연결
gJ- 현재 행과 다음 행 연결 (공백무시)
gwip- 단락 리플로우
g~- 커서 이동으로 대·소문자 전환
gu- 커서 이동으로 소문자 전환
gU- 커서 이동으로 대문자 전환
cc- 한 행 전체 새로 쓰기
C- 한 행 끝까지 새로 쓰기
c$- 한 행 끝까지 새로 쓰기
ciw- 한 단어 전체 새로 쓰기
cworce- 한 단어 끝까지 새로 쓰기
s- 한 문자 새로 쓰기
S- 한 행 전체 새로 쓰기 (cc와 동일)
xp- 잘라내고 붙여넣기
u- 실행취소
U- 최근 수정한 줄 복원(실행취소)
Ctrl+r- 다시실행
.- 최근 명령어 반복
선택 모드 (비주얼 모드)
v- 비주얼 모드
V- 비주얼 라인
o- 선택 영역 반대쪽 끝으로 점프
Ctrl+v- 비주얼 블록
O- 블록의 반대쪽 모서리로 이동
aw- 단어 선택
ab- 소괄호() 구간 선택
aB- 중괄호{} 구간 선택
at- 태그<> 구간 선택
ib- 소괄호() 내부 선택
iB- 중괄호{} 내부 선택
it- 태그<> 내부 선택
Esc- 선택 모드 종료
Tipb또는B대신에(또는{사용가능.
선택 모드 명령
>- 선택 행 들여쓰기
<- 선택 행 내어쓰기
y- 선택 구간 복사
d- 선택 구간 삭제
~- 대소문자 반전
u- 선택 구간 소문자 전환
U- 선택 구간 대문자 전환
레지스터
:reg[isters]- 레지스터 내용 확인
"xy- 레지스터 x 복사
"xp- 레지스터 x 붙여넣기
"+y- 클립보드 복사
"+p- 클립보드 붙여넣기
Tip레지스터는 ./viminfo에 저장되고, 다음 Vim 재시작 때 다시 읽어들입니다.
Tip특수 레지스터:
0- 최근 복사 레지스터 "- 최근 사용 레지스터 %- 현재 파일명 #- 대체 파일명 *- 클립보드 (X11 primary) +- 클립보드 (X11 clipboard) /- 최근 검색 패턴 :- 최근 Vim 명령줄 .- 최근 삽입 텍스트 -- 최근 제거 문자 =- 표현식 레지스터 _- 블랙홀 레지스터
마킹
:marks- 마킹 항목 표시
ma- 현재 위치를 a로 마킹
`a- 마크 a로 점프
y`a- 마크 a까지 복사
`0- 종료 전 커서위치로 점프
`"- 최근 편집한 커서 위치로 점프
`.- 최근 변경한 커서 위치로 점프
``- 최근 점프 전 위치로 점프
:ju[mps]- 점프목록
Ctrl+i- 이전 점프목록 위치로 점프
Ctrl+o- 다음 점프목록 위치로 점프
:changes- 변경목록
g,- 이전 변경목록 위치로 점프
g;- 다음 변경목록 위치로 점프
Ctrl+]- 커서가 가리키는 태그로 점프
Tip마킹한 곳으로 점프 시 그레이브 액센트 (`) 또는 아포스트로피 (') 모두 사용가능합니다. 아포스트로피 사용 시, 마킹한 곳의 줄 머리로 이동합니다. (공백 미포함)
매크로
qa- 매크로 a 기록 시작
q- 매크로 기록 중지
@a- 매크로 a 실행
@@- 최근 매크로 재실행
잘라내기와 붙여넣기
yy- 한 행 복사하기
2yy- 2줄 복사하기
yw- 다음 단어까지 복사하기
yiw- 한 단어 복사하기
yaw- 한 단어 복사하기 (공백포함)
y$- 한 행 끝까지 복사하기
p- 커서 뒤에 붙여넣기
P- 커서 앞에 붙여넣기
gp- 커서 뒤에 붙여넣고 붙여넣은 행 다음으로 커서 옮기기
gP- 커서 앞에 붙여넣고 붙여넣은 행 다음으로 커서 옮기기
dd- 한 행 잘라내기
2dd- 2줄 잘라내기
dw- 다음 단어까지 잘라내기
diw- 한 단어 잘라내기
daw- 한 단어 잘라내기 (공백포함)
D- 한 행 끝까지 잘라내기
d$- 한 행 끝까지 잘라내기
x- 한 문자 잘라내기
문단모양
>>- 한 탭 들여쓰기
<<- 한 탭 내어쓰기
>%- 중·소괄호 구간 들여쓰기
>ib- 소괄호 내부 들여쓰기
>at- 태그 구간 들여쓰기
3==- 3줄 자동정렬
=%- 중·소괄호 구간 자동정렬
=iB- 중괄호 내부 자동정렬
gg=G- 전체 버퍼 자동정렬
]p- 붙여쓰고 현재 행 들여쓰기 조
나가기
:w- 저장하기
:w !sudo tee %- 관리자로 저장하기
:wqor:xorZZ- 저장하고 나가기
:q- 나가기 (변경확인)
:q!orZQ- 나가기 (변경무시)
:wqa- 모든 탭 저장하고 나가기
검색과 바꾸기
/pattern- 패턴 검색 (순방향)
?pattern- 패턴 검색 (역방향)
\vpattern- 특수 매직 패턴
n- 다음 검색항목으로 점프
N- 이전 검색항목으로 점프
:%s/old/new/g- 모든 old를 new로 바꾸기
:%s/old/new/gc- 모든 old를 new로 확인하며 바꾸기
:noh[lsearch]- 검색 하이라이트 제거
여러 파일 검색
:vim[grep] /pattern/ {`{file}`}- 여러 파일에서 패턴 검색
e.g.:vim[grep] /foo/ **/*
:cn[ext]- 다음 검색항목으로 점프
:cp[revious]- 이전 검색항목으로 점프
:cope[n]- 일치 목록을 새 창으로 열기
:ccl[ose]- 일치 목록 창 닫기
탭
:tabnewor:tabnew {page.words.file}- 새 탭에서 파일 열기
Ctrl+wT- 현재 분할 창을 새로운 탭으로 이동
gtor:tabn[ext]- 다음 탭으로 이동
gTor:tabp[revious]- 이전 탭으로 이동
#gt- #번째 탭으로 이동
:tabm[ove] #- 현재 탭을 #번째로 이동
:tabc[lose]- 현재 탭과 그 안의 창들 닫기
:tabo[nly]- 현재 탭 이외의 모든 탭 닫기
:tabdocommand - 모든 탭에서command실행하기 (예를 들어,:tabdo q- 열린 모든 탭 닫기)