자주쓰는 VI 명령어 내역
출처 : http://www.antsys.co.kr/data/vi_editor.htm
자주 쓰는 내역에 대해서 잘 정리가 되어 있어서 자주보려고 포스팅 합니당.
vi 시작 명령어 | |
vi filename vi +18 filename vi +/"문자열" fn vi -r filename view filename | 파일 열기, 작성 18행으로 파일 열기 "문자열"의 처음발생 단어부터 열기 손상된 파일 회복 읽기 전용으로 파일 열기 |
vi 커서 이동 명령어 | |
h(←) j(↓) k(↑) l(→) | 왼쪽으로 커서 이동 아래로 커서 이동 위로 커서 이동 오른쪽으로 커서 이동 |
w e b Enter Back space Space Bar ^ $ H M L 숫자G | 오른쪽 한 단어의 끝 부분으로 커서 이동 오른쪽 한 단어의 앞 부분으로 커서 이동 왼쪽 한 단어의 앞 부분으로 커서 이동 한 행 아래로 커서 이동 한 문자 왼쪽으로 커서 이동 한 문자 오른쪽으로 커서 이동 행의 맨 왼쪽으로 커서 이동 행의 맨 오른쪽으로 커서 이동 화면의 맨 위로 이동 화면의 중간으로 이동 화면의 맨 아래로 이동 숫자만큼 지정한 줄로 커서 이동 |
Ctrl + f Ctrl + b Ctrl + d Ctrl + u Ctrl + e Ctrl + y | 한 화면 위로 이동 한 화면 아래로 이동 반 화면 위로 이동 반 화면 아래로 이동 한 줄씩 위로 이동 한 줄씩 아래로 이동 |
문자,행 삽입 명령어 | |
a (종료:ESC) A (종료:ESC) i (종료:ESC) I (종료:ESC) o (종료:ESC) O (종료:ESC) | 커서 오른쪽에 문자 삽입 커서 오른쪽, 행의 끝에 문자 삽입 커서 왼쪽에 문자 삽입 커서 왼쪽, 행의 처음에 문자 삽입 커서 아래에 행 삽입 커서 위에 행 삽입 |
텍스트 변경 명령어 | |
cw (종료:ESC) cc (종료:ESC) C (종료:ESC) s (종료:ESC) S (종료:ESC) r r-Enter J xp ~ u U :u . | 단어 변경 행 변경 커서 오른쪽의 행 변경 커서가 위치한 문자열 대체 커서가 위치한 라인의 문자열 대체 커서 위치 문자를 다른 문자로 대체 행 분리 현재 행과 아래 행 결합 커서 위치 문자와 오른쪽 문자 교환 문자형(대,소문자) 변경 이전 명령 취소 행 변경 사항 취소 이전의 최종 행 취소 이전 최종 명령 반복 |
텍스트 삭제 명령어 | |
x 5x dw dd 5dd db D :5,10d | 커서가 있는 문자 삭제 커서가 있는 위치부터 5개의 문자를 삭제 현재 커서가 있는 한단어 삭제 커서가 있는 라인 삭제 커서가 있는 라인부터 5개의 라인 삭제 커서의 위치에서 꺼꾸로 한단어 삭제 커서 오른쪽 행 삭제 5-10번째 행 삭제 |
복사 및 이동 명령어 | |
yy Y P p
:1,2 co 3 :4,5 m 6 | 행 yank 또는 복사 행 yank 또는 복사 yank되거나 삭제된 행 현재 행 위에 삽입 yank되거나 삭제된 행 현재 행 아래에 삽입 1-2행을 3행 다음으로 복사 4-5행을 6행 위로 이동 |
행 번호 설정 명령어 | |
:set nu :set nonu | 행 번호 표시 행 번호 숨기기 |
행 찾기 명령어 | |
G 21G Ctrl + G | 파일의 마지막 행으로 가기 파일의 21번째 행으로 가기 현재의 filename과 line수를 알려줌 |
탐색 및 대체 명령어 | |
/검색할 문자열/ ?검색할 문자열? n N :g/search-string/s//replace-string/gc :s/str/rep/ :1,.s/str/rep/ :%s/str/rep/g
:.$/aaa/bbb/ | 오른쪽 아래 방향으로 문자열 검색 왼쪽 위 방향으로 문자열 검색 문자열의 다음으로 계속 검색 문자열의 이전으로 계속 검색 각 발생 탐색 후 확인하고 대체
현재 행의 str을 rep로 대체 1부터 현재 행의 str을 rep로 대체 파일 전체 str을 rep로 전부 대체 커서의 위치로부터 화일의 끝까지 있는 모든 aaa를 bbb로 대체 |
화면정리 명령어 | |
Ctrl + l | 불필요한 화면정리 후 다시 표시 |
파일 명령어 | |
:r filename :34 r filename | 커서 다음에 파일 삽입 파일을 34번째 행 다음에 삽입 |
보관 및 종료 명령어 | |
:w :w filename :wq ZZ :q! q e!
| 변경사항 보관 버퍼를 파일로 보관 변경사항 보관 후 vi 종료 변경사항 보관 후 vi 종료 변경사항 보관하지 않고 종료 수정한 파일을 저장하지 않고 vi 종료 수정한 것을 무시하고 다시 편집상태로 |
출처 : http://gyuha.tistory.com/157
정리가 잘 되어 있습니다. 다른분 블로그의 내용을 가져왔습니다.
VIM 명령어 정리
1. 저장 및 종료
명령어 | 설명 |
:w | 저장 |
:w file.txt | file.txt 파일로 저장 |
:w » file.txt | file.tx파일에 덧붙여서 저장 |
:q | vi 종료 |
:q! | vi 강제 종료 |
ZZ | 저장 후 종료 |
:wq! | 강제 저장 후 종료 |
:e file.txt | file.txt파일을 불러옴 |
:e | 현재 파일을 불러옴 |
:e# | 바로 이전에 열었던 파일을 불러 옴 |
2. 입력모드 전환
a | 커서 위치 다음칸부터 입력 | A | 커서 행의 맨 마지막부터 입력 |
i | 커서의 위치에 입력 | I | 커서 행의 맨 앞에서 부터 입력 |
o | 커서의 다음행에 입력 | O | 커서의 이전 행에 입력 |
s | 커서 위치의 한글자를 지우고 입력 | cc | 커서위치의 한 행을 지우고 입력 |
3. 이동
h | 왼쪽으로 이동 | l | 오른쪽으로 이동 |
j | 아래행으로 이동 | k | 위 행으로 이동 |
w 또는 W | 다음 단어의 첫 글자로 이동 | b 또는 B | 이전 단어의 첫 글자로 이동 |
e 또는 E | 단어의 마지막 글자로 이동 | <CR> | 다음행 첫 첫 글자로 이동 |
^ | 그행의 첫 글자로 이동 | $ | 그 행의 마지막 글자로 이동 |
+ | 다음 행의 첫 글자로 이동 | - | 위 행의 첫 글자로 이동 |
( | 이전 문장의 첫 글자로 이동 | ) | 다음 문장의 첫 글자로 이동 |
{ | 이전 문단으로 이동 | } | 다음 문단으로 이동 |
H | 커서를 화면 맨 위로 이동 | z<CR> | 현재 행을 화면의 맨우로 이동 |
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행으로 이동 |
4. 삭제
x 또는 dl | 커서 위치의 글자 삭제 |
X 또는 dh | 커서 바로 앞의 글자 삭제 |
dw | 현재 위치부터 스페이스 까지 삭제 |
diw | 현재 위치에 있는 단어 삭제 |
dd | 커서가 있는 행을 삭제 |
[n]dd | 현재 커서 부터 아래 n번째 줄까지 삭제 |
dj | 현재 커서와 아래 줄 삭제 |
[n]dj | 현재 커서 부터 아래 n+1번째 줄까지 삭제 |
dk | 현재 커서와 윗로 n+1번째 줄까지 삭제 |
[n]dk | 현재 커서와 윗 줄 삭제 |
D 또는 d$ | 현재 커서가 있는 위치부터 행 끝까지 삭제 |
d0 또는 d^ | 현재 커서가 있는 위치부터 행 시작 까지 삭제 |
5. 복사 & 붙여넣기
yy 또는 Y | 커서가 있는 한 행 복사 |
p | 현재 커서에 붙여 넣기, 행 복사 일 경우 아래 줄에 붙여넣음. |
P | 현재 커서위치의 앞행에 붙여 넣기, 행 복사일 경우에는 윗 줄에 붙여 넣음 |
[n]yy 또는 [n]Y | 커서가 위치한 이후로 n행 복사 |
[n]p | n번 만큼 붙여넣기 반복 |
6. 블록 지정
v | 블록 지정 |
V | 줄단위 블록 지정 |
ctrl+v(윈도우에서는 ctrl+q) | 비쥬얼 블록 지정 |
블록 지정 중 명령 | |
y | 블록 복사 하기 |
r | 치환 |
d | 지정 블록 지우기 |
U | 대문자로 바꾸기 |
u | 소문자로 바꾸기 |
~ | 대소문자 전환 |
J | 행 합침 |
: | 선택 영역에 대하여 ex명령 |
< | 행 앞에 탭 제거 |
> | 행 앞에 탭 삽입 |
7. 문자열 탐색 및 치환
/[문자열] | 문자열 탐색 |
:s/old/new | 현재 행의 처음 old를 new로 교체 |
:s/old/new/g | 현재 행의 모든 old를 new로 교체 |
:10,20s/old/new/g | 10행부터 20행까지 모든 old를 new로 교체 |
[블록지정중]:s/old/new/g | 지정 블록 내에서 모든 old를 new로 교체 |
:-3,+4s/old/new/g | 현재 커서 위치에서 위로 3행 아래로 4행까지의 old를 new로 교체 |
:%s/old/new/g | 문서 전체에서 old를 new로 교체 |
:%s/old/new/gc | 문서 전체에서 old를 new로 확인하며 교체 |
:g/pattern/s/old/new/g | pattern이 있는 모든 행의 old를 new로 교체 |
8. vim 정규 표현식
^ | 행의 첫 문자([]안에서는 not의 의미) |
$ | 행의 끝 |
. | 아무 문자나 한 문자 의미 |
\| | or의 의미 |
[ ] | []사이의 문자 중 하나 |
\{min,max\} | min이상 max이하 반복됨 |
* | 앞의 내용이 0번 이상 반복됨 |
\+ | 앞의 내용이 1번 이상 반복됨 |
\< | 단어의 시작 |
\> | 단어의 끝 |
\n | 새 행 문자 |
\t | 탭 문자 |
9. vim 확장 정규 표현 문자열
\i | 변수 지정에 사용되는 문자들 [0-9A-Za-z] |
\I | \i와 같지만 숫자는 제외 |
\k | keyword로 사용하는 문자 [_\.\-0-9A0Za-z] |
\f | 파일 이름으로 사용하는 문자 |
\p | 프린트 가능한 문자 |
\P | \p와 같지만 숫자는 제외 |
\s | whitespace character(공백과 탭) |
\S | non-whitespace character |
\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 | 새 행 |
10. POSIX 문자 클래스
문자 클래스 | 내용 |
[:alnum:] | 알파벳과 숫자 [A-Za-z0-9] |
[:alpha:] | 알파벳 [A-Za-z] |
[:cntrl:] | 제어 문자 |
[:blank:] | 탭과 공백 문자 |
[:digit:] | 숫자 [0-9] |
[:graph:] | 제어문자와 공백 문자를 제외한 문자 |
[:lower:] | 소문자 [a-z] |
[:upper:] | 대문자 [A-Z] |
[:print:] | 제어문자를 제외한 문자, 즉 프린터 할 수 있는 문자 |
[:punct:] | [:graph:]문자 중 [:alnum:]을 제외한 문자. ex)!,@,#,$,%,^.... |
[:space:] | 화이트스페이스 ex)공백, 탭, 케리지 리턴, 새행, 수직탭, 폼필드 |
[:xdigit:] | 16진수 |
11. 파일 버퍼
:files 또는 :ls 또는 :buffers | 버퍼 목록 나열 |
:b[n] | n번 버퍼로 이동 |
:bd[n] 또는 :bw[n] | n번 버퍼를 삭제 (n이 없으면 현재의 버퍼를 삭제) |
:bp[n] | 이전 버퍼로 이동,n을 붙이면 n번만큼 이전 버퍼로 이동 |
:bn[n] | 이후 버퍼로 이동,n을 붙이면 n번만큼 이후 버퍼로 이동 |
:sb[n] | 창을 수평분할 하여 n번 버퍼를 로드 |
:bf | 첫 번째 버퍼로 이동 |
:bl | 마지막 버퍼로 이동 |
:tabnew | 새로운 탭을 열기 |
:tabnew b.txt | b.txt가 존재하면 열고, 없으면 새로 만들어서 연다 |
:tabf b.txt | b.txt가 존재하면 열고, 없으면 에러 발생 |
:tabn[n] | 다음 탭을 열기,n을 붙이면 n번 만큼 이동 |
:tabp[n] | 이전 탭을 열기,n을 붙이면 n번 만큼 이동 |
:tabs | 탭 목록 보기 |
:tabclose | 탭을 닫기 |
:tabfirst | 첫번째 탭을 열기 |
:tablast | 마지만 탭을 열기 |
:tabdo %s/old/new/g | 모든 탭에 적용을 원할 때 (예 모든탭에서 old를 new로 변경) |
13. 다중 창 관련 명령
명령모드 | ex모드 | 결과 |
창생성 | ||
CTRL-W s | :[N]sp[plit] | 현재 파일을 두 개의 수평 창으로 나눔 |
CTRL-W v | :[N]vs[plit] | 현재 파일을 두 개의 수직 창으로 나눔 |
CTRL-W n | :new | 새로운 수평 창 생성 |
CTRL-W ^ 또는 CTRL-W CTRL-^ |
| 수평 창으로 나누고 이전 파일의 오픈 |
CTRL-W f |
| 창을 수평으로 나누고 커서 위치의 파일 오픈 |
CTRL-W i |
| 커서 위치의 단어가 정의된 파일을 오픈 |
창삭제 | ||
CTRL-W q | :q[uit]! | 현재 커서의 창을 종료 |
CTRL-W c | :close | 현재 커서의 창 닫기 |
CTRL-W o | :on[ly] | 현재 커서의 창만 남기고 모든 창 삭제 |
창이동 | ||
CTRL-W h |
| 왼쪽 창으로 커서 이동 |
CTRL-W j |
| 아래쪽 창으로 커서 이동 |
CTRL-W k |
| 위쪽 창으로 커서 이동 |
CTRL-W l |
| 오른쪽 창으로 커서 이동 |
CTRL-W w |
| 창을 순차적으로 이동 |
CTRL-W p |
| 가장 최근에 이동한 방향으로 이동 |
CTRL-W t |
| 최상위 창으로 이동 |
CTRL-W b |
| 최하위 창으로 이동 |
창이동 | ||
CTRL-W r |
| 순착으로 창의 위치를 순환 |
CTRL-W x |
| 이전 창과 위치를 바꿈 |
CTRL-W H |
| |
CTRL-W J |
| |
CTRL-W K |
| |
CTRL-W L |
| |
창 크기 조정 | ||
CTRL-W = |
| 창의 크기를 모두 균등하게 함 |
CTRL-W _ |
| 수평 분할에서 창의 크기를 최대화 |
CTRL-W | |
| 수직 분할에서 창의 크기를 최대화 |
CTRL-W [N]+ | :res[ize] +N | 창의 크기를 N행 만큼 증가 |
CTRL-W [N]- | :res[ize] -N | 창의 크기를 N행 만큼 감소 |
CTRL-W [N]> |
| 창의 크기를 오른쪽으로 N칸 만큼 증가 |
CTRL-W [N]< |
| 창의 크기를 오른쪽으로 N칸 만큼 감소 |
예) CTRL-W j 는 CTRL-W CTRL-J와 같다.
14. 마킹 및 마킹위치로 이동
m[a-z0-9] | 파일내에서 마킹, 현재 버퍼내에서만 이동 함 예)ma |
m[A-Z] | 전체영역에서 마킹, 다른 파일로도 이동 함. |
`[A-Za-z0-9] | 마킹된 위치로 돌아감 예)`a |
’[A-Za-z0-9] | 마킹된 행의 처으으로 이동함. 예)‘a |
” | 직전에 커서가 위치하던 행의 처음 |
`` | 직전의 커서 위치로 이동 |
’” | 이전에 vim으로 현재 파일을 닫았을 때 커서가 있던 행의 처음으로 이동 |
`" | 이전에 vim으로 현재 파일을 닫았을 때 커서가 있던 위치로 이동 |