===== VI Editor =====
신규하님의 블로그에서 가져왔습니다.
(http://gyuha.tistory.com/157)
[[linux:vi:image|vi명령어 이미지 모음]]
vi와 Vim의 가장 큰 차이점은, Vim은 에디터에서 화살표 방향키로 커서의 이동이 되지만 vi는 이 방법으로는 커서의 이동이 되지 않는다는 것이다. 순수하게 vi만 설치되어 있다면 화살표 방향키가 아닌 h, j, k ,l로 커서를 이동할 수 있다.
==== .exrc 설정 ====
.exrc는 vi설정 파일이다.
.exrc에서는 vi를 사용해 문서를 편집하는 경우 exrc에서 설정된 값을 불러오면서 사용된다.
set number --> 라인수표시
set ts=4 --> Tab
set ai --> Auto Indent
$ source .exrc 해주거나,
terminal을 닫고 다시 실행시키면 바뀐 tab size 설정이 적용된다.
==== utf-8 설정 ====
파일의 기본 encoding설정하기
set encoding=utf-8
set fileencodings=utf-8,cp949
==== color 설정 ====
vi의 컬러설정
filetype plugin indent on
set term=xterm-256color
syntax on
set term=xterm-256color
===== VIM 명령어 정리 =====
==== 저장 및 종료 ====
:w [저장]
:w file.txt [file.txt파일로 저장]
:q [vi 종료]
:q! [vi 강제종료]
ZZ [저장 후 종료]
:wq! [강제 저장 후 종료]
:e file.txt [file.txt파일을 불러옴]
:e [현재 파일을 불러옴]
:e# [바로 이전에 열었던 파일을 불러 옴]
==== 입력모드전환 ====
a [커서의 위치 다음칸부터 입력], A [커서 행의 맨 마지막부터 입력]
i [커서의 위치에 입력], I [커서 행의 맨 앞에서 부터 입력]
o [커서의 다음행에 입력], O [커서의 이전 행에 입력]
s [커서 위치의 한글자를 지우고 입력], cc [커서위치의 한 행을 지우고 입력]
==== 이동 ====
h [왼쪽], j [아래], k [위], l [오른쪽]
w or W [다음 단어의 첫 글자로 이동]
b or B [이전 단어의 첫 글자로 이동]
e or E [단어의 마지막 글자로 이동]
[다음 행 첫 첫 글자로 이동]
^ [그 행의 첫 글자로 이동], $ [그 행의 마지막글자로 이동]
+ [다음 행의 첫 글자로 이동], - [위 행의 첫 글자로 이동]
( [이전 문장의 첫 글자로 이동], ) [다음 문장의 첫 글자로 이동]
{ [이전 문단으로 이동], } [다음 문단으로 이동]
H [커서를 화면 맨 위로 이동], z [현재 행을 화면의 맨우로 이동]
M [커서를 화면 중앙으로 이동], z. [현재 행을 화면의 중앙으로 이동]
L [커서를 화면 최하단으로 이동], z- [현재 행의 화면의 최하단으로 이동]
[n]H [커서를 위에서 n행으로 이동], [n]L [커서를 아래에서 n행으로 이동
ctrl+u [반 화면 위로 스크롤], ctrl+d [반 화면 아래로 스크롤]
ctrl+b [한 화면 위로 스크롤], ctrl+f [한 화면 아래로 스크롤]
gg or 1G [문서의 맨 처음으로 이동], G [문서의 맨 마지막 행으로 이동]
[n]G or :[n] [n행으로 이동]
==== 삭제 ====
x or dl [커서 위치의 글자 삭제], X or dh [커서 바로 앞의 글자 삭제]
dw [현재 위치부터 스페이스까지 삭제], diw [현재 위치에 있는 단어 삭제]
dd [커서가 있는 행을 삭제], [n]dd [현재 커서부터 아래 n번째 줄까지 삭제]
dj [현재 커서와 아래 줄 삭제], [n]dj [현재 커서 부터 아래 n+1번째 줄까지 삭제]
dk [현재 커서와 윗 줄 삭제], [n]dk [현재 커서와 위로 n+1번째 줄까지 삭제]
D or d$ [현재 커서가 있는 위치부터 행 끝까지 삭제]
d0 or d^ [현재 커서가 있는 위치부터 행 시작까지 삭제]
==== 복사 & 붙여넣기 ====
yy or Y [커서가 있는 한 행 복사]
[n]yy or [n]Y [커서가 있는 n행 복사]
p [현재 커서에 붙여 넣기, 행 복사일 경우 아래 줄에 붙여넣음]
[n]p [n번 만큼 붙여넣기 반복]
P [현재 커서위치의 앞행에 붙여 넣기,행 복사일 경우 윗 줄에 붙여넣음]
==== 텍스트 변경 명령어 ====
cw 단어 변경
cc 행 변경
C 커서 오른쪽의 행 변경
s 커서가 위치한 문자열 대체
S 커서가 위치한 라인의 문자열 대체
r 커서 위치 문자를 다른 문자로 대체
r-Enter 행 분리
J 현재 행과 아래 행 결합
xp 커서 위치 문자와 오른쪽 문자 교환
~ 문자형(대, 소문자) 변경
u 이전 명령 취소
U 행 변경 사항 취소, 이전의 최종 행 취소
. 이전 최종 명령 반복
==== 블럭지정 ====
== 블럭 지정 ==
v [블럭 지정], V [줄단위 블럭 지정]
ctrl+v(윈도우에서는 ctrl+q) [비쥬얼 블럭 지정]
== 블럭 지정중명령 ==
y [블럭 복사 하기]
r [치환]
d [지정 블럭 지우기]
u [소문자로 바꾸기], U [대문자로 바꾸기]
~ [대소문자 전환]
J [행 합침]
: [선택 영역에 대하여 ex명령]
< [행 앞에 탭 제거]
> [행 앞에 탭 삽입]
==== 문자열 탐색 및 치환 ====
/[문자열] [문자열 탐색]
: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로 교체]
==== vim 정규 표현식 ====
^ [행의 첫 문자([]안에서는 not의 의미)
$ [행의 끝]
. [아무 문자나 한 문자 의미]
\| [or의 의미]
[] [[]사이의 문자 중 하나]
\{min, max\} [min이상 max이하 반복됨]
* [앞의 내용이 0번 이상 반복됨]
\+ [앞의 내용이 1번 이상 반복됨]
\< [단어의 시작]
\> [단어의 끝]
\n [새 행 문자]
\t [탭 문자]
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 새 행
==== 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진수
==== 파일 버퍼 ====
:files or :ls or :buffers 버퍼 목록 나열
:b[n] n번 버퍼로 이동
:bd[n] or :bw[n] n번 버퍼를 삭제 (n이 없으면 현재의 버퍼를 삭제)
:bp[n] 이전 버퍼로 이동,n을 붙이면 n번만큼 이전 버퍼로 이동
:bn[n] 이후 버퍼로 이동,n을 붙이면 n번만큼 이후 버퍼로 이동
:sb[n] 창을 수평분할 하여 n번 버퍼를 로드
:bf 첫 번째 버퍼로 이동
:bl 마지막 버퍼로 이동
==== Tab ( vim7.0부터 추가된 기능 ) ====
: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로 변경)
==== 다중 창 관련 명령 ====
== 창생성 ==
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을 같이 눌러도 똑같은 역활을 하는 경우가 많다.
예) CTRL-W j 는 CTRL-W CTRL-J와 같다.
==== 마킹 및 마킹위치로 이동 ====
m[a-z0-9] 파일내에서 마킹, 현재 버퍼내에서만 이동 함 예)ma
m[A-Z] 전체영역에서 마킹, 다른 파일로도 이동 함.
`[A-Za-z0-9] 마킹된 위치로 돌아감 예)`a
’[A-Za-z0-9] 마킹된 행의 처으으로 이동함. 예)‘a
” 직전에 커서가 위치하던 행의 처음
`` 직전의 커서 위치로 이동
’” 이전에 vim으로 현재 파일을 닫았을 때 커서가 있던 행의 처음으로 이동
`" 이전에 vim으로 현재 파일을 닫았을 때 커서가 있던 위치로 이동