[VI/VIM] VI와 VIM
by Choi HyeSun
vi의 장점
-
키보드로 모든 것이 가능
-
가벼우면서도 많은 기능을 내장
vim이란
-
Vi Improved
-
vi의 기본 기능에 충실하면서 vi에는 없는 여러 편리한 기능이 추가
-
리눅스에는 거의 vim이 탑재되어 있음
vim의 모드
표준모드(normal mode)
-
vim 실행시 시작되는 모드
-
키 입력을 통해 vim에게 명령을 내리는 모드(편집 X)
-
커서 이동, 삭제, 복사, 붙이기 등의 작업 수행
-
입력모드 전환 : <i>, <a>, <o>, <s>, <I>, <A>, <O>, <S>
-
명령라인 모드 전환 : <:>, </>, <?>
입력모드(edit mode)
-
실제로 문서를 편집하기 위한 모드
-
표준모드 전환 : <ESC>
명령라인모드(commandline mode)
-
명령 입력으로 여러가지 일을 수행할 수 있는 모드
-
vim의 설정 변경, 파일 저장/불러오기, 특정 패턴 찾기/바꾸기, 외부 명령 실행, vim 종료 등의 작업 수행
-
표준모드 전환 : <ESC>, <Enter>
-
인입 key
-
<:> : vim 설정 명령이나 파일 관련 명령, ex 편집기 ㅁ여령 등을 입력할 때 사용
-
</> : 특정 패턴 정방향 검색
-
<?> : 특정 패턴 역방향 검색
-
VI 명령어
VIM 저장 및 종료 (명령라인모드, 표준모드)
- <:> 이 붙으면 명령라인모드 명령, 붙지 않으면 표준모드 명령
명령 | 의미 |
---|---|
:w | 저장 |
:w sunny.txt | sunny.txt 파일로 저장 |
:w >> sunny.txt | sunny.txt 파일에 덧붙여 저장 |
:q vi | 종료 |
ZZ | 저장 후 종료(= :wq) |
:wq! | 강제 저장 후 종료 |
:e | 현재 파일을 불러옴 |
:e sunny.txt | sunny.txt 파일을 불러옴 |
VIM 입력 (표준모드)
명령어 | 의미 |
---|---|
a | 커서 위치 다음 칸부터 입력 |
A | 커서 행의 맨 마지막부터 입력 |
i | 커서 위치에 입력 |
I | 커서 행의 맨 앞부터 입력 |
o | 커서의 다음 줄에 한 줄을 추가하고 그 곳에 입력 |
O | 커서의 이전 줄에 한 줄을 추가하고 그 곳에 입력 |
s | 커서 위치의 한 글자를 지우고 입력 |
S cc |
커서 위치의 한 줄 내용을 다 지우고 입력 |
C | 커서가 위치한 한 줄의 커서 위치 후를 다 지우고 입력 |
VIM 방향 이동
-
표준모드에서는 화살표 방향키 대신 문자 방향키 이용 가능
-
화살표 방향키 대신 문자 방향키를 이용하면 키보드의 중심에서 벗어나지 않고 이동이 가능함
h | j | k | l |
---|---|---|---|
← | ↓ | ↑ | → |
VIM 이동 (표준모드)
명령어 | 의미 |
---|---|
w | 다음 단어의 제일 앞으로 커서 이동 - 공백(띄어쓰기, 줄바꿈) 및 특수문자 기준으로 단어 인식 |
W | 다음 단어의 제일 앞으로 커서 이동 - 공백(띄어쓰기, 줄바꿈) 기준으로 단어 인식 |
b | 이전 단어의 제일 앞으로 커서 이동 - 공백(띄어쓰기, 줄바꿈) 및 특수문자 기준으로 단어 인식 |
B | 이전 단어의 제일 앞으로 커서 이동 - 공백(띄어쓰기, 줄바꿈) 기준으로 단어 인식 |
e | 해당 단어 끝 바로 앞(한 문자 앞)으로 커서 이동 - 공백(띄어쓰기, 줄바꿈) 및 특수문자 기준으로 단어 인식 |
E | 해당 단어 끝 바로 앞(한 문자 앞)으로 커서 이동 - 공백(띄어쓰기, 줄바꿈) 기준으로 단어 인식 |
<Enter> | 다음 줄의 첫 글자로 이동 |
^ | 현재 줄의 첫 글자로 이동 |
$ | 현재 줄의 마지막 글자로 이동 |
+ | 다음 줄의 첫 글자로 이동 |
- | 다음 줄의 마지막 글자로 이동 |
( | 이전 문장의 첫 글자로 이동 |
) | 다음 문장의 첫 글자로 이동 |
{ | 이전 문단으로 이동 |
} | 다음 문단으로 이동 |
H | 커서를 화면 맨 위로 이동 |
Z<Enter> | 현재 줄을 화면 맨 위로 이동 |
M | 커서를 화면 중앙으로 이동 |
z. | 현재 줄을 화면 중앙으로 이동 |
L | 커서를 화면 맨 아래로 이동 |
z- | 현재 줄을 화면 맨 아래로 이동 |
[n]H | 커서를 화면의 위에서 n번째 줄로 이동 |
[n]L | 커서를 화면의 아래에서 n번째 행으로 이동 |
<CTRL>+u | 화면 반을 위로 스크롤 |
<Ctrl>+d | 화면 반을 아래로 스크롤 |
<Ctrl>+b | 화면 하나를 위로 스크롤 |
<Ctrl>+f | 화면 하나를 아래로 스크롤 |
gg, 1G | 문서의 맨 첫 줄로 이동 G 문서의 맨 끝 줄로 이동 |
[n]G :[n] |
문서의 n번째 행으로 이동 |
VIM 삭제 (표준모드)
명령어 | 의미 |
---|---|
x, dl | 커서 위치(커서 바로 뒤)의 글자 삭제 |
X. dh | 커서 바로 앞의 글자 삭제 |
dw | 한 단어를 삭제 |
d0 | 커서 위치부터 해당 커서가 있는 줄 처음까지 삭제 |
D, d$ | 커서 위치부터 해당 커서가 있는 줄 끝까지 삭제 |
dd | 커서가 있는 줄 삭제 |
dj | 커서가 있는 줄과 그 아랫줄 삭제 |
dk | 커서가 있는 줄과 그 윗줄 삭제 |
dG | 커서가 있는 줄부터 그 아랫줄 전체 삭제 |
VIM 복사와 붙이기 (표준모드)
명령어 | 의미 |
---|---|
yw | 현재 커서 위치의 한 단어 복사 |
[n]yw | 현재 커서 위치부터 n개의 단어 복사 |
yy | 현재 커서 위치의 한 줄 복사 |
[n]yy | 현재 커서 위치부터 y개의 줄 복사 |
p | 복사내용 붙여넣기 |
[n]p | 복사내용 n개 붙여넣기 |
VIM 잘라내기 (표준모드)
-
vi는 총 17개의 레지스터를 가지고 있음
-
명령라인모드에서 :reg로 확인 가능
-
””, “0, “1, “2, “3, “4, “5, “6, “7, “8, “9, “-, “., “:, “%, “#, “/
-
”” : 바로 전에 지워진 내용
-
“1 ~ “9 : 지워진 내용이 큐 형식으로 들어감(“” 후)
-
”. : 최근까지 타이핑한 내용
-
”% : 현재 편집하는 파일명
-
”/ : 가장 최근에 검색한 문자열
-
”* : 복사한 문자열
-
-
VIM 잘라내기란?
- 복사 → 제거 → 붙여넣기 (따로 잘라내기가 없음)
명령어 | 의미 |
---|---|
:reg | 레지스터 확인 |
. | 바로 직전 작업 반복 |
VIM 블록 지정 (비주얼)
-
v : 비주얼모드 진입
-
V : 비주얼모드 - 줄단위 진입 (가로)
-
<Ctrl> + V : 비주얼모드 - 열단위 진입 (세로)
명령어 | 의미 |
---|---|
~ | 대소문자 전환 |
d | 삭제 |
y | 복사 |
c | 치환 |
> | 줄 앞 탭 삽입 |
< | 줄 앞 탭 제거 |
: | 선택된 영역에 대해 ex 명령 |
J | 줄 합치기 |
U | 대문자로 만들기 |
u | 소문자로 만들기 |
<Ctrl> + i | 비주얼 모드 - 열 영역 일괄 문자 입력(수정) |
VIM 되돌리기, 되돌리기 취소 (표준모드)
명령어 | 의미 |
---|---|
u | 되돌리기 |
<Ctrl> + r | 되돌리기 취소 |
VIM 문자열 찾기 (명령 라인 모드)
명령어 | 의미 |
---|---|
/[찾고자 하는 문자열] | 찾고자 하는 문자열 정방향 검색 |
?[찾고자 하는 문자열] | 찾고자 하는 문자열 정방향 검색 |
n | 찾고자 하는 다음 문자열로 이동 |
N | 찾고자 하는 이전 문자열로 이동 |
VIM 문자열 바꾸기(치환) (명령라인모드)
-
줄 내 범위 (한 줄 내 어떻게 바꿀 것인지)
-
g : 한 줄에 매칭되는 것 전부 다
-
g를 쓰지 않으면, 한 줄당 한 번만
-
c : 매칭되는 문자열마다 바꿀건지 confirm받기
-
-
:[범위]/[찾을 문자열]/[바꿀 문자열]/[줄 내 범위]
-
:[범위]/[패턴]/[찾을 문자열]/[바꿀 문자열]/[줄 내 범위]
- 패턴 : 정규표현식 이용
-
예제
예제 | 의미 |
---|---|
:s/sunny/cloudy | 현재 줄의 처음 나오는 sunny를 cloudy로 바꾸기 |
:s/sunny/cloudy/g | 현재 줄의 모든 sunny를 cloudy로 바꾸기 |
:10,20s/sunny/cloudy/g | 10번째 줄부터 20번째 줄까지 모든 sunny를 cloudy로 바꾸기 |
:-1,+2s/sunny/cloudy/g | 현재 커서 위치에서 1줄 위부터 2줄 아래까지 모든 sunny를 cloudy로 바꾸기 |
:%s/sunny/cloudy/g | 문서 전체에서 sunny를 cloudy로 바꾸기 |
:%s/sunny/cloudy/gc | 문서 전체에서 sunny를 cloudy로 확인(confirm)하며 바꾸기 |
:g/pattern/s/sunny/cloudy/g | parttern이 있는 모든 행의 sunny를 cloud로 바꾸기 |
VIM 정규 표현식
- 정규 표현식 내의 vim은 POSIX 문자 클래스를 지원함
정규 표현식 | 의미 |
---|---|
^ | 줄의 첫 문자 |
[] | 안으로 들어가면 not의 의미 $ 줄의 끝 |
. | 아무 문자나 1개 |
\| | or |
[ ] | [] 사이의 문자 중 1개 |
\{min.max\} | min 이상 max 이하 반복 |
* | 앞의 내용이 0번 이상 반복 |
+ | 앞의 내용이 1번 이상 반복 |
\< | 단어의 시작 |
\> | 단어의 끝 |
\n | new line(개행)문자 |
\t | tab 문자 |
POSIX 문자 클래스
- POSIX 문자 클래스를 이용하면 정규 표현식에서 사용하기 힘든 제어문자들을 쉽게 사용할 수 있음
문자클래스 | 의미 |
---|---|
[:alnum:] | 알파벳과 숫자 [A-Za-z0-9] |
[:alpha:] | 알파벳 [A-Za-z] |
[:cntrl:] | 제어문자 |
[:blank:] | tab & 공백 |
[:digit:] | 숫자 [0-9] |
[:graph:] | 제어문자와 공백문자 제외 |
[:lower:] | 소문자 [a-z] |
[:upper:] | 대문자 [A-Z] |
[:print:] | 제어문자 제외 문자 (프린트할 수 있는 문자) |
[:punct:] | [:graph:] 문자 중 [:alnum:] 제외 문자 (특수문자) ex) !, @, #, $, … |
[:space:] | 화이트 스페이스 ex) 공백, 스페이스, 캐리지 리턴, 개행 문자, 수직 탭, 폼 피드 |
[:xdigit:] | 16진수 |
VIM 확장 정규 표현식
정규표현식 | 의미 |
---|---|
\i | 변수 지정에 사용되는 문자 [_0-9A-Za-z] |
\I | \i와 같지만 숫자 제외 |
\k | 키워드로 사용하는 문자 [_\.\-0-9A-Za-z>] |
\K | \k와 같지만 숫자 제외 |
\f | 파일명으로 사용하는 문자 |
\F | \f와 같지만 숫자 제외 |
\p | 프린트 가능한 문자 |
\P | \p와 같지만 숫자 제외 |
\s | 화이트 스페이스 문자(공백&탭) |
\S | 화이트 스페이스가 아닌 문자 |
\d | 숫자 [0-9] |
\D | 숫자가 아닌 문자 [^0-9] |
\x | 16진수 숫자 [0-9A-Fa-f] |
\X | 16진수 숫자가 아닌 문자 [^0-9A-Fa-f] |
\o | 8진수 숫자 [0-7] |
\O | 8진수 숫자가 아닌 문자 [^0-7] |
\w | 영문 단어에서 사용되는 문자 [0-9A-Za-z-] |
\W | 영문 단어에서 사용되지 않는 문자 [^0-9A-Za-z-] |
\h | 영문 단어의 시작에 사용되는 문자 [A-Za-z] |
\H | 영문 단어의 시작에 사용되지 않는 문자 [^A-Za-z] |
\a | 모든 알파벳 [A-Za-z] |
\A | 알파벳이 아닌 문자 [^A-Za-z] |
\l | 소문자 [a-z] |
\L | 소문자가 아닌 문자 [^a-z] |
\u | 대문자 [A-Z] |
\U | 대문자가 아닌 문자 [^A-Z] |
\e | esc |
\t | tab |
\r | 캐리지 리턴 |
\b | 백스페이스 |
\n | 개행 문자 |
Subscribe via RSS