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