Home Vim 사용하기 1 - 이동하기
Post
Cancel

Vim 사용하기 1 - 이동하기

Vim이란 무엇인지 알아보고, 커서와 페이지를 이동하는 방법을 알아보고 단어가 무엇인지, 어떤 차이가 있는지, 어떻게 이동하는지 살펴보겠습니다.

Vim

Vimvi 호환 텍스트 편집기입니다.

이전에 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: 공백에 의해 나누어진 단어 (특수문자 포함)

이해하기 좋은 사진이 있어 첨부합니다.

word와 WORD

예시를 보겠습니다.

1
Two words. One_word.

위 예시에서 커서가 맨 처음에 있었을 때,

Two words. One_word.

w를 누르면 위와 같이 이동합니다.

words.에서 word는 한 word이고, .도 한 word입니다.

One_word.에서 One_word가 한 word이고, .도 한 word입니다.

W를 누르면, 아래와 같이 이동합니다.

Two words. One_word.

공백으로만 구분하기 때문입니다.

일치하는 단어 이동

  • *: 현재와 일치하는 단어 다음으로 이동
  • #: 현재와 일치하는 단어 이전으로 이동

해당 단어는 대소문자를 구분하지 않는 것 같습니다.

VSCode에서 사용하기

확장으로 Vim 플러그인을 설치합니다.

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
},

참고

Vim documentation: help

Vim Quick Start

초보자를 위한 Vim 입문서

Vim 기본조작 및 유용한 기능들

고급 VIM 강좌 with VIM Text Objects

10 Vim tricks you should know

This post is licensed under CC BY 4.0 by the author.