Vim이란 무엇인지 알아보고, 커서와 페이지를 이동하는 방법을 알아보고 단어가 무엇인지, 어떤 차이가 있는지, 어떻게 이동하는지 살펴보겠습니다.
Vim
Vim
은 vi
호환 텍스트 편집기입니다.
이전에 vi가 있었는데, vi는 유닉스 환경에서 많이 쓰이는 문서 편집기로, William Nelson Joy에 의해 개발되어 76년에 발표되었습니다.
vi가 발명된 후, Bram Moolenaar가 91년 11월에 vi에 수많은 추가기능을 포함한 Vi IMproved를 발표했고, 이것을 Vim이라 부릅니다.
명령모드, 입력모드
텍스트 편집 화면을 맨 처음 접근했을 때, 해당 상태는 명령모드가 됩니다.
커서도 평소의 일자가 아닌 직사각형의 모양인 것을 확인할 수 있습니다.
이때는 평소에 하던 것처럼 문서를 편집할 수 없습니다.
문서에 텍스트를 입력하고 싶다면 i
를 입력해 입력모드로 들어갑니다.
다시 명령모드로 들어가고 싶다면 esc
를 누릅니다.
Vim에서 명령어의 대문자 입력과 소문자 입력은 다릅니다.
기본 상하좌우 이동
h
: 왼쪽으로 한 칸 이동j
: 아래쪽으로 한 칸 이동k
: 위쪽으로 한 칸 이동l
: 오른쪽으로 한 칸 이동
아래와 위로 이동할 때, 자동으로 커서의 원래 열의 위치를 최대한 지키면서 이동합니다.
만약 현재 커서가 10번째 열에 있었고, 아래나 위의 줄은 현재 커서의 위치보다 짧다면, 다음 커서의 열의 위치는 이동한 줄의 맨 끝 자리가 됩니다.
이후 이동하는 줄이 맨 처음 원래 있었던 열의 위치보다 길다면, 해당 열로 이동합니다.
파일 맨 처음, 끝 이동
gg
: 파일 맨 첫줄 맨 앞으로 이동G
: 파일 맨 마지막 줄 맨 앞으로 이동
페이지 이동
ctrl u
: 페이지 절반 올리고 이동ctrl d
: 페이지 절반 내리고 이동ctrl f
: 페이지 내리고 이동ctrl b
: 페이지 올리고 이동
커서 고정한 상태에서 페이지 이동
zz
: 현재 커서 위치의 줄을 페이지 가운데로 페이지 이동zt
: 현재 커서 위치의 줄을 페이지 맨 위로 페이지 이동zb
: 현재 커서 위치의 줄을 페이지 맨 아래로 페이지 이동ctrl e
: 현재 커서 위치 고정하고 페이지 한 줄 내리기ctrl y
: 현재 커서 위치 고정하고 페이지 한 줄 올리기
한 페이지 안에서 이동
H
: 한 페이지의 제일 첫 줄 맨 앞으로 이동L
: 한 페이지의 제일 마지막 줄 맨 앞으로 이동M
: 한 페이지의 가운데 줄 맨 앞으로 이동
특정 위치로 이동
:(num)
:num
번 줄 맨 앞으로 이동 (숫자 입력하고 엔터)(num)G
:num
번 줄 맨 앞으로 이동
문장, 문단 단위 이동
(
: 문장 시작으로 이동 (?))
: 문장 끝으로 이동 (?){
: 문단 시작으로 이동}
: 문단 끝으로 이동
줄 단위 이동
+
: 다음 줄 맨 처음으로 이동-
: 이전 줄 맨 처음으로 이동
한 문장 안에서 이동
$
: 문장 맨 뒤로 이동0
: 문장 맨 앞으로 이동 (공백 포함)^
: 문장 맨 앞으로 이동 (공백 제외)(num)|
: 문장의num
열로 이동
괄호 이동
%
: 현재 괄호(소, 중, 대)에서 짝이 맞는 괄호로 이동[{
: 커서가 속한 여는 중괄호로 이동]}
: 커서가 속한 닫는 중괄호로 이동[(
: 커서가 속한 여는 소괄호로 이동])
: 커서가 속한 닫는 소괄호로 이동]]
: 여는 중괄호로 정방향 이동 (?)[[
: 여는 중괄호로 역방향 이동 (?)][
: 닫는 중괄호로 정방향 이동 (?)[]
: 닫는 중괄호로 역방향 이동 (?)
위의 물음표가 붙은 4개의 명령어가 뭔가 생각한 대로 동작이 잘 되지 않아서 실험을 해봤습니다.
이것들은 줄에서 맨 처음에 중괄호가 있을 때 동작합니다.
해당 중괄호가 없다면, 파일의 맨 처음 혹은 제일 마지막 줄의 처음으로 이동합니다..
JSON 파일에 유용할 수 있을 것 같습니다. 확실하지 않습니다.
한 줄에서 글자 이동
f(ch)
:ch
(문자)의 위치로 정방향 이동F(ch)
:ch
(문자)의 위치로 역방향 이동t(ch)
:ch
(문자)의 앞 위치로 정방향 이동T(ch)
:ch
(문자)의 앞 위치로 역방향 이동;
: 계속 이동
단어 이동
w
: 다음 한 word의 맨 처음 글자로 이동W
: 다음 한 WORD의 맨 처음 글자로 이동e
: 다음 한 word의 맨 뒷글자로 이동E
: 다음 한 WORD의 맨 뒷글자로 이동b
: 이전 한 word의 맨 처음 글자로 이동B
: 이전 한 WORD의 맨 처음 글자로 이동ge
: 이전 한 word의 맨 뒷글자로 이동gE
: 이전 한 WORD의 맨 뒷글자로 이동
word와 WORD
word
: 영문대소문자, 숫자, 언더바(_)로만 이루어진 단어 (언더바 이외의 특수문자 제외)
WORD
: 공백에 의해 나누어진 단어 (특수문자 포함)
이해하기 좋은 사진이 있어 첨부합니다.
예시를 보겠습니다.
1
Two words. One_word.
위 예시에서 커서가 맨 처음에 있었을 때,
T
wo w
ords.
O
ne_word.
w를 누르면 위와 같이 이동합니다.
words.
에서 word
는 한 word이고, .
도 한 word입니다.
One_word.
에서 One_word
가 한 word이고, .
도 한 word입니다.
W를 누르면, 아래와 같이 이동합니다.
T
wo w
ords. O
ne_word.
공백으로만 구분하기 때문입니다.
일치하는 단어 이동
*
: 현재와 일치하는 단어 다음으로 이동#
: 현재와 일치하는 단어 이전으로 이동
해당 단어는 대소문자를 구분하지 않는 것 같습니다.
VSCode에서 사용하기
확장으로 Vim 플러그인을 설치합니다.
저는 macOS를 써서 어느 정도 괜찮지만, Windows 사용자는 Vim과 키가 겹치게 됩니다.
shift ctrl p
를 누르고, settings.json
에 들어가서 사용하지 않을 키를 지정할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
"vim.handleKeys": {
"<C-c>": false,
"<C-z>": false,
"<C-y>": true,
"<C-v>": true,
"<C-x>": true,
"<C-a>": true,
"<C-f>": true,
"<C-h>": false,
"<D-c>": false
},