sonumb

VIM tip 모음 본문

개발자 이야기

VIM tip 모음

sonumb 2022. 1. 5. 16:37

1. 짧게 매칭되는 패턴 찾기.

malloc( sizeof( blahblab ) * 3 ) 를 malloc( sizeof(blahblab) * 3 ) 로 바꾸고 싶을때, 


:%s/sizeof( \(.*\) )/sizeof(\1)/g


와 같이 명령어를 쓰면 실제로는 malloc( sizeof(blahblab ) * 3) 이 된다. 


즉, 가장 짧게 매칭되는 패턴으로 하고 싶다면 \{-}를 쓴다. 
:%s/sizeof( \(.\{-}\) )/sizeof(\1)/g

2. 검색시 대소문자 무시

2.1. 커맨드모드에서 명령어로 설정

:set ignorecase 혹은 :set ic
:set noignorecase 혹은 :set noic

:set smartcase 혹은 :set scs

검색 문자열이 모두 소문자이면, 대소문자를 구분하지 않고,
검색 문자열에 대문자가 하나라도 있으면, 대소문자를 구별

단, smartcase가 활성화되려면, ignorecase가 먼저 실행되어야 함. 

2.2. 검색모드에서 명령어

검색 커맨드 상태에서 \c를 입력후 검색문자열 입력
/\cmemory

를 실행하면, Memory와 memory, MEMORY 모두 검색.

3. 단축키 모음

3.1. 전역

  • :help keyword - keyword에 대한 도움말 열기
  • :saveas _file_ - file로 저장하기
  • :close - 현재 영역 닫기
  • K - 커서가 위치한 단어에 대한 맨페이지 열기

3.2. 커서 이동

  • h - 왼쪽으로 이동
  • j - 아래로 이동
  • k - 위로 이동
  • l - 오른쪽으로 이동
  • H - 화면 상단으로 이동
  • M - 화면 중간으로 이동
  • L - 화면 하단으로 이동
  • w - 다음 단어 시작으로 점프
  • W - 다음 단어 시작으로 점프 (단어 옆에 붙은 연속된 문장부호도 하나의 단어로 본다)
  • e - 다음 단어 끝으로 점프
  • E - 다음 단어 끝으로 점프 (단어 옆에 붙은 연속된 문장부호도 하나의 단어로 본다)
  • b - 이전 단어 시작으로 점프
  • B - 이전 단어 시작으로 점프 (단어 옆에 붙은 연속된 문장부호도 하나의 단어로 본다)
  • % - 현재 괄호와 맞는 짝의 괄호로 이동 (:h matchpairs를 통해 더 많은 정보를 얻을 수 있다.)
  • 0 - 행의 처음으로 점프
  • ^ - 행의 시작 문자로 점프
  • $ - 행의 끝으로 점프
  • g_ - 행의 끝 문자로 점프
  • gg - 문서 첫 행으로 점프
  • G - 문서 마지막 행으로 점프
  • 5G or :5 - 5번째 행으로 점프
  • fx - 커서 위치 기준 오른쪽에서 가장 가까운 문자 x로 이동
  • tx - 커서 위치 기준 오른쪽에서 가장 가까운 문자 x의 한 칸 뒤(왼쪽)으로 이동
  • Fx - 커서 위치 기준 왼쪽에서 가장 가까운 문자 x로 이동
  • Tx - 커서 위치 기준 왼쪽에서 가장 가까운 문자 x의 한 칸 앞(오른쪽)으로 이동
  • ; - 가장 최근의 f, t, F나 T 명령을 다시 실행
  • , - 가장 최근의 f, t, F나 T 명령을 반대 방향으로 다시 실행
  • } - 다음 단락(또는 함수/블록)으로 이동
  • { - 이전 단락(또는 함수/블록)으로 이동
  • zz - 커서가 있는 행을 중간으로 하도록 화면 이동
  • Ctrl + e - 커서 이동 없이 한 줄 아래로 화면 이동
  • Ctrl + y - 커서 이동 없이 한 줄 위로 화면 이동
  • Ctrl + b - 한 화면 위로
  • Ctrl + f - 한 화면 아래로
  • Ctrl + d - 반 화면 아래로
  • Ctrl + u - 반 화면 위로
  • 커서 이동 명령 앞에 숫자를 붙이면 그 수만큼 반복. 예를 들어 4j 는 4행 아래로 이동.

3.3. 삽입 모드 - 택스트 삽입/추가

  • i - 커서 앞에 삽입
  • I - 행 시작에 삽입
  • a - 커서 뒤에 추가
  • A - 행 끝에 추가
  • o - 현재 행 아래에 새 행 추가
  • O - 현재 행 위에 새 행 추가
  • ea - 단어 끝에 추가
  • <Esc> - 삽입 모드 종료

3.4. 편집

  • r - 한 글자 바꾸기
  • J - 현재 행과 다음 행을 연결
  • gJ - 현재 행과 다음 행을 둘 사이에 공백 없이 연결
  • gwip - 단락을 리플로우
  • cc - 행 전체를 새로 쓰기
  • C - 행 끝까지를 새로 쓰기
  • c$ - 행 끝까지를 새로 쓰기
  • ciw - 단어 전체를 새로 쓰기
  • cw - 단어 끝까지를 새로 쓰기
  • s - 한 글자 삭제하고 삽입 모드 시작
  • S - 행 삭제하고 텍스트 입력 (cc와 동일)
  • xp - 두 문자 위치 바꾸기 (잘라내기 붙여넣기 조합)
  • u - 실행 취소
  • Ctrl + r - 다시 실행
  • . - 마지막 명령 반복

3.5. 텍스트 선택 (비주얼 모드)

  • v - 선택 모드 시작. 텍스트 선택해서 명령 수행 (가령 y로 복사)
  • V - 행 단위 선택 모드 시작
  • o - 선택 영역의 반대쪽 끝으로 이동
  • Ctrl + v - 블록 선택 모드 시작
  • O - 블록의 반대쪽 모서리로 이동
  • aw - 단어 선택
  • ab - () 블럭 선택
  • aB - {} 블럭 선택
  • ib - () 블럭의 내부 선택
  • iB - {} 블럭의 내부 선택
  • <Esc> - 선택 모드 종료

3.6. 선택 모드 명령

  • > - 텍스트를 오른쪽으로 이동
  • < - 텍스트를 왼쪽으로 이동
  • y - 선택한 텍스트 복사
  • d - 선택한 텍스트 삭제
  • ~ - 대소문자 반전

3.7. 레지스터

  • :reg - 레지스터 내용물 표시
  • "xy - 레지스터 x로 복사
  • "xp - 레지스터 x의 내용물 붙어넣기

Tip

  • 레지스터들은 ./viminfo에 저장되며 다음번 vim 재시작 때 다시 읽어들임.
  • 0번 레지스터에는 항상 최근 복사 명령의 값이 들어있음.

3.8. 표시

  • `:marks` - 표시 항목 표시
  • m_a_ - 현재 위치를 표시 a로 설정
  • `_a_ - 표시 a의 위치로 점프
  • y`_a_ - 표시 a의 위치까지 복사

위의 a는 키보드 상의 단일문자 모두 가능하다.

3.9. 매크로

  • qa - 매크로 a 기록 시작
  • q - 매크로 기록 중지
  • @a - 매크로 a 실행
  • @@ - 마지막 실행한 매크로 재실행

3.10. 잘라내기와 붙여넣기

  • yy - 행 복사
  • 2yy - 2줄 복사
  • yw - 커서 위치에서 다음 단어 시작까지 복사
  • y$ - 행 끝까지 복사
  • p - 커서 위치 뒤에 붙여넣기
  • P - 커서 위치 앞에 붙여넣기
  • dd - 행 잘라내기
  • 2dd - 2줄 잘라내기
  • dw - 커서 위치에서 다음 단어 시작까지 잘라내기
  • D - 행 끝까지 잘라내기
  • d$ - 행 끝까지 잘라내기
  • x - 한 글자 잘라내기

3.11. 나가기

  • :w - 저장하고, 나가지는 않기
  • :w !sudo tee % - sudo로 현재 파일 저장
  • :wq or :x or ZZ - 저장하고 나가기
  • :q - 나가기 (저장하지 않은 변경 사항 있으면 실패)
  • :q! or ZQ - 나가기 (저장하지 않은 변경 사항 버림)
  • :wqa - 열어 놓았던 모든 탭을 다 저장하고 나가기

3.12. 찾기와 바꾸기

  • /pattern - 패턴 찾기
  • ?pattern - 패턴 역방향 찾기
  • \vpattern - '마법' 패턴: 영문/숫자가 아닌 문자는 정규표현식 심볼로 해석 (이스케이프 불필요)
  • n - 같은 방향으로 찾기 반복
  • N - 반대 방향으로 찾기 반복
  • :%s/old/new/g - searchAndReplace.commands .colonPercentForwardSlashOldForwardSlashNewForwardSlashg
  • :%s/old/new/gc - searchAndReplace.commands .colonPercentForwardSlashOldForwardSlashNewForwardSlashgc
  • :noh or :nohlsearch - 찾기 강조 표시 없애기

3.13. 여러 파일에서 찾기

  • :vimgrep /pattern/ {`{file}`} - 여러 파일에서 패턴 찾기

e.g.) :vimgrep /foo/ **/*

  • :cn - 다음 일치 항목으로 점프
  • :cp - 이전 일치 항목으로 점프
  • :copen - 일치 목록을 새 창으로 열기

3.14. 여러 파일 작업

여러 파일 동시에 창으로 열려면, vim 실행시 파일명들과 함께, -o 혹은 -O 옵션을 이용한다. (옵션의 차이점은 수평/수직 이다)

  • :e file - 새 버퍼에서 파일 편집
  • :bnext or :bn - 다음 버퍼로 이동
  • :bprev or :bp - 이전 버퍼로 이동
  • :bd - 버퍼 삭제 (파일 닫기)
  • :ls - 열린 버퍼 모두 나열
  • :sp file - 새 버퍼에 파일 열고 상하로 창 분할
  • :vsp file - 새 버퍼에 파일 열고 좌우로 창 분할
  • Ctrl + ws - 상하로 창 분할
  • Ctrl + ww - 창 전환
  • Ctrl + wq - 창 닫기
  • Ctrl + wv - 좌우로 창 분할
  • Ctrl + wh - 왼쪽 창으로 이동 (좌우 분할)
  • Ctrl + wl - 오른쪽 창으로 이동 (좌우 분할)
  • Ctrl + wj - 아래 창으로 이동 (상하 분할)
  • Ctrl + wk - 위 창으로 이동 (상하 분할)

3.15. 탭

여러 파일 동시에 탭으로 열려면, vim 실행시 파일명들과 함께, -p 옵션을 이용한다.

  • :tabnew or :tabnew {page.words.file}- 새 탭에서 파일 열기
  • Ctrl + wT - 현재 분할 창을 새로운 탭으로 이동
  • gt or :tabnext or :tabn - 다음 탭으로 이동
  • gT or :tabprev or :tabp - 이전 탭으로 이동
  • #gt - #번 탭으로 이동
  • :tabmove # - 현재 탭을 #번째로 이동 (0부터 시작)
  • :tabclose or :tabc - 현재 탭과 그 안의 창들 닫기
  • :tabonly or :tabo - 현재 탭 이외의 모든 탭 닫기
  • :tabdo command - 모든 탭에서 command 실행하기 (예를 들어, :tabdo q - 열린 모든 탭 닫기)
반응형