티스토리 뷰

etc/Vim

Vim 상황별 단축키 정리

기억용블로그 2022. 12. 3. 13:14
728x90

위아래로 빠르게 이동하고 싶을때

Vim을 이용해서 위아래로 빠르게 이동하는 방법에 있어 정답이 딱 정해져있진 않고 상황에 맞게 사용할 수 있게 여러 커맨드를 익혀두고 이용하는 것이 좋다.

  • 문장의 처음으로 가고 싶다면 G, 마지막은 gg를 이용한다.
  • 단락별로 이동한다면 { }를 이용한다.
  • 문장별로 이동하고 싶다면 ( )를 이용한다. { }보다 조금 더 세밀한 움직임 가능.
  • 단어를 알고 있다면 /검색할단어n N을 이용해서 찾아갈 수 있다.
  • <C-d>, <C-u>를 이용해서 { } 커맨드보다 더 빠르게 이동할 수 있다.
  • :number로 정확한 라인에 찾아갈 수도 있고 :+number :-number를 이용해서 relativenumber를 이용해 상대적인 라인으로 이동할 수 있다. :+ - 대신에 단순히 {number}j,k를 이용할 수 있다.

좌우로 빠르게 이동하고 싶을때

좌우 이동은 대부분의 경우 bw 몇 번만으로 쉽게 찾아갈 수 있지만 다음과 같은 상황을 고려하면 좀 더 빠르게 이동할 수 있다.

  • 찾고자 하는 단어가 마지막에 가깝다면 $를 입력한 후에 b를 이용하여 이동한다.
  • BW를 이용하면 스페이스바를 기준으로 이동해서 더 빠르게 이동할 수 있다.
  • ft로 특정 char를 찾아갈 수 있다. ;(semi-colon)을 이용해서 반복한다.
  • /단어를 이용하는 것도 역시 좋은 방법이다.

현재 위치에서 같은 줄의 어느 지점까지 지우고싶을때

어떤 애매한 시작 지점에서 어떤 애매한 지점까지 지워야 할 때는 dt{char}, ct{char}를 이용한다. 지우고 싶은 지점이 현재부터 ( 이전까지라면 dt(를 입력한다.

그 사이에 문자가 중복된다면 .를 이용해서 명령을 반복할 수 있다.

커서의 위치에 상관없이 라인의 마지막에 ;을 붙이고 싶을때

A;<Esc>를 입력한다. 라인의 마지막으로 이동함과 동시에 insert mode로 진입하는 A 커맨드를 이용하는 방법이다.

커서의 위치에 상관없이 현재 단어 전체를 변경하고 싶을때

caw 혹은 ciw를 입력한다. "SomeLoooong{커서}Words"의 상황에서 caw 혹은 ciw 커맨드를 입력하면 "{커서}"로 된다.

""나 '' 내의 모든 단어를 변경하고 싶을때

""(double quotes)내의 모든 단어를 한 번에 변경하고 싶은 경우가 있다.
"Some/ Long: Words."같은 문장은 ciw caw의 경우 한 단어씩밖에 변경되지 않는다.
이런 경우 ci"를 사용한다. 해당 커맨드는 "" 사이의 모든 캐릭터를 지우고 insert mode에 들어간다는 의미를 갖는다.

이와 비슷하게 ci', ci(, ci{, ci` 등의 커맨드도 같은 방식으로 사용이 가능하며
ci뿐 아니라 yi, di vi 등으로도 응용이 가능하다.

만약 ""에 한정된 경우라면 ciq의 커맨드로 ci"를 대체할 수 있다. (VScode 기준)

현재 커서의 단어를 quote 처리하고 싶을 때

다음과 같은 매핑을 통해서 현재 커서에 있는 단어를 double quote 처리할 수 있다.
e.g. quote -> "quote"

nnoremap gq ciw""<Esc>P

현재 문장 전체의 단어에 quote 처리하고 싶다면 다음을 이용한다. 빈도수가 많지 않기 때문에 키매핑은 해두지 않음.
:s/\(\w\+\)/"\1"/g

여러 문장을 한 번에 복사하거나 제거하고 싶을때

여러 줄의 라인이 bracket 등에 속해있다면 위의 ci{와 같은 커맨드를 이용할 수 있다.
하지만 특정 패턴에 부합하지 않아 일일히 선택해야 하는 경우 V 커맨드로 line 단위의 visual mode로 진입한 후 normal mode의 다른 커맨드와 조합해서 원하는 만큼 선택 이후 d로 제거, yp로 복사 붙여넣기 등을 이용한다.

문서 내의 모든 특정 단어를 찾아서 변경하고 싶을때

:%s/특정단어/변경하고싶은단어를 입력한다.

insert mode와 함께 auto indenting이 되기를 원하는 경우

커서가 0번째에 있을때 ia를 이용하면 indenting이 되지 않고 그 자리에서 바로 insert mode로 들어가게 된다.
이런 경우 cc를 이용해서 auto indenting과 함께 insert mode에 들어갈 수 있다.

IntelliJ에서는 동작하지 않으며 VSCode에서만 동작.

파일 내에서 다른 곳을 보고 와야 할때

현재 위치에서 작업을 하다가 파일 내의 다른 위치를 확인하고 와야 할 경우가 있다. 이런 경우 m{char}를 이용해서 현재 위치를 마킹하고 다른 곳에 가서 확인한 후에 '{char}로 즉시 마킹한 곳으로 되돌아 올 수 있다.

혹은 gd를 이용해서 확인하고나서 <C-o>로 되돌아올 수 있다.

다른 클래스의 정의를 보고 와야 할때

다른 디렉토리에 존재하는 클래스의 정의 등을 보고 와야 하는 경우에는 gd 커맨드를 이용해서 확인할 수 있다. 확인이 끝난 이후에는 <C-o>를 여러 번 입력해서 원래의 위치로 되돌아올 수 있다.

파일 전체 주석 처리하고 싶을때

:%s/^/\/\//을 이용하여 전체 주석처리를 한다. 주석을 #으로 처리하는 경우 :%s/^/#/을 이용한다.
주석 해제는 :%s/^\/\//을 이용한다.

다음 코드처럼 작성해서 전체 주석 처리를 등록해서 사용할 수 있다.

noremap gm my:%s/^/\/\// <CR> 'y
noremap gu my:%s/^\/\//<CR> 'y

파일 전체 라인을 복사하고 싶을때

  • Vim의 register만을 이용하는 경우 : :%y 후 엔터를 입력한다. 이후에 p 커맨드를 이용해서 붙여넣기 할 수 있다.
  • OS의 클립보드에 복사하고 싶은 경우 : :%y+를 입력한다. 이후에 Ctrl + v (Vim X)를 이용해서 붙여넣기 할 수 있다.

파일 전체에 올바른 indenting을 적용하고 싶을때

gg=G를 입력한다. 이 경우에도 현재 작업 중인 위치를 잃는다는 단점이 있다.
ma로 현재 위치를 마킹해두고 gg=G'a로 되돌아오는 방법으로 대처할 수 있다.

이는 noremap gi mygg=G'y과 같이 등록해서 사용할 수 있다.

Suggestions에서 위 아래로 이동하고 싶을때

가장 좋은 방법은 OS 레벨에서 지원하는 키매핑을 이용해서 Alt + h,j,k,l을 방향키로 매핑 후 이를 이용하는 방법이다.

키매핑이 여의치 않다면 <C-n>를 이용해서 아래로 <C-p>로 위로 이동할 수 있다.

Suggestions 목록에서 설명을 보고 싶다면 <C-j>를 입력한다.

현재 파일의 절대 경로를 클립보드에 복사하고 싶을때

:!echo -n % | pbcopy를 입력하면 클립보드에 복사한다. intelliJ ideaVim + Mac.
:!echo % | clip은 intelliJ + Windows의 경우에서 동작.

이는 map gp :!echo % \| clip <CR>와 같이 ~/.vimrc에 등록해서 사용하면 편리하다.

기타

Esc가 너무 멀다고 느껴질 때

일반적인 키보드에서의 Esc 위치는 Vim에서 사용하기에 너무 멀어 대부분 backtick이나 Capslock, <C-c> 등에 Esc를 매핑해서 사용한다.

다음과 같이 jkkj에 Esc를 매핑해두고 사용하면 더 편리할 수 있다. 빠르게 입력할 수 있으며 normal mode에서 실수로 입력한다고 해도 대부분의 경우 제자리로 되돌아오게 된다.

imap jk <Esc>
imap kj <Esc>

{} 코드 블럭을 접거나 열고 싶을때

zc (z-close)로 코드를 접고 zo (z-open)으로 코드를 열 수 있다.

탭간 이동을 하고 싶을때

gt로 오른쪽 탭으로 이동, gT로 왼쪽 탭으로 이동을 한다.

탭을 생성하거나 닫고 싶을때

:vs (vertical split)로 현재 탭을 복사해서 좌우로 분리된 창에 열 수 있다. :sp (split)은 상하로 분리된 창을 연다.
<c-w><c-w> (2번 입력)로 분할된 윈도우 간에 커서를 이동할 수 있다.
:q 혹은 :bd (bufferdelete) 혹은 :tabc (tabclose)로 현재 탭을 끌 수 있다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함