본문 바로가기

손에 잡히는 Vim

 콘솔 화면의 거부감이 있는 vim 이다. 하지만 사용법을 알고 손에 익혀가면 이만큼 편한 툴도 없는거 같다. "손에 잡히는 Vim"이 책은 차근차근 따라해 가면서 익혀볼 수 있는 좋은 책이다. 단축키를 익혀야 능숙하게 다룰 수 있으므로 단축키 위주로 기록을 해본다. 

 

https://blog.insightbook.co.kr/2011/03/29/%ec%bd%94%eb%94%a9%ec%9d%84-%ec%97%b0%ec%a3%bc%ed%95%98%eb%93%af-vim%ec%9d%84-%eb%b0%b0%ec%9b%8c%eb%b3%b4%ec%84%b8%ec%9a%94/

 

코딩을 연주하듯! Vim을 배워보세요~

GUI(Graphic User Interface)가 컴퓨터 세상에 ‘진보’를 가져왔다는 점을 부인할 수는 없을 겁니다. 하지만 GUI를 조작하기 위해서는 키보드 위의 손이 마우스나 터치패드, 트랙볼 혹은 화면으로 이동�

blog.insightbook.co.kr

 

Vim 기본 사용법

구분 명령어 설명
커서 이동 키 [#]h 좌로#칸 이동, #의 생략시는 1칸
[#]j 아래로#칸 이동, #의 생략시는 1칸
[#]k 우로#칸 이동, #의 생략시는 1칸
[#]l 위로#칸 이동, #의 생략시는 1칸
^ 행의 맨 앞으로 이동(공백은 제외)
$ 행의 맨 뒤로 이동
화면 스크롤

<Ctrl> + b

Page Up

위로 한 화면 스크롤

<Ctrl> + f

Page Down

아래로 한 화면 스크롤
<Ctrl> + u 위로 1/2 화면 스크롤
<Ctrl> + d 아래로 1/2 화면 스크롤
특정 위치로 이동 [#]gg #행으로 이동합니다. #이 생략되면 1을 의미합니다. 
[#]G #행으로 이동합니다. #이 생략되면 마지막 행을 의미합니다. 
:# #행으로 이동합니다.
현재 위치 확인 <Ctrl> + g 현재 문서 위치  정보를 하단 상태 바에 표시합니다.
삭제 명령

x

<Delete>

커서에 위치한 문자 삭제

dd

:d

현재 행을 삭제

D

d$

현재 컬럼 위치에서 현재 행의 끝 부분까지 삭제
J 아래 행을 현재 행의 끝에 붙임(아래 행의 앞부분 공백은 제거됨)
레지스터의 내용을 문서에 붙이는 명령

p

:pu

현재 행에 붙여 넣습니다.(put)

개행 문자가 포함된 경우에는 현재 행의 아래에 붙여 넣습니다.

P 현재 행의 위쪽에 봍입니다.
레지스터의 행을 복사하는 명령

yy

:y

Y

현재 행을 레지스터에 복사(yank)합니다.
undo 와 redo u undo의 기능입니다. 바로 이전에 행한 명령 하나를 취소합니다.
<Ctrl> + r redo의 기능입니다. 바로 이전에 취소했던 명령을 다시 실행합니다.
명령행 모드에서 범위 지정 :20d 20번 행을 삭제합니다.
:10,25d 10~25번 행을 삭제합니다. 
:%y 문서 전체를 복사합니다. %는 1,$와 동일합니다.
:.,+20y 현재 행부터 아래로 스무 행을 복사합니다.
:-10,+5d 현재 행부터 위로 10행, 아래로 5행, 총 열 여섯 행을 삭제합니다.
:40pu 40번 행에 레지스터의 내용을 붙여 넣습니다.
비주얼 모드 기능 v 일반 비주얼 모드로, 현재 커서가 위치한 행에서 행 단위로 블록을 지정합니다.
V 비주얼 라인 모드로, 현재 커서가 위치한 행에서 행 단위로 블록을 지정합니다.
<Ctrl> + v 비주얼 블록 모드로, 열(column)단위로 블록을 지정합니다.( <Ctrl> + v 가 예약되어 사용할 수 없는 경우는 <Ctrl> + q 로 대신할 수 있습니다.)
  • 비주얼 모드에서 대소문자 변환하기
    • 텍스트를 선택하고 u를 누르면 모두 소문자로 변환
    • 텍스트를 선택하고 U를 누르면 모두 대문자로 변환
  • 비주얼 모드에서 커서 이동하기
    • 현재행에서 1500번 행까지 선택하고 싶다면 1500g라고 명령
    • G를 누르면 맨끝까지 선택
    • gg를 누르면 맨 앞까지 선택
  • 비주얼 모드 응용하기
    • 명령형 모드 변경 시 :'<,'> 이 보이게 됨 
    • '<,'> : 선택한 범위를 의미
    • :'<,'>w extfile.txt 라고 명령하면 extfile.txt 파일로 선택한 부분만 저장됨

문자열 관련 기능

구분 명령어 설명
가운데 정렬 :center  
오른쪽 정렬 :right  
문자열 너비 설정 :center 50 50칸을 기준으로 중앙정렬
:right 50 50칸을 기준으로 오른쪽정렬
문자검색 기능 fc 문자 c를 전방 검색합니다.
Fc 문자 C를 후방 검색합니다.
tc 문자 c를 전방 검색하여, 검색어의 한 칸 앞으로 이동합니다.
Tc 문자 c를 후방 검색하여, 검색어의 한 칸 뒤로 이동합니다.
; 가장 최근에 검색한 명령을 재검색합니다. 
, 가장 최근에 검색한 명령을 반대 방향으로 재검색 합니다.
문자열 검색 /{검색어} /를 누르면 명령행모드 처럼 커서가 하단에 이동 검색어를 입력하고 검색합니다. 위,아래 화살표나 j,k를 사용하면 이전 검색했던 문자열도 불러올 수 있습니다. 
n 다음 검색 결과로 이동합니다.
N 반대 방향의 검색 결과로 이동합니다.
/[a-g]re 검색어에 정규표현식도 가능합니다.
  • 커서 위치의 단어 검색
    • 특정 단어를 검색하는 경우에는 해당 단어에 커서를 두고 별표(*)를 누르면 됨
  • 검색 후 밝게 표시된 단어를 해제하고 싶을때
    • 절대로 검색될 수 없은 문자열 입력 예)/goiweufok 처럼 입력하면 하일라이트 해제됨
    • :nohl 검색에 의해서가 아닌 하일라이트까지 해제됨
    • :set nohls 검색어 강조하는 기능 자체를 끔

문자열 교체

  • :1,$s/man/boy/g : 모든 man이 boyf로 교체됨
교체 명령 옵션
옵션 설명
g 범위 내에 검색된 모든(global) 문자열을 교체합니다.  
i 대소문자를 무시(ignore case) 합니다.
c 문자열을 교체하기 전 교체여부를 확인(confirm)합니다.
e 교체 과정 중 에러를 무시합니다. 에러 메시지도 표시하지 않습니다.
문자열 교체에서 확인 입력의 의미
확인입력 설명
y 교체를 허용(yes)합니다.
n 교체를 거부(no)합니다.
a 앞으로 남은 모든(all) 교체를 실행합니다.
q 교체 작업을 끝냅니다.
l 현재 행(line)의 교체 작업만 하고 교체작업을 끝냅니다.
^E 아래로 한 행을 스크롤하여 보여줍니다.
^Y 위로 한 행을 스크롤하여 보여줍니다.

특수문자 교체하기

도스, 유닉스, 구형 매킨토시의 개행문자 표현방식
형식 개행문자 표현방식
도스 CR + LF
유닉스 LF
구형 매킨토시( OS9 이하) CR
  • 바이너리 모드
    • vim -b 파일명
    • :set binary -> 파일열기를 실행해서 읽어들인다.
  • 도스형식파일 유닉스 형식으로 변환하기
    • <CR>문자(^M)를 제거
    • <Ctrl-v><Ctrl-m>을 눌러서 %s/^M//g를 만들어 치환
    • %s/\r//g 로 바꿔도 됨
  • 유닉스 형식을 도스 형식으로 바꿈
    • %s/$/^M/g
  • 정규표현식
    • %s/\([a-zA-Z0-9]+@[a-zA-Z0-9]+\)/<a href-"mailto:\1">\1<\/a>/g

파일 관련 기능

구분 명령어 설명
파일버퍼관련 명령어

:edit 파일명

:e 파일명

vim 실행 중 다른 파일 열기

<Ctrl-^>

:e #

열었던 파일 다시 열기
:[#]n

여러파일이 열려 있을 때, 다음 파일로 이동합니다.

#에 숫자를 넣으면 해당 숫자만큼 반복합니다.

:[#]N :n의 반대 방향으로 이동합니다.
파일을 저장하는 다양한 명령어 :w 파일명 파일을 저장합니다.
:sav[as] 파일명 현재파일을 다른 이름으로 저장합니다.
:up 변경사항이 있는 경우에만 저장합니다.
:x

vim을 종료하면서 변경 사항이 있는 경우에는 저장합니다.

(일반모드에서는 ZZ)

창분할

:[#]sp [파일명]

[#]<Ctrl-w> s

상하로 창을 분할합니다. 파일명을 생략하면 현재 파일을 의미합니다.
:10sp 파일명 새로 생성되는 창의 크기가 10행

:[#]vs 파일명

[#]<Ctrl-w> v

좌우로 창을 분할 합니다.

:[#]new

[#]<Ctrl-w> n

상하로 분할하고, 위쪽에 새로운 창을 만듭니다. 

:[#]vnew

[#]<Ctrl-w> v

좌우로 창을 분할하고, 왼쪽에 새로운 창을 만듭니다.
창 사이를 이동하는 명령어 <Ctrl-w> 방향키 방향키는 h,j,k,l이나 화살표키를 사용할 수 있습니다.
<Ctrl-w> w

현재 창에서 오른쪽 방향으로 이동합니다.

오른쪽 끝 창이라면 아래로 이동합니다. 

<Ctrl-w> p 바로 이전의 창으로 이동합니다.
분할된 창의 크기를 조절하는 명령어 <Ctrl-w> = 모든창의 크기를 동일하게 조절합니다.
<Ctrl-w> [#]+

# 크기만큼 크기를 키웁니다.

#을 생략하면 1을 키웁니다.

<Ctrl-w> [#]-

# 크기만큼 크기를 줄입니다.

#을 생략하면 1을 줄입니다.

탭으로 열기 :tabedit hello.c 탭으로 열기
탭 이동 명령

:[#]tabn[ext]

[#]gt

[#]<Ctrl-PageDown>

다음 탭으로 이동하며, 일반모드의 gt와 동일합니다.

#에 숫자를 지정하면 탭 번호가 지정됩니다.

:[#]tabp[revious]

[#]gT

[#]<Ctrl-PageUp>

이전 탭으로 이동하며, 일반모드의 gT와 동일합니다.

#에 숫자를 지정하면 탭 번호가 지정됩니다.

:tabm[ove] [#]

#번째 탭으로 현재 탭을 이동시킵니다. (0부터 시작)

#이 생략되면 가장 오른쪽으로 이동시킵니다.

탭 생성과 종료명령 :tebe[dit] 파일명

#번째 탭에 파일을 엽니다.

#이 생략되면 현재 탭 뒤에 생성됩니다.

:[#]tabnew #번째 위치에 비어있는 탭을 만듭니다.
:[#]tabc[lose]

#번째 탭을 닫습니다.

#을 생략하면 현재 탭을 닫습니다.

디렉터리 탐색하기(netrw)

  • :e directory로 싱행하면 됨
  • :e . 현재 디렉터리를 탐색기처럼 열어줌
  • vim .
  • vim directory
  • 화면 위쪽에 Sorted by 부분에 <Enter>를 누르면 name, time, size 순으로 정렬이 됨
netrw의 주요 단축키
명령어 설명
<Enter> 파일을 현재 창에 열어줍니다.
i 파일 표시 방법을 변경(한 줄, 파일 정보도 함께, 와이드 형식, 트리방식) 합니다. 
s 정렬 방식을 바꿔 줍니다.(이름순, 시간순, 크기순)
o 커서 위치의 파일을 수평 분할된 새 창으로 열어줍니다.
v 커서 위치의 파일을 수직 분할된 새 창으로 열어줍니다.
p

커서 위치의 파일을 미리보기 창으로 열어줍니다.

(미리보기 창닫기는 <Ctrl-w> z 나 :pclose를 사용합니다.)

P

커서 위치의 파일을 바로 이전에 생성한 창에 열어줍니다.

바로 이전에 생성한 창이 없다면 수평 분할된 새 창으로 열어줍니다.

R 파일명을 바꿉니다.
t 새로운 탭으로 분할하여 열어줍니다.
- 상위 디렉터리로 이동합니다. 

파일열기(고급)

버퍼 목록에 표시되는 기호
명령어 설명
% 현재 편집중인 버퍼
#

바로 이전에 열었던 혹은 다음에 열도록 예비된 버퍼

<Ctrl-^>를 누르면 #표시된 파일이 열립니다.

a

활성화된 버퍼(현재 화면에 보이는 버퍼)

창 분할 기능을 쓰는 경우에는 여러 파일에 a 표시가 나타납니다.

+ 변경된 부분이 있는 버퍼
버퍼 관련 명령어들
명령어 설명

:ls

:buffers
:files

파일목록을 확인합니다.
:n {pattern} 지정된 pattern으로 파일을 검색하여 목록에 추가하고 첫번째 검색된 파일을 열어줍니다.

{n}<Ctrl-^>

:e #{n}

{n}번째 파일목록을 엽니다.
:0f

현재 버퍼를 목록에서 제거합니다.

연결된 파일이 있다면 해제하여 [No Name]버퍼로 만듭니다.

:r[ead] 파일 파일을 끼워 넣습니다.

 

  • 본문의 파일명을 인식해서 열어주는 명령어
    • gf는 디렉터리가 포함된 경우 경로 전체를 인식
    • 경로가 없고 파일명만 있는 경우에는 현재 디렉터리와 path옵션에 설정된 디렉터리를 순서대로 검색합니다.
명령어 설명
gf 커서 위치의 파일명을 인식해서 열어줍니다.
<Ctrl-w> f 커서 위치의 파일명을 분할된 창에서 열어줍니다.
<Ctrl-w> gf 커서 위치의 파일명을 탭에 열어줍니다.

 

유용한 기능

   
명령어 설명
% (, ) 또는 {, } 또는 [, ]의 시작 끝으로 이동합니다. 

'' 카테고리의 다른 글

손에 잡히는 정규 표현식  (0) 2020.04.20