작성: 2020-07-29 수정:
2020-07-29
Vim 사용법
Vim을 시작하기 위해 최소한으로 알아야 되는 정보
1. 커서 이동
h: 왼쪽j: 아래k: 위쪽l: 오른쪽
2. 파일에서 커서, 화면 이동
^E: 위로 이동 (커서 위치 유지)^Y: 아래로 이동 (커서 위치 유지)^F^B{Num} + G: 해당 라인 위치로 이동
3. 편집의 기초
Insert Mode
i: 커서 위치에 삽입a: 커서 다음 위치에 삽입I: 행의 맨앞 위치에 삽입A: 행의 마지막 위치에 삽입
ESC가 눌러지기 까지 하나의 수정단위가 된다. u를 누른 경우 해당 명령이 undo가 된다.
4. 반복 명령
.가장 마지막에 수행한 명령을 재실행
5. Command Line 모드
:q: 종료:w: 저장:w: 저장:qw: 저장 후 종료
6. 한 줄 삭제, 단어 삭제
dd: 한 줄 삭제dw: 단어 삭제u: 하나의 편집 단위를 undoU: 한 줄의 모든 수정을 undo
7. 블럭설정하기
v: hjkl을 이용한 블럭 설정V: line 단위로 Visual 블럭 설정^V: 세로 단위 Visual 블럭 설정
8. 간단한 편집(replace, changem, one-mode)
r: 하나의 문자를 변경R: 현재 커서위치로 부터 덮어쓰기cc: 현재 라인 삭제 후 입력 모드cw: 단어 삭제 후 삽입 모드o: 현재 커서 아래에 줄 삽입 후 입력 모드O: 현재 커서 위에 줄 삽입 후 입력 모드
9. 복사 붙이기, 삭제 후 붙이기, 레지스터
p: 현재 커서 아랫 줄에 붙여 넣기P: 현재 커서 위치에 붙여 넣기yy: 한 줄 복사Y: 한 줄 복사
10. 작업파일 전환, 디렉토리 열기
vim {dir}: vim은 파일이 아닌 디렉토리도 실행 할 수 있다.:e {fileName}: 해당 파일 열기^L: 화면 다시 그리기^C: 작업중인 파일 확인하기
11. 창을 분할하여 편집하기 기초
:sp: 창을 수평으로 분할:vsp: 창을 수직으로 분할^WW: 분할 되어있는 창 이동^WJ: 창 이동 j 방향^WK: 창 이동 k 방향^WH: 창 이동 h 방향^WL: 창 이동 l 방향^WC: 현재 창 닫기
12. 창 분할, 창 크기 조정
-
^W=: 화면의 크기를 동등하게 - 수평으로 확장한 경우(
:sp) ^W_: 현재 화면을 전체 화면으로-
{num}^W_: 원하는 라인 수 만큼 확장 - 수직으로 확장한 경우(
:vsp) ^W|: 현재 화면을 전체 화면으로{num}^W|: 원하는 라인 수 만큼 확장
13. 파일 비교하기
vimdiff a.c b.c
l: 변경 사항이 없는 같은 내용은 holding이 되어있는데, 접는 선에서 l을 누르면 해제할 수 있다.dp: 다른 창으로 diff 내용 보내기do: 다른 창에서 diff 내용 가져오기
14. Explore, Split explore
ExorExplore: 작업중인 파일에서 다른 디렉토리 열기Se: 분할된 창으로 다른 디렉토리 열기
15. 디렉토리 명령어 RDdo
해당 변경할 디렉토리를 연다 :Ex
R: 이름 변경하기D: 삭제 하기^WO: 현재 커서가 위치한 윈도우를 제외한 나머지 모두 닫기
16. 찾기, 단어찾기
/{str}: 찾고 싶은 문자열 검색?{str}: 찾고 싶은 문자열 역방향 검색n: 다음 문자열N: 이전 문자열*: 커서가 위치한 단어 검색#: 커서가 위치한 역방향 단어 검색
17. man page, pydoc 확인하기
K: 해당 단어의 메뉴얼{num}+K: 원하는 번호의 메뉴얼- pydoc 파이썬 메뉴얼 프로그램
- *.py 파일에서
K실행 시 pydoc이 실행됨
18. 커서 밑 파일 열기
^WF: 해당 경로의 파일이 열림:set isfname해당 변수를 통해 파일을 판단
19. 버퍼 이용하기 1
:ls,:buffers,:files- 현재 열려있는 버퍼는 %
- 직전에 열려있는 버퍼는 #
- a는 active 상태를 나타냄
:sb+{num}버퍼에 있는파일을 스플릿 하여 열기:ls!(Unlist 버퍼까지 보기)
20. 버퍼 이용하기 2
Ctrl-^,:b N이전 버퍼에 있는 파일 열기
21. 레지스터
- 윈도우에서의 클립보드와 유사
- vim이 종료 되어도 (~/.viminfo) 에 저장 되어 있기 때문에 다시 불러 올 수 있음
:regregister에 저장 된 목록 보기0: 복사를 할 때 사용하는 레지스터1: 삭제를 할 때 사용하는 레지스터"": 마지막에 사용한 레지스터 (Default)- 복사 레지스터와 달리 삭제 레지스터는 목록이 늘어나면 밑으로 쉬프팅 된다.
"+{num}+p: {num}에 저장되어 있는 레지스터 붙여 넣기:wv를 통해 현재 레지스터를 저장할 수 있다. (~/.viminfo):wv이후 다른 파일을 열고 ``:rv`를 이용하면 해당 레지스터값을 이용할 수 있다.
22. 사용자 레지스터
(수정중)
추가 팁
윈도우에서 Caps Lock키를 ESC로 사용하기 위해서 여러가지 방법이 있지만, AutoHotkey라는 프로그램을 사용하면, 굉장히 편리한 스크립트를 사용할 수 있다. vim을 사용하다 보면, 한글일 때 명령어가 입력되지 않는 경험을 모두 해봤을 것이다. ex) :w -> :ㅈ 아래의 AutoHotkey를 설치해서 아래의 스크립트를 이용하면 Esc를 CapsLock키와 변경해 줌과 동시에 해당 키를 눌렀을 경우 한글 입력모드라면 영어입력 모드로 변경해 준다.
$CapsLock::
Send, {ESC}
if(IME_CHECK("A"))
Send, {VK15} ;영문이라면 한영전환 키를 입력해준다.
return
/*
IME check
*/
IME_CHECK(WinTitle) {
WinGet,hWnd,ID,%WinTitle%
Return Send_ImeControl(ImmGetDefaultIMEWnd(hWnd),0x005,"")
}
Send_ImeControl(DefaultIMEWnd, wParam, lParam) {
DetectSave := A_DetectHiddenWindows
DetectHiddenWindows,ON
SendMessage 0x283, wParam,lParam,,ahk_id %DefaultIMEWnd%
if (DetectSave <> A_DetectHiddenWindows)
DetectHiddenWindows,%DetectSave%
return ErrorLevel
}
ImmGetDefaultIMEWnd(hWnd) {
return DllCall("imm32\ImmGetDefaultIMEWnd", Uint,hWnd, Uint)
}
Vim 설정하기
Linux의 경우 ~(/home/{user}) 경로에서 .vimrc라는 파일을 생성해서 개인 환경 설정을 진행한다.
아래는 필자가 사용하는 간단한 설정 내용이다.
set number: line number를 화면에 표시한다.set smartindent: smart한 들여쓰기set tabstop=2: tab의 크기를 2로 지정한다.set expandtab: tab을 띄워 쓰기로 대체한다. (ex: tabstop=2 인 경우 띄어쓰기 두 칸)set shiftwidth=2: » 또는 « 키로 들여쓰기 할때, 스페이스 갯수를 설정