Vi editor
텍스트 입력 모드 |
|
범위 설정 |
|
커서 이동 |
|||||||
i |
커서 앞에서 삽입 |
1,$ |
모든 줄 |
k |
한 줄 위로 |
||||||
a |
커서 뒤에서 삽입 |
1,. |
처음부터 현재 줄까지 |
j |
한 줄 아래로 |
||||||
o |
현재 줄 다음부터 삽입 |
.,$ |
현재부터 마지막줄까지 |
l |
오른쪽으로 |
||||||
O |
현재 줄 앞에서 삽입 |
.-2 |
현재부터 앞 두줄까지 |
h |
왼쪽으로 |
||||||
R |
텍스트가 대치 |
.+2 |
현재부터 뒤 두줄까지 |
^ |
줄의 시작으로 |
||||||
텍스트 지우기 |
텍스트 치환 |
$ |
줄의 끝으로 |
||||||||
x |
문자 |
r |
문자 |
b |
한 단어 앞으로 |
||||||
dw |
단어 |
cw |
단어 |
w |
한 단어 뒤로 |
||||||
dd |
줄 |
cc |
줄 |
Ctrl+d |
반 화면 아래로 |
||||||
D |
현재 줄의 끝까지 |
텍스트 붙이기 |
Ctrl+f |
한 화면 아래로 |
|||||||
:<R>d |
블록단위의 줄 |
<R>y |
줄을 버퍼에 복사 |
Ctrl+u |
반 화면 위로 |
||||||
탐색 |
pu |
현재 줄 다음에 붙이기 |
Ctrl+b |
한 화면 위로 |
|||||||
/sss |
뒤쪽으로sss탐색 |
:nnpu |
줄 nn다음에 붙이기 |
:nn |
줄번호 nn으로 |
||||||
?sss |
앞족으로 sss 탐색 |
파일 저장/불러오기 |
기타 |
||||||||
n |
마지막 탐색명령 반복 |
:w |
현재 이름으로 저장 |
Ctrl+l |
화면을 다시 그림 |
||||||
탐색/치환 |
:w mm |
mm으로 저장 |
:!<C> |
잠깐 <C>명령 실행 |
|||||||
:<R>s/ sss/ ttt/ |
처음 줄만 치환 |
:e mm |
mm파일 편집 |
:q |
종료 |
||||||
:<R>s/ sss/ ttt/g |
모두 치환 |
:n |
다음 파일 편집 |
:q! |
저장않고 종료 |
||||||
Shell 사용하기 |
|
검 색 |
|||
:!<C> |
shell명령 실행 후 Enter키로 복귀 |
f |
동일 행 검색 |
||
:sh |
Shell prompt실행, exit로 복귀 |
/<CR> |
순방향 점체 검색 |
||
Ctrl+z |
Vi process 중지, fg로 복귀 |
?<CR> |
역방향 전체 검색 |
||
화면 및 커서 이동 |
; |
동일 행 반복 검색 |
|||
z |
현재 행을 화면의 상단으로 이동 |
N, n |
전체 행 반복 검색 |
||
z. |
현재 행을 화면의 중앙으로 이동 |
/^ |
검색 문자열을 행의 시작에 한정 |
||
Ctrl+E |
한 행 아래로 이동 |
/$ |
검색 문자열을 행의 마지막에 한정 |
||
Ctrl+Y |
한 행 위로 이동 |
/. |
한 문자를 나타낸다 |
||
H |
현재 화면의 상단으로 커서를 이동 |
/[ ] |
문자 집합, ^은 여집합 |
||
M |
현재 화면의 중앙으로 커서를 이동 |
/ * |
0이상의 반복을 의미 |
||
L |
현재 화면의 하단으로 커서를 이 |
/ \< |
패턴을 단어의 시작에 한정 |
||
텍스트 수정 |
/ \> |
패턴을 단어의 끝에 한정 |
|||
r |
한 문자 치환 |
/ \ |
\ 뒤의 문자를 에스케이프 |
||
R |
커서 우측으로 입력되는 문자 치환 |
행 병합 / 명명 |
|||
s |
한 문자를 여러 문자로 치환, Esc종료 |
J |
두 행을 한 행으로 |
||
cw |
단어 치환 |
m |
행을 a에서 z중의 하나로 표시 |
||
c$ |
커서부터 행의 마지막까지 치환 |
블럭 지정 및 붙여넣기 |
|||
c^ |
행의 시작부터 커서까지 치환 |
yw |
현재 커서가 있는 단어 |
||
cc |
행 전체 치환 |
y$ |
현재 커서가 있는 곳에서 행의 끝 |
||
Vi 옵션 |
y^ |
현재 커서가 있는 곳에서 행의 시작 |
|||
vi –r <filename> |
임시저장 파일 읽음 |
yy |
현재 커서가 있는 행의 전체 |
||
vi –R <filename> |
Read Only로 읽음 |
p |
붙여넣기 |
||
vi +n <filename*gt; |
시동시에 n번째 행을 보여줌 |
|
|
||
텍스트 복구
vi는 사용자의 마지막 9개의 삭제를 9개의 버퍼에 보관함으로써 대부분의 잘못된 삭제를 복구할 수 있다. p 명령 앞에 버퍼 번호를 주어 해당 버퍼에 있는 내용을 되살릴 수 있다.
예제) "2p, "1p
매크로
매크로는 여러가지 기본 명령을 확장해 보다 복잡한 작업을 쉽게 처리하기 위해 제공되는 기능이다.
- Buffer 매크로
vi의 a부터 z까지의 버퍼에 명령을 지정하여 실행 할 수 있다. 실행 방법은 @<buffer
name>이다.
매크로 명령을 buffer에 저장하기 위해선 해당 매크로 명령을 입력 모드에서 편집한 다음
"<buffer name>D 명령을 이용해 편집된 매크로 명령을 해당 buffer에 저장한다.
예제) i\fI^[Ea\fP^[
"aD
@a
- Map
주어진 명령 문자열을 키보드의 키에 지정되도록 해주는 기능이다. 이것은 :map 명령을 사용한다.
예제) :map #1 i\fI^V<ESC>Ea\fP^V<ESC><CR>
- 삽입 모드 맵
맵은 삽입 모드 동안에는 사용할 수 없다. 삽입 모드에서 맵을 이용하기 위해선 삽입 모드 맵을
사용해야 한다. 이것은 :map! 명령을 사용한다.
예제) :map! #1 Changwon<CR>
- 약어
약어는 말 그대로 어떤 긴 문자열에 대한 약어를 지정해 주는 것으로써 좀더 문서의 편집을 쉽게
하기 위해 제공되는 기능이다. 이것은 :ab명령을 사용한다.
예제) :ab ux UNIX(tm)<CR>
환경 설정 :set <option>
vi에서는 다음의 옵션들을 사용할 수 있는데 :set 명령과 다음의 옵션을 함께 사용하면 그 옵션이 설정되고, 이 옵션앞에 no라는 접두어가 붙으면 그 옵션의 설정이 해제된다.
autoindent
autoprint
autowrite
beautify
directory=/var/tmp
edcompatible
errorbells
noexrc
flash
hardtabs=8
ignorecase
lisp
list
magic
modelines
number
novice
optimize
paragraphs=IPLPPPQPP Lipplpipnpb
prompt
readonly
redraw
remap
report=5
scroll=17
sections=NHSHH HUuhsh+c
shell=/bin/csh
shiftwidth=4
showmode
slowopen
tabstop=4
taglength=0
tags=tags /usr/lib/tags
tagstack
term=sun-cmd
terse
timeout
ttytype=sun-cmd
warn
window=34
wrapscan
wrapmargin=0
writeany
주요 vi 옵션
autoident(ai) : 새로운 각 행을 이전 행 또는 새로운 행이 생길 때 커서가 어떤 위치에 자동으로 인덴트
되도록 한다. c 프로그래밍할 때 유리하다.
autowrite(aw) : 다른 화일로 옮겨갈 명령을 실행하기 전 또는 쉘로 잠시 나오기 전에 현재 화일을 강제
로 저장한다.
ignorecase(ic) : 검색과 대치시 대소문자 구분을 무시한다.
magic : 모든 정규식 문자를 사용할 수 있게 한다.
mesg : 문서 편집 동안 메시지가 화면에 출력되는 것을 허용한다.
number(nu) : 문서의 행에 행번호를 붙여 화면에 출력한다.
showmach(sm) : )나 {를 입력할 때마다 자동으로 커서가 대응하는 (나 }로 이동하여 1초동안 머문다.
showmode : 상태 행에 현재 편집 모드를 출력한다.
wrapscan(ws) : vi가 매번 화일 전체를 검색하도록 한다.
검색은 항상 현재 행부터 시작해서 화일의 끝으로 진행된다.
예제) 문서의 각행에 행번호를 출력하는 예제 :set number<cR>
번호 출력을 해제하는 예제 :set nonumber<CR>
현재 vi 모드를 출력하는 예제 :set showmode
-------------------------------------------------------------------------------------------------------------------------------------------
vim 사용법
실행방법
vim 명령어를 통하여 실행할 수 있습니다.
vim [File_name]
사용모드
vim에서는 텍스트를 입력/수정이 가능한 편집모드와 명령를 내릴수 있는 명령 모드가 있습니다.
기본적으로 시작하면 명령어 모드로 시작되는데요.
편집모드는 다음과 같은 키 입력으로 편집모드로 들어갈 수 있습니다.
모든 명령들은 대소문자를 구분합니다. 주의 하시기 바랍니다.
o | 포커스 잡힌 커서 아래 라인으로 이동 후 편집모드 시작 |
O |
포커스 잡힌 커서 윗 라인으로 이동 후 편집모드 시작 |
i | 포커스 잡힌 커서 위치에서 편집모드 시작 |
I | 포커스 잡힌 커서의 라인 제일 앞으로 이동 후 편집모드 시작 |
a | 포커스 잡힌 커서의 다음 문자열에서 편집모드 시작 |
A | 포커스 잡힌 커서의 라인 제일 뒤로 이동후 편집모드 시작 |
편집모드로 들어가야 텍스트를 입력할 수 있습니다.
그리고 편집모드일 때는 왼쪽 하단에 "--INSERT-- " 라는 문구로써 구분할 수 있습니다.
※ 편집모드에서는 esc 키를 누르면 편집모드를 빠져나올 수 있습니다.
키 이동
h | 왼쪽 한칸이동 |
j | 위쪽 한칸 이동 |
k | 오른쪽 한칸 이동 |
l | 아래쪽 한칸 이동 |
그외 이동방법들
기본 키보드이동뿐만 아니라 아래의 그외 이동방법들은 굉장히 많이 사용됩니다.
w | 다음 단어로 이동 |
b | 이전 단어로 이동 |
Ctrl + f | 다음 페이지로 이동 |
Ctrl + b | 이전 페이지로 이동 |
G | 문서의 맨 끝으로 이동 |
gg | 문서의 맨 앞으로 이동 |
$ | 커서를 라인의 제일 뒤로 이동 |
^ | 커서를 라인의 제일 앞으로 이동 |
:라인수 | "라인수"에 명시한 해당 라인으로 이동 |
블록 지정
블록은 명령모드에서만 지정할 수 있습니다. 아래의 키를 통하여 블락의 시작을 잡고 이동명령키를 통하여 블락범위를 지정합니다.
v | 단어 단위로 블럭 지정. |
Shift + v | 라인 단위로 블럭 지정. |
Ctrl + v | 블럭 단위로 블럭 지정. |
편집(복사, 삭제, 붙여넣기)
지정된 블럭을 통하여 복사, 삭제, 붙여넣기를 할 수 있습니다.
신기한것은 vim에서는 삭제명령어도 복사를 하기 때문에 삭제 후 'p'를 눌르면 삭제된 내용을 붙여넣기 할 수 있습니다.
y | 지정된 블럭을 복사. |
p | 복사된 블럭을 현재 커서에 붙인다. |
x | 커서의 한 문자를 삭제한다. |
dd | 커서의 현재 라인을 삭제한다. |
※ 그외로 Shift + j 를 통하여 커서의 아랫라인과 현재 라인을 하나의 라인으로 합칠 수 있습니다.
은근 유용하게 자주 사용하게 되더군요.
대소문자 변경
~을 통하여 소문자->대문자, 대문자->소문자로 변경할 수 있습니다.
위에서 알려드린 블록을 잡고 ~를 눌르면 블록단위 대소문자 변경이 이루어집니다.
들여쓰기, 내어쓰기
들여쓰기는 < 키 입력을 통하여, 내어쓰기는 > 키입력을 통하여 들여쓰기를 할 수 있습니다.
이기능도 마찬가지로 블록단위 들여쓰기, 내어쓰기가 가능합니다.
찾기 기능
명령모드에서 / 를 누르면 화면 제일 아래에 '/'가 나타나면 글자를 쓸수 있는 커서가 나타나며,
찾을 글자를 입력한 후 엔터를 치면 찾을 수 있습니다
만약 찾은 갯수가 1개 이상이라면, n을 누르면 다음 찾은 부분(문서아래쪽방향)으로 이동이 가능하며
N을 누르면 이전 찾은 부분(문서위쪽방향)으로 이동합니다.
정규식도 찾기 기능에서 사용이 가능합니다.
아래는 int64를 찾을때 입력하는 내용입니다.
/int[0-9][0-9]
저장, 열기, 종료
열고자 하는 파일이 존재하지 않을 경우에는 새로운 파일이 만들어집니다.
종료 | :q |
저장 | :w |
열기 | :e [filename] |
강제 종료 | :q! |
저장 후 종료 | :wq |
작업중인 파일정보(파일 이름과 라인수) | :f |
변경할 수 있습니다.
옵션
g (global) | 한 줄에 여러개 일치하면 모두 변경 |
i (igore case) | 대소문자 구분 안함 |
c (confirm) | 찾을 패턴을 변경할 때 사용자에게 변경여부를 확인. |
example
:5,10s/a/b 5~10번째 줄에서 'a'를 'b'로 변경
:.,.+10/a/b/c 현재에서 10번째 줄 ( .은 커서 위치를 의미한다)에서 'a'를 'b'로 변경하는데 변경여부 확인.
:1,$s/a/b 1라인~ 마지막커서에서 'a'를 'b'로 변경 ($s는 마지막 위치를 의미합니다)
창분할(windows)
창분할을 통하여 여러개의 파일을 편집할 수 있습니다.
윈도우 화면 가로 분할
윈도우 화면 세로 분할
창 삭제
Ctrl+w q | 현재 커서의 창을 종료 |
Ctrl+w c | 현재 커서의 창을 닫기 |
Ctrl+w o | 현재 커서의 창만 남기고 모든 창 삭제 |
창 이동
Ctrl+w w | 커서를 순차적으로 이동 |
Ctrl+w 화살표 | 커서를 화살표 방향의 창으로 이동 |
Ctrl+w = | 창의 크기 균등 |
Ctrl+w _ | 수평 분할에서 창의 크기를 최대화 |
Ctrl+w | | 수직 분할에서 창의 크기를 최대화 |
괄호 이동
괄호로 시작하는 위치로 이동할 때는 '[{' 를 통하여 이동할 수 있습니다. 반대로 }로 이동하려면 ']}' 를 사용하면 괄호의 끝으로 이동됩니다. 코드상 어떤 보고 있는 부분이 어떤 함수에 소속되어 있는지 확인할 때 많이 사용됩니다.
커서가 괄호에 있을때에는 %를 통하여 일치하는 괄호 찾기를 할 수 있습니다.
man page
man 페이지를 보기 원하는 위치에 커서를 두고 Shift + k를 입력하면 해당 커서의 man 페이지를 볼 수 있습니다.
이전 명령 반복
. 을 눌르면 이전에 했었던 작업을 한번 더 실행한다. 반복적인 작업에 유용하게 사용됩니다.
외부명령
:! 명령어
텍스트 위치 마킹
m[임의의 알파벳]: 마킹
a-z : 지역마킹 - 현재 파일 내에서만 마킹이 가능하다. (현재 파일에서만 이동)
~/.viminfo 파일에서 자동으로 지정한 0-9
블럭의 맨 앞 or 맨뒤에 문자열 추가하기
일괄적으로 블럭 지정한 부분에 동일한 텍스트를 맨 처음 or 맨뒤에 넣을 때 사용할수 있습니다.
맨앞에 넣기
:norm i문자열
맨뒤에 문자열 추가.
:norm A문자열
블럭을 지정하고 맨 앞에 //를 넣음으로써 주석 처리를 할 수 있습니다.
ex) :norm i//
vim Help 페이지 사용하기
:help
위의 명령어로 vim 에디터에 대한 헬프 페이지를 통하여 사용방법을 확인할 수 있습니다.
밑줄이 쳐진 주제에 대해서 아래의 이동 명령어를 통해 이동하고 되돌아 올수 있습니다.
주제로 이동 | Ctrl + ] |
되돌아오기 | Ctrl + t |
'unix' 카테고리의 다른 글
cvs login & cvs checkout (0) | 2012.02.17 |
---|---|
2>&1 의미 (0) | 2012.02.17 |
unix FTP (0) | 2012.02.13 |
Chmod, Chown 사용기 (0) | 2012.02.10 |
unix 에서 file을 tar로 묶기 (0) | 2012.02.08 |