개인이 모르는 명령만 정리한 내용입니다.

명령

  • x 명령 : 커서 아래 문자 삭제
  • >G 명령 : 현재 행부터 문서 끝까지 들여쓰기 추가
  • j 명령 : 커서를 한 행 밑으로 옮김
  • s 명령 : 커서 밑에 있는 문자를 제거한 후에 끼워넣기 모드로 진입
  • f+문자 명령 : 현재 행에서 문자가 나타나는 위치로 검색
  • ; 명령 : 수행한 마지막 검색을 반복
  • @: 명령 : Ex 명령을 반복
  • & 명령 : :subsititute 명령 반복

반복 가능한 동작과 되돌리는 방법

기능 동작 반복 되돌리기
내용 변경하기 {편집} . u
행에서 다음 문자 찾기 f{문자} / t{문자} ; ,
행에서 이전 문자 찾기 F{문자} / T{문자} ; ,
문서에서 다음 일치 찾기 /패턴 n N
문서에서 이전 일치 찾기 ?패턴 n N
치환 동작하기 :%s/대상/치환/gi & u
연속 변경 실행하기 qx{변경}q @x u

vim 클립보드 사용

set clipboard=unnamed "use OS clipboard

일반모드

숫자 조정

:h count 

<C-a>    "커서 밑 숫자 증가"
<C-x>    "커서 밑 숫자 감소"

삭제

cw      "단어 삭제 후 끼워넣기"
db      "커서 위치부터 현재 단어 시작위치까지 제거"
dw      "커서 위치한 단어 하나 삭제"
dap     "문단삭제"

오퍼레이터 + 모션 = 행동

  • 명령{모션}
:h operator

c       "변경"
g~      "대소문자 변환하기"
gu      "소문자로 변환하기"
gU      "대문자로 변환하기"
=       "자동으로 들여쓰기"

gUaw    "현재 단어 모두 대문자로 전환"
gUap    "문단 전체 대문자로 변경"

주석으로 변경

"Comentary 플러그인"
"https://github.com/tpope/vim-commentary"
"주석변경"

"gc{모션} - 주석 변환"

gcc     "현재행 주석 전환"
gcgc    "현재행 주석 전환"
gcap    "현재문단 주석 전환"
gcG     "현재 행부터 파일끝까지 주석 전환"

끼워넣기 모드

<C-h>   "앞에 있는 글자 하나 제거하기(백스페이스)"
<C-w>   "앞에 있는 단어 하나 제거하기"
<C-u>   "행의 시작 부분까지 제거"

"셸에서도 사용 가능"

일반 모드로 돌아가기

<C-[>   "일반 모드로 전환하기"
<C-o>   "끼워넣기-일반 모드로 전환하기(1회용)"

<C-o>zz "현재 행을 화면 중간으로 옮겨서 작업하는 행을 기준으로 위아래 절반씩 볼 수 있도록 조정"
"나는 <C-o>가 안 되어서 <C-a>로"

끼워넣기 모드 벗어나지 않고 레지스터 붙여넣기

yt      "행 복사"
<C-r>0  "붙여넣기"

즉석에서 계산하기

<C-r>=6*5       "표현식 레지스터로 계산하기"

ga              "문자의 숫자코드 검색"
<C-v>065        "A, 문자코드(숫자로) 문자 표시"

<C-v>{123}                  "8진수 코드로 문자 삽입"
<C-v>u{1234}                "16진수 코드로 문자 삽입"
<C-v>{숫자 아닌 문자}       "키 문자로 삽입하기"
<C-k>{문자1}{문자2}         "{문자1}{문자2} 이중자가 나타내는 문자 삽입하기"

:h i_CRTL-V_digit
:h digrapshs-defalut

바꾸기 모드

R               "바꾸고 덮어쓰기"
gR              "선택 치환모드"
r{문자}gr{문자} "일회성 바꾸기 모드와 선택치환 모드"

비주얼 모드

c 명령      "특정 본문을 지우고 끼워넣기 모드 전환"
viw         "단어를 영역으로 선택"

비주얼 모드 활성화

V           "행 단위 비주얼 모드 활성화"
<C-v>       "블록 단위 비주얼 모드 활성화"
gv          "비주얼 모드에서 마지막으로 선택했던 영역 다시 선택"

선택영역의 끝 전환하기

vbb         "커서 기준 뒤쪽으로 선택"
o           "선택 영역 중 반대쪽 끝으로 이동"
{특정 문자} "특정 문자까지 선택 영역 확장"

오퍼레이터 명령 사용

gU{모션}        "비주얼 모드에서 U명령 - 대문자로 변경"
gUit            "it 명령은 텍스트 객체를 의미(inside the tag의 약어로 생각하면 쉽게 외울 수 있다)"
j.              "아랫줄에서 같은 명령 반복"

열 사이에 수직 파이프 넣기

Chapter                 Page
Normal mode             15
Insert mode             31
Visual mode             44

"탭 중간에 커서가 있다는 가정"
<C-v>3j             "3칸 아래까지 블록 설정"
x...                "간격 줄이기, 3번 반복"
gv                  "위 블록 설정 반복"
r|                  "| 삽입"
yyp                 "한 줄 복사 붙여넣기"
Vr-                 "행단위 비주얼 모드, -로 변경"

다중 행 입력하기

url('/imges/sprite.png')
url('/imges/sprite.png')
url('/imges/sprite.png')


"커서가 i에 위치해 있다는 가정"
<C-v>jje            "2줄 아래 단어 끝까지 블록 모드"
c                   "삭제 후 끼워넣기 모드"
components
<ESC>               "한 줄이 아니라 세 줄 모두 변경"

명령행 모드

역사적인 이류로 명령행 모드에서 실행할 수 있는 명령을 Ex명령이라고 부른다. 명령행 모드는 /를 눌러 검색 프롬프트(serach prompt)를 불러오거나 =로 표현식 레지스터에 접근했을 때 활성화된다.

버퍼 문서 작업에 사용할 수 있는 Ex 명령

:[]put [x]            "지정한 행 뒤에 레지스터 x에 저장된 문서를 붙여넣기"
:[범위]copy {주소}      "지정한 행을 복사해서 {주소} 행 아래에 붙여넣기"
:[범위]move {주소}      "지정한 행을 {주소} 행 아래로 이동하기"
:[범위]join             "지정한 행을 한 줄로 연결하기"
:[범위]normal {명령}    "일반 모드에서 쓰는 {명령}을 지정한 범위의 각각 행에서 실행하기"
:[범위]substitute/{패턴}/{문자열}/[플래그]      "지정한 행에서 {패턴}이 나타나면 {문자열}로 치환"
:[범위]global/{패턴}/[명령]                     "Ex 명령인 [명령]을 지정한 모든 행 중 {패턴}이 나타나는 곳에서 실행하기"

:h ex-cmd-index

Vim 명령행 모드에서의 특수키

<C-w>는 이전 단어까지 <C-u>는 행의 시작까지 역방향으로 지우는 기능
<C-v><C-k> 명령은 키보드에 없는 문자를 삽입할 때 사용

주소로 행 범위 지정하기

.                   ".은 현재 커서가 놓인 행을 의미"
'm                  "위치 표시 m이 포함된 행"
'<                  "비주얼 모드에서 선택된 영역의 첫 행"
'>                  "비주얼 모드에서 선택된 영역의 마지막 행"

:2,3p               "2~3행 출력"
:3d                 "3번 행으로 이동한 다음에 그 행을 삭제하는 작업까지 한 번에"

:t와 :m 명령으로 행 복제 또는 이동

:6t.         "6번행 복사해서 현재 행 밑으로 붙여넣는다."
             "copy to를 생각하면 기억하기 쉽다(:t, :c, :copy)"
             
:t6          "현재 행을 복사해서 6번 행 밑에 붙여넣기"
:t.          "현재 행을 복사해서 붙여넣기(일반모드의 yyp와 유사)"
:t$          "현재 행을 파일의 마지막에 붙여넣기"
:'<,'>t0     "비중러 모드에서 선택한 행을 파일의 시작에 붙여넣기"

"yyp는 레지스터를 사용하고 :t.는 사용하지 않는다"