vim 기초

MySprtlty·2022년 7월 2일
1

vim

목록 보기
1/21
post-thumbnail

vim 시리즈는 김선영 선생님의 저서인 '손에 잡히는 Vim'을 정리한 것이다.


🏷️vim 기초

  • 이 글에 있는 내용만 숙달해도, vim을 이용해 간단한 텍스트를 작성하는데 큰 문제가 없다.
  • 파란색으로 된 명령어는 정말 중요한 명령어나 사용하길 권장하는 명령어다.
  • vim은 vi가 발전된 것으로 수많은 기능을 가졌으며, vi를 다루는 법과 크게 다르지 않다.
  • [ ]는 생략 가능 옵션을 의미한다.

🏷️vim의 모드

  • vi에는 모드가 3개 존재하고 다음과 같다.
    • normal mode(일반 모드)
    • insert mode(입력 모드)
    • command-line(명령행 모드)
      • 마지막 행 모드라고도 한다.
  • 그러나 vim에는 vi에 존재하는 3가지 모드에 visual mode가 추가되어 4개의 모드가 존재한다.

  • 다음은 vi에 존재하는 모드와 모드를 전환하기 위한 키(key)를 정리한 그림이다.

  • 현재 내가 어떤 모드인지 잘 모르겠을 땐, 그냥 ESC 누르는 습관을 가지면 좋다.

  • 그러면 normal mode로 나오게 된다.


🏷️vim 명령어의 분류

  • vim 명령어에는 크게 두가지가 있다.

    • 일반 모드 명령어
    • 명령행 모드 명령어
  • 쉽게 구분할 수 있다.

    • 앞에 :가 붙어 하단의 명령행에 글자가 보이는 명령어가 명령행 모드 명령어다.
  • 명령행 모드 명령어를 일반 모드 명령어보다 우선시 하는 것을 추천한다.


🏷️저장과 종료 명령어

명령어설명
:w현재 파일을 저장한다. (write)
:qvi를 종료한다. (quit)
:wq현재 파일을 저장하고 종료한다.
:w filename다른 이름으로 저장한다.
:q!변경된 내용을 저장하지 않고 vi를 종료한다.
:w! filename덮어 쓴다.
:wq! filename파일을 덮어쓰고 종료한다.
:xVim을 종료하면서 변경 사항이 있는 경우에만 저장한다.

🏷️커서 이동 명령어

  • vi서 커서는 문자와 문자 사이에 존재하지 않고, 문자 위에 존재한다.
  • 즉, 한 문자 위에 Block이 곧 커서다.

📌커서 이동 방향키

📌^와 $

명령어설명
^현재 행의 맨 앞으로 커서를 이동한다.
$현재 행의 맨 끝으로 커서를 이동한다.

📌문서의 특정 행으로 커서 옮기기

  • #은 숫자, [ ]는 생략가능함을 나타낸다.
명령어설명
[#]gg#행으로 이동한다. (#이 생략되면 1을 의미한다.)
[#]G#행으로 이동한다. (#이 생략되면 마지막 행을 의미한다.)
:##행으로 이동한다.

📌화면 이동

명령어설명
CTRL-F한 화면 아래로 커서 이동 (forth)
CTRL-B한 화면 위로 커서 이동 (back)
CTRL-D 반 화면 아애로 커서 이동 (down)
CTRL-U반 화면 위로 커서 이동 (up)
Page Up한 화면 위로 커서 이동
Page Down한 화면 아래로 커서 이동

🏷️normal mode 명령어의 반복

  • normal mode 명령어 앞에 숫자를 붙이면, 해당 숫자만큼 명령어를 반복한다.

  • 🔍ex)

명령어설명
3h커서를 아래로 내리는 명령을 3번 반복한다. 즉, 3칸 이동한다.
3x커서가 가리키는 문자를 삭제하는 명령을 3번 반복한다.
  • 🖇️cf) 3gg는 gg명령어를 3번 실행하는 것이 아닌, 3번 행으로 이동하라는 명령어다.
    3G도 마찬가지다.

🏷️현재 행의 위치 확인

명령어설명
Ctrl + g문서에서 현재 행의 위치 정보를 하단 상태바에 표시한다.

🏷️vim 입력 모드로 전환

명령어설명
a (amend)현재 커서 위치에서 한 칸 뒤로 이동한 후 insert mode로 전환된다.
A현재 행의 끝으로 이동 한 후 입력 모드로 전환된다.
i (insert)현재 커서 위치에서 insert mode로 전환된다.
I현재 행 맨 앞으로 이동한 후 insert mode로 전환된다.
o (open line)현재 행 아래에 새로운 행을 하나 만든 후 insert mode로 전환 된다.
O현재 행 위에 새로운 행을 하나 만든 후 insert mode로 전환 된다.
R (replace)replace모드로 작동한다. 모든 글자는 덮어 쓰여 진다.

🏷️삭제

명령어설명
x커서가 가리키는 문자를 삭제한다. (Delete 키와 같다.)
XBackspace처럼 동작한다.
dd현재 행을 삭제한다.
D현재 커서부터 현재 행의 끝까지 삭제한다. (d$와 동일하다.)
J아래 행을 현재 행의 끝에 붙인다. (아래 행의 앞부분 공백은 제거된다.)
  • vim의 삭제 키인 x는 신기하게 동작한다.
    • 커서 앞의 문자를 지우는 일반적인 Windows 삭제 키와는 달리 x는 현재 커서가 가리키는 문자를 지운다.
    • 현재 커서가 가리키던 문자가 지워지면 뒤에 있던 문장들이 앞으로 끌려온다.
    • 그러면 커서는 지워진 문자의 뒷 문자를 가리키게 되고 그 문자를 삭제하게 된다.
    • 즉, x를 꾸욱 누르고 있으면 현재 커서가 가라키는 문자부터 시작해서 맨 마지막 문자인 \n(개행 문자) 전 문자까지 지운다.
    • 근데, vim에서 삭제 키는 개행 문자를 지우지 못한다.
    • 따라서 행 끝에 도달하면 Backspace처럼 동작하게 된다.
  • Vim에서 삭제 기능은 무조건 잘라내기로 작동한다.
    • 삭제된 내용은 레지스터에 저장된다.

🏷️복사

명령어설명
yy현재 행을 레지스터에 복사(yank)한다.
:y현재 행을 레지스터에 복사(yank)한다.
Y현재 행을 레지스터에 복사(yank)한다.
  • 뽑아내다라는 뜻을 가진 yank의 약자가 명령어로 사용된다.
  • vim에서 복사된 내용은 삭제 할때와 마찬가지로 레지스터에 저장된다.

🏷️붙여넣기

명령어설명
p현재 행에 붙여 넣는다. 개행문자가 포함된 경우에는 현재 행 아래에 붙여 넣는다.
:pup명령과 동일하다.
P현재 행의 위쪽에 붙인다.
  • 복사나 삭제 명령을 통해 삭제/복사된 내용은 레지스터에 저장된다.
  • 붙여넣기 명령은 레지스터에 저장되어 있는 내용을 붙여넣는(put) 명령이다.

🏷️주석

  • vim에서 주석문(comment)은 "로 만들 수 있다.

  • 🔍ex)
    " Hello World


🏷️되돌리기

명령어설명
u명령어 실행 취소 (undo)
Ctrl-R명령어 다시 실행 (redo)

0개의 댓글