본문 바로가기

unix

vi 명령어 모음

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]








저장, 열기, 종료
명령모드에서 :를 누르면 exmode가 됩니다. exmode에서는 파일 열기, 저장, 닫기, 강제종료, 파일 이름확인등을 사용할 수 있습니다.
열고자 하는 파일이 존재하지 않을 경우에는 새로운 파일이 만들어집니다.

 종료  :q
 저장  :w 
 열기  :e [filename] 
 강제 종료  :q! 
 저장 후 종료  :wq 
 작업중인 파일정보(파일 이름과 라인수)  :f 





Undo/Redo
 u undo 
 Ctrl + r redo 






파일 내비게이션
파일 내비게이션 화면은 아래의 명령어로 열수 있습니다.
:vs ./








문자열 변경하기
다음은 exmode를 문자열을 바꾸는 방법입니다. 다음의 명령어를 통하여 문서 전체 or 지정한 블록에서 원하는 패턴을
변경할 수 있습니다.

:(시작줄),(끝줄)s/찾을패턴/변경할스트링/옵션

옵션
 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)
창분할을 통하여 여러개의 파일을 편집할 수 있습니다.

윈도우 화면 가로 분할
:sp




윈도우 화면 세로 분할
:vs



창 삭제
 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[임의의 알파벳]: 마킹
`[마킹한 알파벳]: 마킹된 위치로 돌아갈 때 (` 기호는 backtick을 의미)
 
마킹의 종류 세가지
A-Z : 전역마킹 - 현재 파일을 포함한 다른 파일 간의 마킹이 가능하다. (다른 파일간에도 이동)
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