■ VIM의 모드
VIM에는 3가지 모드가 존재한다: 입력모드, 편집모드, 명령모드
1. 입력모드
텍스트를 입력하거나 삭제함
자판 | 의미 |
a | 커서가 위치한 다음 칸부터 입력 |
A | 커서가 위치한 행의 끝부터 입력 |
i | 커서가 위치한 칸부터 입력 |
I | 커서가 위치한 행의 처음부터 입력 |
o | 커서가 위치한 행의 아래에 행을 만들어 입력 |
O | 커서가 위치한 행의 위에 행을 만들어 입력 |
2. 편집모드
편집 모드 내에서는 복사하기, 자르기, 붙이기 등을 수행할 수 있음
1) 커서의 이동
(1) 기본 단위 커서 이동
자판 | 의미 |
h | 왼쪽으로 한 칸 이동 |
j | 아래로 한 칸 이동 |
k | 위로 한 칸 이동 |
l | 오른쪽으로 한 칸 이동 |
(2) 줄 단위, 단어 단위 커서 이동
Using a count for a motion: <number> + <command>: repeat command by number
커서 위치
(1) <ctrl> + g
- 파일 이름과 커서의 현재 위치를 화면의 하단부에 표시해줌
자판 | 의미 |
0 | 커서를 행의 처음으로 이동 |
^ | 커서를 해당 행의 처음 문자로 이동 |
<enter> | 커서를 다음 행의 첫 문자로 이동 |
$ | 커서를 해당 행의 맨 뒤로 이동 |
w | 커서를 다음 단어의 첫 글자로 이동 a. 추가 활용 1: nw (n: 임의의 숫자) - n개의 단어씩 이동 - ex) 3w: 3단어씩 이동 |
b | 커서를 이전 단어의 첫 글자로 이동 a. 추가 활용 1: nb (n: 임의의 숫자) - n개의 단어씩 뒤로 이동 - ex) 3b: 3단어씩 뒤로 이동 |
W | 공백 기준으로 다음 단어의 시작 위치로 이동 |
B | 공백 기준으로 이전으로 이동 |
e | 단어 마지막 글자 기준으로 다음으로 이동 |
E | 공백 기준으로 다음 단어의 끝으로 이동 |
+ | 커서를 다음 행의 첫 문자로 이동 |
- | 커서를 이전 행의 첫 문자로 이동 |
H | 커서를 현재 페이지의 첫 행의 첫 글자로 이동 |
L | 커서를 현재 페이지의 마지막 행의 첫 글자로 이동 |
% | 대칭되는 괄호 문자 ("()", "{}", "[]")로 이동 |
G |
글의 맨 밑으로 이동 |
1G | - 글의 맨 처음으로 이동 - 또는 "gg"를 입력해도 동일함 - 추가적인 정보: nG (n: 임의의 숫자) -- n번째 줄로 이동함 |
M | 커서를 화면 중간으로 이동 |
( | 문장의 시작으로 이동 |
) | 문장의 끝으로 이동하여 다음 단어의 시작으로 커서 이동 |
{ | 문단의 시작 위치로 이동 |
} | 문단 끝으로 이동 |
자판 | 의미 |
f | - 문자의 위치로 이동 - ; 를 누르면 계속 이동 |
F | - 백워드 방향으로 문자의 위치로 이동 |
* | 현재의 단어를 포워드 방향으로 찾기 |
# | 현재의 단어를 백워드 방향으로 찾기 |
자판 | 의미 |
]] | 포워드 방향으로 여는 컬리 블레이스( "{" )로 이동 |
[[ | 백워드 방향으로 여는 컬리 블레이스( "{" )로 이동 |
<enter> | 커서를 다음 행의 첫 문자로 이동 |
(3) 페이지 단위 커서 이동
자판 | 의미 |
<ctrl> + <F> | 커서를 한 페이지 아래로 이동 |
<ctrl> + <B> | 커서를 한 페이지 위로 이동 |
<ctrl> + <U> | 커서를 반 페이지 위로 이동 |
<ctrl> + <D> | 커서를 반 페이지 아래로 이동 |
2) 복사하기, 삭제하기, 붙이기
(1) Objects
VIM에서는 명령어의 조합이 <command> + <object>이다. 가령, 우리가 3개의 단어를 현재 커서의 위치에서부터 삭제를 하고자 한다면 d3w을 누르게 될 것이다. 이때, d (delete)는 command이고, 3w은 object에 해당을 한다. 따라서, command와 object의 조합으로 무궁무진하게 vim의 활용도가 높아진다.
• dw: delete word
example 1: di{: {}안에 있는 모든 것들을 삭제
example 2: di(: ()안에 있는 모든 것들을 삭제
example 3: da{: {}을 포함한 {}안에 있는 모든 것들을 삭제
example 4: daw: 커서가 포함하는 한 단어 전체를 삭제
example 4: di': ''안에 있는 모든 것들을 삭제
example 5: dt( 현재 커서부터 바로 다음 나오는 (까지 삭제
Example 6: d/use:
- /: search 키워드
- search 키워드를 사용하면, 대응되는 단어가 하이라이트 됨
- 현재 커서로부터 앞에 나오는 use까지 삭제함
Operation | Description |
d | delete |
c | change (delete and enter insert mode) |
> | indent |
v | visually select |
y | yank (copy) |
자판 | 의미 |
w | 단어 (word 또는 forward by a word) |
b | 뒤 |
t | 태그 (tag) |
p | 문단 (paragraph) |
s | 문장 (sentence) |
e | end of the current word, including the last characters |
$ | to the end of the line, including the last characters |
i | inner ex) iw: inner word (works from anywhere in a word) ex) it: 태그 안에 있는 것* ex) i'': 쌍따옴표 안에 있는 것 ex) ip: 문단 안에 있는 것 |
j | 윗줄 |
k | 아랫줄 |
= Vim의 경우, HTML을 수정하는 경우, 어떤 태그에 위치했는지 알고 있음
명령어 | 의미 |
yG | 현재부터 파일의 끝까지 복사 |
:1,2 co 3 | 1, 2행을 3행 다음으로 복사 |
:1,2 m 3 | 1, 2행을 3행 다음으로 이동 |
:1, 200 w <file> | 1~200 행을 <file>이라는 파일에 저장 |
자판 | 의미 |
x | 현재 커서가 위치한 한 글자 삭제 (잘라냄) |
X | 현재 커서가 위치한 앞 한글자 삭제 (잘라냄) |
yy | 현재 커서가 위치한 행을 복사 |
nyy | -ex) 5yy - 현재 커서가 위치한 행부터 n행을 복사 |
yw | 현재 커서가 위치한 한 컬럼부터 한 단어 복사 |
dd | 현재 커서가 위치한 행을 삭제 (잘라냄) |
ndd | 현재 커서가 위치한 행부터 n행을 삭제 (잘라냄) |
dw | 현재 커서가 위치한 컬럼 이후부터 한 단어 삭제 (잘라냄) - 추가 활용: dnw (n: 임의의 숫자) 현재 커서가 위치한 컬럼 이후부터 n개의 단어 삭제 ex) d3w: 커서가 위치한 곳부터 3개의 단어 삭제 |
d0 | 현재 커서가 위치한 컬럼에서 행의 선두까지 삭제 (잘라냄) |
D or d$ | 현재 커서가 위치한 컬럼 이후부터 한 행 삭제 (잘라냄) |
p | 현재 커서가 위치한 행 다음 행에 붙여넣기 |
p* | 클립보드 붙여넣기 |
P | 현재 커서가 위치한 행 윗행에 붙이기 |
x : 커서가 있는 문자 삭제
X : 커서가 있는 문자 앞의 문자 삭제
dw : 커서가 있는 단어 삭제
db : 커서 앞에 있는 단어 삭제
dW : 공백으로 구분된 뒷 단어 삭제
dB : 공백으로 구분된 앞 단어 삭제
dd : 커서가 있는 라인 삭제
D : 커서가 있는 라인의 나머지 삭제
d) : 문장의 나머지 삭제
d} : 문단의 나머지 삭제
dG : 파일의 나머지 삭제
dH : 화면의 시작까지 삭제
dL : 화면의 나머지 삭제
J : 커서와 다음 단어의 공백을 모두 삭제
~ | 문자형(대, 소문자) 변경 |
복사
yw : 커서가 있는 단어를 복사
yb : 커서가 있는 앞 단어를 복사
yW : 공백으로 구분된 뒷 단어 복사
yB : 공백으로 구분된 앞 단어를 복사
y : 특정한 다음 텍스트 복사
yL : 화면의 나머지 복사
yy : 커서가 있는 라인을 복사, 커서가 가리키는 곳으로 라인을 이동
y) : 문자의 나머지 복사
y} : 문단의 나머지 복사
yG : 파일의 나머지 복사
yH : 화면 시작까지 복사
바꾸기 명령 (r: replace, or c:change)
r + <character>: 커서에 있는 단어를 <character>로 대체
r : 커서에 있는 문자 대치
R : 입력 모드로 한 문자씩 덮어씀
s : 커서가 있는 문자 삭제 후 입력 모드로 전환
S : 커서가 있는 줄을 삭제한 후 입력 모드로 전환
c: delete + insert
Example: ci{: {}내의 단어들을 삭제 후, insert모드로 입력 시작
cb : 커서가 있는 앞 문자 삭제 후 입력 모드
cW : 공백으로 구분된 뒷 단어를 삭제한 후에 입력 모드
cB : 공백으로 구분된 앞 단어 삭제 후 입력 모드
cc : 커서가 있는 라인을 삭제하고 입력 모드
C : 커서가 있는 라인의 나머지를 삭제하고 입력 모드로 전환
c0 : 커서에서부터 라인의 시작까지 텍스트 바꾸기
c : 특정 테스트 바꾸기
c) : 문장의 나머지 바꾸기
c} : 문단의 나머지 바꾸기
cG : 파일의 나머지 바꾸기
cm : 표시까지 모든 것 바꾸기
cL : 화면의 나머지 바꾸기
cH : 화면의 시작까지 바꾸기
:1,2 co 3 1~2행을 3행 다음으로 복사
:4,5 m 6 4~5행을 6행 위로 이동
3) 명령의 취소와 반복
자판 | 의미 |
u | 최근 실행 명령 취소 (undo) |
. | 최근 실행 명령 반복 |
CTRL + R | 앞감기 |
4) 변환하기 (바꾸기)
자판 | 의미 |
r | 커서가 위치한 곳의 한 글자를 다른 한 글자로 변환 |
R | 커서가 위치한 곳부터 덮어씀 |
s | 커서가 위치한 곳부터 끼워넣기 |
S | 커서가 위치한 행 전체를 삭제하고 새로운 문자열 입력 |
ns | 커서가 위치한 것부터 n글자를 삭제하고 끼워넣기 |
C | 커서가 위치한 곳부터 끝까지 행을 삭제하고 새로운 문자열 입력 |
cw | 커서가 위치한 곳부터 한 단어를 다른 문자열로 변환 |
~ | 커서가 위치한 곳부터 대소문자를 서로 변환 |
5) 다중 작업: 하나의 터미널 화면을 여려 개로 분리하여 작업할 수 있음
자판 | 의미 |
<ctrl> + <W> + <N> | 윈도우를 가로방향으로 생성함 |
<ctrl> + <W> + <V> | 현재 파일을 새로운 윈도우에 세로 방향으로 생성함 |
<ctrl> + <W> +<W> | 작업하는 윈도우를 이동함 |
<ctrl> + <W> + <X> | 윈도우를 위치 변경함 |
<ctrl> + <W> + <C> | 현재 작업하는 윈도우를 종료함 |
<ctrl> + <W> + <D> | 현재 윈도우를 제외한 모든 윈도우를 종료한다 |
(명령모드) :sp <file_name> | - <file_name>에 대응되는 파일을 위에 열고 창을 상하로 분할 - <file_name>을 생략할 경우에는 현재 파일을 의미함 |
(명령모드) :vs <file_name> | - <file_name>에 대응되는 파일을 위에 열고 창을 좌우로 분할 - <file_name>을 생략할 경우에는 현재 파일을 의미함 |
(명령모드) :new | - 창을 상하로 분할하며, 위쪽에 새로운 창을 만듬 |
(명령모드) :vnew | - 창을 좌우로 분할하며, 위쪽에 새로운 창을 만듬 |
창 크기 조정 | ||
CTRL-W = | 창의 크기를 모두 균등하게 함 | |
CTRL-W _ | 수평 분할에서 창의 크기를 최대화 | |
CTRL-W | | 수직 분할에서 창의 크기를 최대화 | |
CTRL-W [N]+ | :res[ize] +N | 창의 크기를 N행 만큼 증가 |
CTRL-W [N]- | :res[ize] -N | 창의 크기를 N행 만큼 감소 |
CTRL-W [N]> | 창의 크기를 오른쪽으로 N칸 만큼 증가 | |
CTRL-W [N]< | 창의 크기를 오른쪽으로 N칸 만큼 감소 |
창생성 | ||
CTRL-W s | :[N]sp[plit] | 현재 파일을 두 개의 수평 창으로 나눔 |
CTRL-W v | :[N]vs[plit] | 현재 파일을 두 개의 수직 창으로 나눔 |
CTRL-W n | :new | 새로운 수평 창 생성 |
CTRL-W ^ 또는 CTRL-W CTRL-^ | 수평 창으로 나누고 이전 파일의 오픈 | |
CTRL-W f | 창을 수평으로 나누고 커서 위치의 파일 오픈 | |
CTRL-W i | 커서 위치의 단어가 정의된 파일을 오픈 | |
창삭제 | ||
CTRL-W q | :q[uit]! | 현재 커서의 창을 종료 |
CTRL-W c | :close | 현재 커서의 창 닫기 |
CTRL-W o | :on[ly] | 현재 커서의 창만 남기고 모든 창 삭제 |
창이동 | ||
CTRL-W h | 왼쪽 창으로 커서 이동 | |
CTRL-W j | 아래쪽 창으로 커서 이동 | |
CTRL-W k | 위쪽 창으로 커서 이동 | |
CTRL-W l | 오른쪽 창으로 커서 이동 | |
CTRL-W w | 창을 순차적으로 이동 | |
CTRL-W p | 가장 최근에 이동한 방향으로 이동 | |
CTRL-W t | 최상위 창으로 이동 | |
CTRL-W b | 최하위 창으로 이동 | |
창이동 | ||
CTRL-W r | 순착으로 창의 위치를 순환 | |
CTRL-W x | 이전 창과 위치를 바꿈 | |
CTRL-W H | 현재창을 왼쪽 큰화면으로 이동 | |
CTRL-W J | 현재창을 아래쪽 큰화면으로 이동 | |
CTRL-W K | 현재창을 위쪽 큰화면으로 이동 | |
CTRL-W L | 현재창을 오른쪽 큰화면으로 이동 |
3. 명령모드:
- 파일을 저장하거나 종료하는 등의 명령을 수행할 수 있음
- ex 모드라고 부르기도 함
1) 위치 이동
자판 | 의미 |
:1 | 커서를 파일의 첫 번째 줄로 이동 |
:n | 커서를 파일의 n번째 행으로 이동 |
:$ | 커서를 파일의 마지막 행으로 이동 |
2) 글자변환
자판 | 의미 |
:s/<old_string>/<new_string>/g | 커서가 위치하고 있는 행의 문자열을 새로운 문자열로 변환 |
:i,j s/<old_string>/<new_string>/g | i번째 행부터 j번째 행까지 문자열을 새로운 문자열로 변환 |
:%s/<old_string>/<new_string>/g | 파일 전체의 문자열을 새로운 문자열로 변환 |
s: substitute
3) 파일 열기 및 저장
자판 | 의미 |
:w <file_name> | 파일을 저장한다. |
:sav <file_name> | 현재 파일을 다른 이름으로 저장한다 |
:up | 변경 사항이 있을 경우에만 저장 |
:x | vim을 종료하면서, 변경사항이 있을 경우에만 저장 |
:e <file_name> | 파일을 편집용으로 연다. |
- ZZ: 변경사항 보관 후 vi 종료. 임시 버퍼의 내용을 vi로 호출할때 사용되었던 파일에 기록한 후 vi를 빠져나옴.
- <CTRL> + Z + Q: 명령모드의 :q!
와 동일
4) 문자열 찾기
자판 | 의미 |
/<string> | - <string>에 대응되는 문자열을 찾는다. - 입력한 후 *를 누르면, 해당 문자열에 대응되는 문자열을 내림차순 순으로 즉시 찾는다. - n을 누르면 다음 검색결과로 이동 (N, 또는 ?,은 반대방향) |
:set hlsearch | 검색결과 하이라이트 설정 |
:set nonhlsearch | 검색결과 하이라이트 해체 |
4. 기타 유용한 명령어
1) 단어 완성: - <ctrl>+<N> → <ctrl>+<P>
- <ctrl>+<X> → <ctrl>+<N>
2) 줄바꿈 자동 완성:
(1) visual 모드에서 자리 바꿈하고 싶은 줄을 선택
(2) 명령 모드에서 "="를 입력
~ - 선택 문자 대소문자 변경
Ctrl + A - 숫자를 증가시키기
Ctrl + X - 숫자를 감소시키기
:tabnew - 새로운 탭 열기
:gt - 다음 탭으로 이동하기
:gT - 이전 탭으로 이동하기
:e ./ - 현재 탭에 오픈할 파일 탐색하기( ./ 는 현재위치에서 탐색 시작)
:colorscheme 스키마명 - VIM의 칼라스키마를 변경함(blue, desert, evening 등.. 스키마명에서 탭누르면 자동완성됨)
zc - 코드 접기(fold)
zo - 접힌 코드 펼치기
zd - fold 지우기
zR - 접힌 코드 모두 펼치기
zM - 코드 모두 접기
zD - 모든 fold 지우기
:buffers - 현재 Vim에서 여러 파일을 열었을때 버퍼에 있는 목록 확인
:buffer 숫자 - 버퍼 목록에 나온 숫자를 입력하면 해당 파일을 오픈함 ( :buffer 대신 :b 도 가능)
:bnext - 버퍼에 있는 다음 파일로 이동 ( :bn 도 가능)
:bprevious - 버퍼에 있는 이전 파일로 이동 ( :bp 도 가능)
:ball - 버퍼 목록에 있는 파일들이 가로로 분할된 창에 열림
Tip. 1 멀티 라인 커맨드 [3]
1. 일반 Vlsual 모드가 아닌 Visual Block 모드로 들어간다: <ctrl> + v
2. 블록을 지정 후, vim 명령을 사용한다.
(1) 문자 하나를 제거하려고 하면 d를 누름
(2) 문자열을 추가하려면 <shift> + i 로 누른 후, 편집기 모드로 들어감
3. 이후 작업이 완료가 되면 <ESC> 키를 두번 누름
Tip. 2 여러 줄 공백 넣기
VIM에서 여러 줄의 공백을 한번에 넣는 방법은 아래와 같이 몇몇 방법들이 존재한다.
1. 멀티 라인 커맨드를 사용하는 방법
2. 명령모드에서 다음 커맨드를 입력: n>>
- n 공백 문자를 넣을 줄의 수
- ex) >> : 한 개 줄에 공백을 넣음
- ex) 3>> : 세 개 줄에 공백을 넣음
Vim의 이점
1) a lot of editing tasks
첫번째 줄 이동: gg
마지막 줄 이동: G
명령 모드에서
- 50gg : 50번째 줄로 이동
- :50 : 50번째 줄로 이동
H: 스크린의 가장 윗부분줄로 이동
M: 스크린의 중앙줄로 이동
L: 스크린의 마지막 줄로 이동
zz: 현재 커서가 있는 부분을 스크린의 중앙부분으로 위치하게 함
Completion in Vim
1. <ctrl> + p: default key binding for completion
- previous match (Backward)
2. <ctrl> + n
3. Tag Completion - ctags
<ctrl> + x -> <ctrl> + ]
<ctrl> + R : 되돌리기 취소
Vim과 관련한 추가 기능들
(1) TAB: (명령어 모드) :tabedit
• 여러 파일들을 탭형식으로 연다.
• 참조: https://m31phy.tistory.com/235
(2) 셰션 만들기
• 세션 만들기: (명령어 모드) :mksession <session_name.vim>
• 세션을 열 경우: (터미널에서) vim -S <session_name.vim>
• VIM에서는 사용자가 연 파일들을 세션의 형태로 저장을 할 수 있다. 이 세션의 장점은 사용자가 작업을 위해 여러 파일들을 반복적으로 열 필요가 없다는 점이다. 가령 아래의 그림과 같이 탭 형태로 3개의 파일이 열려져 있다고 하자. 이 때 vim을 종료한 후, 이 구성으로 시작을 하고 싶다면, 세션을 만들면 된다.
■ Reference:
[1]
[2] https://fsd-jinss.tistory.com/132?category=741751[
3] jybaek.tistory.com/758
[4] https://www.youtube.com/watch?v=wlR5gYd6um0
[3] https://www.youtube.com/watch?v=d8XtNXutVto
[5] https://www.youtube.com/watch?v=B-EPvfxcgl0
'컴퓨터 & IT (Computer & IT) > VIM' 카테고리의 다른 글
[Vim] Tab 활용 - 여러 파일들을 같이 작성 (0) | 2021.05.24 |
---|---|
[VIM] 코드 접기(Folding ) (0) | 2021.05.10 |
[VIM] scrooloose/syntastic 구문오류 - python (0) | 2020.06.24 |
[VIM] Plugin 설치 및 자주 사용하는 플러그인 (0) | 2020.03.19 |
[Vim] Jellybean colorscheme 변경 (0) | 2020.03.09 |
댓글