내가 보려고 만든 Vim Cheat Sheet (클릭금지 나만 볼꺼임)

Daniel Oh·2023년 10월 8일
0
post-thumbnail

Vim이란 (내가 아는 빔은... 짐살라빔밖에 없는데)

짐살라빔짐짐살라빔짐짐살라빔짐지~임

Vi Improved의 약자로, Vi라는 터미널용 텍스트 에디터가 있었는데 그것의 진화 버전입니다.

Vim을 자유자재로 다룰 줄 안다면 다음과 같은 이점이 있습니다.

마우스에 손 안대고 코딩 가능 -> 속도 향상으로 이어짐 -> 고인물 소리 듣기 쌉가능 -> 구글 입사 -> 멋진 개발자가 되어 슈퍼스타와 연애 -> 외계인 지구 침공 시 Vim으로 무찌를 수 있음

흠흠... 아무튼 힙스터 느낌이 난다 이거야.

제가 사용해왔던 실전적인 명령어 위주로 정리, 또 새롭게 알게되는 명령어도 추가할 예정입니다.

명령 모드 (뚱뚱이) vs 입력 모드 (홀쭉이)

명령 모드는 커서가 뚱뚱한 상태를 말하고, 입력 모드는 커서가 얇은 상태를 말합니다.

명령 모드에서는 명령어를 입력하고,
입력 모드에서는 텍스트를 입력합니다.

명령 모드에서 아무렇게나 텍스트를 치면 아무것도 입력되지 않고, 운 나쁘면 명령어가 눌려 예상치 못한 방향으로 동작합니다. (심심하신 분들은:q! 를 눌러보아요)

그럼 입력 모드에는 어떻게 접근을 할까요? 대표적으로 4가지를 많이 사용합니다.

  • i: 커서 앞쪽에 입력 시작
  • I: 행 맨 앞에 입력 시작
  • a: 커서 뒤쪽에 입력 시작
  • A: 행 맨 뒤에 입력 시작

입력을 마친 후, esc키를 누르면 다시 명령 모드로 돌아갑니다.

뚱뚱이 커서 움직이기

자, 명령 모드와 입력 모드를 변환할 수 있게 되었습니다. 하지만 어디에 입력하고 싶은지 정할 때 마우스로 클릭하면 너무 추하겠죠? 명령 모드에서 뚱뚱이 커서를 키보드만으로 움직일 수 있습니다!

방향키(일줄 알았건만 hjkl)

  • h: 커서 왼쪽으로 이동
  • j: 커서 아래쪽으로 이동
  • k: 커서 위쪽으로 이동
  • l: 커서 오른쪽으로 이동

간혹 키보드의 h, j, k, l키들을 차례대로 검지 중지 약지 소지 놓아서 쓰는 사람들이 있는데, 저는 그냥 타자 치듯이 j에 검지 놓고 써요. 그게 더 편한 것 같아서..

요기서도 비슷한 의견 같네용

문장 맨앞 맨뒤로 이동 (개인적으로 잘 안 씀)

  • 0: 행 맨 앞으로 이동
  • $: 행 맨 뒤로 이동

얘네들은 잘 안쓰는 명령어이기는 한데, 행 맨 앞과 맨 뒤로 이동할 수 있는 명령어입니다.

IA의 차이점은 명령어를 입력한 후 입력 모드로 전환되느냐 마느냐 이겠죠?

단어 단위로 이동

  • w: 다음 단어로 이동
  • b: 이전 단어로 이동

여기에 숫자를 앞에 붙이면 여러 단어를 한번에 이동할 수도 있습니당.

  • 3w: 다음 단어로 3번 이동
  • 4b: 이전 단어로 4번 이동

화면 내에서 이동

  • H: 화면 윗 부분으로 이동
  • M: 화면 중간 부분으로 이동
  • L: 화면 아랫 부분으로 이동

파일 내에서 이동

  • gg: 파일 맨 앞으로 이동
  • G: 파일 맨 뒤로 이동

G 명령어 앞에 숫자를 붙이면 파일 내 특정 행으로 이동할 수 있습니다.

  • 17G: 파일 내 17번째 행으로 이동

스크롤 이동

마우스 스크롤? 너무 하남자임. 상특: 다음과 같은 명령어를 사용합니다.

  • ctrl+u: 위쪽으로 스크롤 이동
  • ctrl+d: 아래쪽으로 스크롤 이동

문단 단위로 이동 (요건 잘 안 쓰긴 함)

이건 잘 안쓰긴 하는데... 문단 단위로 이동할 수도 있습니다.

  • {: 위로 올라가 찾은 문단 시작으로 이동
  • }: 아래로 내려가 찾은 문단 끝으로 이동

뚱뚱이 커서 상태로 텍스트 수정하기

명령 모드(뚱뚱이 커서 상태)에서도 텍스트를 수정할 수 있는 명령어가 있습니다. (대박대박)

글자 삭제

  • x: 뚱뚱이 커서 아래 글자 삭제

행 삭제

  • dd: 커서가 있는 행 삭제

행 복붙

  • yy: 커서가 있는 행 복사
  • p: 커서가 있는 행 아래에 붙여넣기

그런데, 클립보드에 있는 내용을 붙여넣기 하고 싶을 때도 있습니다. 아 Vim에서 복사된 내용과 클립보드에 복사된 내용은 별개이기 때문에, ctrl+c를 눌러 클립보드에 복사된 내용은 Vim에서 ctrl+v, 또는 p를 눌러도 붙여넣어지지 않습니다. 오또카지? 다음 명령어를 사용하면 됩니다.

  • *p: 클립보드에 있는 내용을 커서가 있는 행 아래에 붙여넣기

ctrl+z하고 시퍼

Vim은 이전 상태를 자동으로 추적하는 기능이 있습니다. 이는 이전 명령 반복, undo+redo를 가능하게 합니다.

이전 명령 반복

  • .: 이전 명령과 똑같은 명령어 입력

undo & redo

  • u: undo, 되감기
  • ctrl+r: redo, 앞감기

Vim의 강력함: 명령어+대상

Vim의 강력함은 명령어와 대상의 합성으로 만들 수 있는 명령어가 엄청 많다는 점에서 나옵니다. 이 조합은 너무나도 무궁무진해서, 아직까지도 특이점에 도달하지 못했다는 말이 있을 정도... 그니까 명령어와 대상만 잘 조합하면 키보드만으로 안되는게 없다는 거임 ㅇㅇ

대표적인 명령어 3가지

  • d: delete (cut), 대상 삭제 및 잘라내기
  • y: yank (copy), 대상 복사
  • c: change, 대상 지우고 입력 시작
  • v: visual, 대상 선택

d는 삭제 및 잘라내기이므로, d 명령어 수행 이후 p를 누르면 해당 대상이 붙여넣기 됩니다.

대표적인 대상

  • 3w: 앞으로 3개의 단어
  • 3b: 뒤로 3개의 단어
  • aw: 한 단어
  • at: 한 태그 (태그 전체)
  • as: 한 문장 (문장 전체)
  • ap: 한 문단 (문단 전체)
  • a(: 한 () (()를 포함한 전체)
  • a{: 한 {} ({}를 포함한 전체)
  • a": 한 "" (""를 포함한 전체)
  • it: 태그 안의 내용
  • i": "" 안의 내용
  • i(: () 안의 내용
  • i{: {} 안의 내용
  • ip: 문단 안의 내용
  • 1k 위로 한 행
  • 2k 위로 2개의 행
  • 1j 밑으로 한 행
  • 2j 밑으로 2개의 행

명령어 조합 예시

  • daw: 한 단어 삭제 및 잘라내기
  • d3w: 앞으로 3개의 단어 삭제 및 잘라내기
  • d2k: 위로 2개의 행 삭제 및 잘라내기
  • d2j: 밑으로 2개의 행 삭제 및 잘라내기
  • di{: {} 안의 내용 삭제 및 잘라내기
  • di(: () 안의 내용 삭제 및 잘라내기
  • d2j: 밑으로 2개의 행 삭제 및 잘라내기
  • da(: 한 () (()를 포함한 전체) 삭제 및 잘라내기
  • di': '' 안의 내용 삭제 및 잘라내기
  • ci[: [] 안의 내용 지우고 입력 시작

대상 지정 고급: 검색하기

  • f{: { 까지의 부분 ({ 포함)
  • t{: { 까지의 부분 ({ 미포함)

근데 해당 명령어는 실수할 여지가 약간 있습니다. 따라서 비주얼적으로 확인하며 해당 대상이 맞는지 체크할 수도 있습니다.

  • /hidd: hidd로 시작하는 부분을 강조해서 보여줌, enter 입력 시 명령 수행

명령어 조합 예시

  • df{: { 까지의 부분 ({ 포함) 삭제 및 잘라내기
  • dt{: { 까지의 부분 ({ 미포함) 삭제 및 잘라내기
  • d/hidd: hidd로 시작하는 부분까지의 부분 삭제 및 잘라내기

명령 모드에서 검색하기

  • /project: project 정방향 검색
  • ?project: project 역방향 검색
  • n: 다음 단어

비주얼 모드

  • v: wrapping selection, 대상 선택

v를 누르면 비주얼 모드에 진입할 수 있습니다. 커서로 드래그해서 blocking하는 것입니다.

여기까지는 잘 아는데.. 밑에 내용은 잘 안 알려진 것 같습니다.

  • ctrl+v: box selection, 박스 형태로 대상 선택

vertical box를 선택한 뒤 여기에 입력을 하고 싶다면?
I를 눌러 입력 모드로 진입할 수 있습니다. (ㄹㅇ개꿀임)

마무리빔

Vim 관련 내용을 정리해보았습니다. Vim을 멋지게 사용해서 모두 힙스터 개발자하시길 바라며... 다음에 또 빔~

profile
안녕하세요. 오도열입니다.

0개의 댓글