| vi 사용 명령어 |
| 글 쓴 이 |
linux |
| 날 짜 |
2003년 03월 17일 11시 59분 57초 |
| 본 문 |
유닉스 에디터의 대명사 vi
* vi 명령어 목록
* vi 시작
* 명령모드와 삽입모드
* 명령 사용
* 택스트의 단위
* 커서 이동
* 삽입과 추가
* 지우기
* 교체
* 행 결합
* 택스트 찾기
* 버퍼저장과 복사
* 특정 문자열 변경 및 삭제
* 특정 문자열 변경 및 삭제
* 외부화일 내용 삽입
* 기타 명령어
* vi 종료
오늘날 vi(visual) 에디터가 존재하는 단하나의 이유는 역사적인 부담 때문이다.
vi 에디터는 모든 버전의 유닉스에 다 들어 있는 편집기이다. 대부분의 유닉스
사용자들은 vi 에디터 환경에서 자랐고 오래된 습관은 버리기 힘든 것이다.
pico와 같이 사용하기 좋은 편집기를 제공하지 않는 시스 템 사용자들을 위해서
vi에디터에 대한 간단한 설명을 한다.
* vi 시작하기
vi를 사용하여 새로운 화일을 만들거나 이미 존재하는 화일을 변형하기 위하여
시스템 프람프트에서 "vi filename"을 입력한다.
화일이름의 길이는 256문자까지 가능하고 특별문자인 -, *,?,<,>,/ 등을
제외하고는 모두 사용할 수 있다. 화일 이름을 지정하지 않고 vi 에디터를
사용하려면 그냥 "vi"만 입력을 한다. 그리고 나중에 종료할 때에 이름을 준다.
vi를 실행하고서 화면의 왼쪽 위에 나타나는 tilde(~) 문자는 빈행을 표시한다.
화면의 맨 아래쪽에 나타나는 행은 status line 이라 불리는 상태를 표시하는
행이다. status line은 화일 이름과 화일에 있는 행수와 문자수를 보여준다.
화면을 내용으로 채우거나 커서를 화일의 끝으로 이동시키면 status line은
사라진다. vi로 새로운 화일을 이름없이 만들면 status line은 나타나지 않는다.
status line을 불러오기 위하여서 Ctrl-G를 누르면 새로운 status line이
나타난다.
* 명령어모드 와 삽입모드
vi 에디터는 명령어모드와 삽입모드, 두가지 모드로 작동을 한다. 명령어모드는
커서 옮기기와 편집 작업과 같은 여러가지 범위의 vi 기능을 사용하는데 쓰는
명령어들을 입력할 수 있도록 한다.
vi를 시작할 때에는 명령어 모드이다. 삽입 모드는 화일에 텍스트를 입력할 수
있도록 해 준다. vi 프로그램은 현재의 모드가 어느 것인지 표시하지 않지만 Esc
키를 누르면 언제나 명령어 모드로 들어간다. 명령어 모드에서 i 를 누르면 삽입
모드로 들어간다.
삽입 모드에서 명령어를 입력하려고 하면 명령어 문자들은 텍스트 내용으로서
화일에 삽입이 된다. 언제나 Esc를 누르면 삽입모드에서 명령어 모드로 들어가
명령을 입력할 수 있도록 해 준다.
* vi 명령어들의 사용
vi 프로그램은 명령어 사용에 기초하여 있다; 커서를 한칸 움직이는 것을
포함하여 모든 것을 명령어로 처리하여야 한다. 대부분의 vi 명령들은 한개나
두개의 문자와 선택적인 숫자로서 구성이 되며 대문자 소문자를 구별하여
비슷하지만 다른 기능을 수행한다. 예를 들면 x를 누르면 커서가 위치한 문자를
지운다; X를 누르면 커서 앞에 있는 문자를 지운다.
대부분의 vi 명령어 다음에는 엔터를 누를 필요가 없다. 그러나 콜론이 앞에 있는
명령어들은 명령어 다음에 엔터를 눌러야 한다. 예를 들면 vi를 종료하고 변경한
것을 내버리는 " :q! "명령을 사용하기 위하여서 느낌표 다음에 엔터를 쳐야 하는
것이다. 대부분의 vi 명령들은 명령어가 영향을 미칠 텍스트의 수를 지정하기
위하여 반복 변수를 첨가할 수 있도록 한다.
대부분의 vi 편집명령어들은 생산성을 높이기 위하여 이동 명령어들과 반복
변수들과 조합될 수 있다. 편집 명령을 반복하고 싶다면 반복 명령인 (.)를
사용함으로서 명령어를 재입력하는 시간을 절약할 수 있다. 명령을 반복하기
위하여 커서를 자신이 원하는 곳에 위치한 다음 마침표 (.)를 누른다. 실행한
마지막 한개의 명령만을 반복할 수 있으며 이것은 커서 옮기기나 스크롤 명령에는
적용할수 없다. 잘못된 vi 명령을 입력하면 잘못된 명령이 입력된 바로 다음에
undo 명령을 사용함으로서 취소할 수 있다. ( 삽입 명령 (i)은 예외이다; 이
명령을 잘못 입력하면 Esc를 눌러서명령어 모드로 돌아간다.) u 명령은 마지막
편집을 취소한다. U 명령은 커서가 그 행에 있는한 그 행 전체에 대한 편집을
취소한다.
* vi에서 텍스트의 단위
많은 vi 명령들이 character(문자), words(단어), sentences (문장) 그리고
paragraphs(문단) 등 특별한 단위의 텍스트에 적용이 된다. 다음은 vi 명령들이
실행되었을 때 각종의단위들을 표시하기 위한 문자들이다.
이 명령들은 다른 명령과 함께 사용이 될 수 있다. 예를 들면, " d( " 는 현
문장의 맨처음까지 지운다.
--------------------------------------------------------
키 영향을 받는 단위
--------------------------------------------------------
w 구두점을 포함하여 다음 단어의 앞으로
W 구두점을 포함하지 않고 다음 단어의 앞으로
b 구두점을 포함하여 현 단어의 앞으로
B 구두점을 포함하지 않고 현 단어의 앞으로
$ 현 행의 끝
O 현 행의 맨 처음
( 현 문장의 시작하는 곳
) 다음 문장이 시작하는 곳
H 왼쪽 제일 위 (홈 포지션)
M 화면의 가운데 줄의 시작하는 곳
L 화면의 마지막 행이 시작하는 곳
-------------------------------------------------------
* 커서 이동
vi 프로그램은 전체 화일내에서 옮겨 다니는데 사용이 되는 많 은 명령어들을
가지고있다. 그러나 커서를 텍스트나 스페이스, 탭, 또는 리턴값이 없는 행을
표시하는 tilde(~) 아래로 움직일 수는 없다.
대부분의 커서를 움직이는 명령들은 커서의 움직임이 몇번을 반복되어야 하는지
숫자를 지정할 수 있다. 화면을 아래로 스크롤 시키는 Ctrl-D 같은 Ctrl 명령이나
커서를 화면의 특정한 위치로 옮기는 명령과 반복 변수를 같이 사용할 수 없다.
다음의 리스트는 vi 에디터의 커서 움직임과 스크롤 명령들에 관한 것들이다.
참고:vi에서 화일내의 각각의 행들은 순서대로 번호가 있다. 디폴트로 행번호는
보여지지 않는다. 행번호를 보이게 하기 위하여서는 ":set nu "를 입력한다.
텍스트를 가지고 있는 행들만이 번호가 매겨져 있다.
o 행열 단위로 움직이기
k(-)
/\
||
h(backspace) <----- -----> l(space bar)
||
\/
j(+)
--------------------------------------------------------
키 동작
--------------------------------------------------------
스페이스,l(엘) 오른쪽으로 한문자 위치
h 왼쪽으로 한문자
+ 다음 행의 첫번째 문자
-(하이픈) 이전행의 첫번째 문자
아래쪽 화살표,j 아래행의 같은 위치
위쪽 화살표,k 위쪽행의 같은 위치
o 화면을 옮기는 여러가지 방법
Ctrl-D (Down)반화면 아래
Ctrl-U (Up)반화면 위
Ctrl-F (Forward)앞으로 한화면
Ctrl-B (Backward)뒤로 한화면
G 작업 버퍼의 마지막 행
nG n번째 행으로 커서를 옮김(:n 과 동일)
Ctrl-G 현재 커서가 위치한 라인번호를 화일명과 함께 화면의 끝에 표시
Ctrl-E 한번에 한 행 아래로
Ctrl-Y 한번에 한 행 위로
z 현행을 화면의 가운데로
z- 현행을 화면의 제일 아래로
o 한 화면 안에서 cursor를 옮기는 방법
H HOME, 한 화면의 top line으로 옮긴다.
M MIDDLE, 한 화면의 중간으로 옮긴다.
L LAST, 한 화면의 마지막 line으로 옮긴다.
G GOTO, 화일의 마지막 line으로 옮긴다.
o 한 line 안에서 cursor를 옮기는 방법
w WORD, 한단어 앞으로
b BACKWARD, 한단어 뒤로
e END, 현재 cursor가 위치한 맨 뒤로
o zero, line의 맨 앞으로 (or ^)
$ end, line의 맨뒤로
* 텍스트 삽입과 추가
vi 프로그램은 화일에 텍스트를 삽입하는데 사용하는 명령을 여러개 가지고 있다.
이 모든 명령들은 삽입 모드에서 실행이 된다. 삽입 모드로 들어가기 위하여서는
먼저 텍스트를 삽입하고자 하는 위치에 커서를 위치시킨 다음 명령어 모드에서
i를 친다. 이제 커서의 위치에 텍스트를 입력할 준비가 되었다.
타이핑하는 문자들은 커서위치의 왼쪽 또는 앞쪽에 나타나면 오른쪽에 있는 모든
문자들은 밀리게 된다. 엔터를 누르는 것은 어떤 위치에서나 새로운 행을 만든다.
명령들의 리스트는 다음과 같다.
--------------------------------------------------------
키 행동
--------------------------------------------------------
i 커서 앞에 삽입
I 행의 맨 첫번째 문자 앞에 삽입
a 커서 뒤에 추가
A 행의 끝에 추가
o 아래 행을 한 행 아래로 밀고 한 행을 열기
O 아래행을 위로 보내고 한 행을 열기
---------------------------------------------------------
참고 : INSERT mode 를 만든는 모든 문자(i, a, o, r, c, s <대문자 포함>)
를 사용하는 경우 insert mode에서 입력 한 내용을 취소하고자
하면, ESC 를 누르고 undo를 수행하는 u를 입력하면 된다.
* 텍스트 삭제
vi 에디터는 삭제에 관한 모든 명령을 가지고 있다. 삭제 명령들은 명령어
모드에서 실행이 된다. 이 명령들에서 여러개의 문자나 단어들을 지우기 위해서
반복변수를 사용할 수 있다.
반복변수는 d 다음 w(word; 단어)나 b (characters, backward) 앞에 온다. 예를
들면 d4w를 입력하면 다음의 네 워드를 삭제한다. 삭제 명령(delete)를 실행한
다음에 vi는 명령어 모드에 놓여 있게 된다. 앞에서 설명한 바와 같이 u
(undo)명령은 삭제한 것을 되살리는데 아주 유용하다.
다음은 vi 에디터에서 사용하는 삭제 명령들이다.
:
--------------------------------------------------------
명령 삭제
--------------------------------------------------------
x 커서가 있는 위치의 문자
X 커서 앞에 있는 문자
dd 현재 커서가 위치한 행
ndd n 행을 삭제 하고 보이지 않는 buffer에 저장
(i.e., 10dd deletes 10 lines)
dunit unit으로 정해준 단위에 대한 텍스트 unit
앞에 숫자를 넣어서 하나 이상의 단위를 지
운다. 예를 들면 d5b는 뒤로 다섯 문자를 지
운다.
dw 문자 하나를 삭제
D 커서가 있는 곳에서 부터 행 끝 까지 삭제
d Enter 현재의 행과 다음 행 - 두행
dG 화일의 끝까지
dlG 화일의 처음까지
---------------------------------------------------------
Deleting :
* 텍스트 교체
vi 에디터에서는 텍스트를 덮어 쓰기 할 수 있어서 삭제를 하고서 다시 새로운
텍스트를 입력할 필요가 없다. r 은 교체 명령으로서 커서가 위치한 곳의 문자를
교체하며 R은 Esc를 누를 때까지 문자들을 교체한다.
--------------------------------------------------------
명령 삭제
--------------------------------------------------------
r - REPLACE, 한 문자만을 대치 (does not require ESC)
R - REPLACE, ESC 키가 입력될때 까지 대치
cw - CHANGE word, cursor가 위치한 곳의 단어 끝까지 대치
(cnw - change n number of words)
C - CHANGE, cursor가 위치한 곳에서 line 끝까지 대치
u - UNDOES, 마지막 명령의 취소
U - UNDOES, line전체를 원 상태로 복구
--------------------------------------------------------
* 두개의 행을 합치기
vi 프로그램은 J(join) 명령을 사용하여서 짧은 행을 합쳐서 긴 행으로 만들 수
있다. 두개의 행을 합치기 위하여 먼저 커 서를 첫번째 행의 아무 곳에나
위치한다, 그리고 나서 J를 누 르면 아래의 다음 행이 합쳐진다. 이 명령에서도
마찬가지로 반복명령을 사용할 수 있다.
* 텍스트 찾기
vi 프로그램은 지정하는 문자열을 찾을 수 있는 기능이 있다. 찾기 명령은 찾는
패턴을 지정할 수 있다. 찾고자 하는 문자열이 발견되면 변경을 하고서 같은
현재의 검색하는 문자열을 계속해서 또 찾을 수 있다. 이 명령은 또한 커서가
위치한 곳으로 부터 화일의 끝 방향(앞으로)으로 찾기를 할 수 도 있고 화일의
처음으로(뒤로)찾기를 할 수도 있다. 그러므로 화일의 중간에서 시작을 하면 화일
전체를 커버하지 않는다.
다음은 vi에서 사용하는 찾기 명령들이다.
--------------------------------------------------------
명령 결과
--------------------------------------------------------
/pattern 커서 위치로부터 'pattern' 이라는 글자를 앞으로 찾기
?pattern 커서 위치로부터 'pattern' 이라는 글자를 뒤로 찾기
n 이전에 검색에서 입력했던 패턴을 같은 방향으로 다시 찾기
N 이전에 검색에서 입력했던 패턴을 반대 방향으로 다시 찾기
--------------------------------------------------------
* 텍스트 찾기와 바꾸기
vi 에디터는 찾기와 바꾸기를 하는 강력한 툴을 제공한다. 여러번 잘못 입력한
단어와 같은 것을 한번의 명령으로 모두 새로운 단어로 바꾸기를 할 수 있다.
바꾸기 명령 신택스는 다음과 같다.
:%s/old_pattern/new_pattern/
일단 바꾸기 명령이 입력이 되면 vi는 주어진 패턴을 화일내의 행들을 차례대로
검사를 한다. 패턴이 발견이 되면 vi는 자동적으로 올드패턴을 지정한
새로운패턴으로 바꾼다. 예를 들면 어떤 화일에서 Internet이라는 단어를
Cyberspace로 바꾸고 싶다고 하자. :%s/Internet/Cyberspace 를 입력하고 엔터를
친다. 만약 Internet라는 문자열을 찾지 못하면 Substitute pattern match failed
라는 메시지를 보낸다.
* 버퍼저장 (Yanking ,Copying) 및 버퍼내용 입력 (Putting)
Y YANKS (copies) line을 사용자가 보이지 않는 buffer에 저장
nY YANKS n , n line을 사용자가 보이지 않는 buffer에 저장
p PUTS, cursor가 위치한 다음 line에 보이지 않는 buffer의
내용을 삽입
P PUTS, cursor가 위치한 앞 line에 보이지 않는 buffer의
내용을 삽입
xp cursor 가 위치한 문자와 다음 문자를 교환
* 전체의 특정 문자열 변경(Global replacement)
:1,$s/string1/string2/g
1 line부터 끝까지 string1 를 string2 로 대치
e.g., :1,$s/sun/SUN/g
* 전체의 특정 문자열 지우기(Global delete)
:g/pattern/d
1 line부터 끝까지 pattern 을 제거
e.g., :g/###/d (to delete lines inserted by cc file.c | & error-v)
* 특정외부 화일내용의 삽입
:r file2 cursor가 위치한 다음 line에 file2를 삽입
* 기타 명령어
:! cmd editor안에서 shell command를 수행 하고자 할때
~ (tilde or 'wavy'), 대문자를 소문자로 소문자를 대문자로 교환
% 한 line안에서 (,),{,},[,]를 검색
mx 문자 x에 현재 위치를 표시
d'x 문자 x에 표시된 위치 부터 현재 cursor 위치 까지 삭제
^V allows for insertion of control characters (e.g., ^L)
?string scan (/) backward for 'pattern'
:n,m w file n line에서 m line까지 내용을 file 이라는 이름으록
(e.g., 15,25 w file)
J JOINS, cusor가 있는 line과 다음 line을 join
:set ai editor 가 자동적으로 insert tabs을 삽입
:set list special characters 를 보여줌
(i.e., non-printable characters)
:set nows stop wraparound search
:set ts=n set tab stops to be other than the default (8)
:set wm=n set wrap margin (automatic carriage return insert at n)
example : setenv EXINIT 'set ai wm=8 ts=4|map F W|map @ :w^M:e#^M'
* 깨끗이 정리하기
화일에 많은 변경을 하고 나면 화면이 지저분한 명령어들로 가 득찰 수 있다.
이런 때는 리드로우잉을 사용한다. 리드로우잉이란 화면을 갱신하여서 변경
명령어들을 적용을 시키고 실행이 된 명령어들을 지우는 것이다. vi 에디터는
일정한 주기에 만 화면을 리드로우하기 때문에 Ctrl-L을 눌러서 화면을 청소 할
필요가 때때로 있을 것이다.
* 시스템 크래시로부터의 복구
vi를 사용하여서 화일을 편집하고 있는 도중에 시스템 크래시가 발생하면
크래시가 발생하기 전에 디스크에 저장되지 않은 내용들을 복구할 수 있다.
시스템이 복구되고 시스템 프람프트가 나타나면 "vi-r filename"을
입력한다.(여기에서 filename은 작업중이던 화일의 이름임) :w(write)를 바로
사용하여서 작업 버퍼에서 구조한 내용을 저장한다. 그러고 나서 편집 작업을
계속할 수 있다.
* vi 종료
새로운 화일을 만들거나 편집할 때 실제로는 메모리에서 임시적으로 할당을 해둔
작업버퍼(work buffer)에 저장이 되는 화일의 복사본을 가지고 작업을 하는
것이다.
vi를 사용하여 수 행한 모든 변경 내용들은 vi에게 그 화일을 디스크에 저장을
하라고 명령을 주기 전에는 단지 버퍼에 있는 화일에만 적용이 된 것이다. 다시
말해서 저장을 하기전까지는 작업한 내용이 원래의 화일에는 아무런 영향을 주지
않는 것이다.
작업 버퍼에 있는 내용을 저장하지 않으면 지금까지 한 모든 변경을 내버리고
vi를 종료할 수 있다. vi를 종료하기 위하여서 명령어 모드에 있어야 한다. 작업
도중에 ":w(write)"를 자주 사용하여서 시스템 크래시가 발생하였을 경우에
작업한 내용을 잃어 버리지 않도록 하는 것이 바람직하다.
---------------------------------------------------------
명령 행동
---------------------------------------------------------
ZZ 변경한 내용을 화일에 저장하고 vi를 종료
:wq ZZ과 동일
:x 화일을 저장하고 종료
:w 버퍼의 내용을 화일에 저장을 하지만 종료하
지는 않음.
:w filename 작업한 내용을 새로운 화일에 저장하고 같은
화일의 편집을 계속. 만약 vi를 화일이름을
지정하지 않고 시작하였다면 이 이름이 편집
이 되는 화일이름으로 됨.
:q! 저장하지 않고 vi를 종료
:q 만약 아무런 변경도 하지 않았으면 종료하고
그렇지 않으면 " No write since last
change (:quit! overrides)"( 변경후 저장이
되지 않았음) 이라는 메시지가 나옴.
---------------------------------------------------------
----------------------------------------------------------------------------
:
vi 명령 목록
* 시작 명령
vi file-name 화일 열기 또는 작성
vi +18 file-name 18번째 행으로 화일 열기
vi +/"star" file-name "star"라는 단어의 첫번째 발생으로 화일 열기
vi -r file-name 손상된 화일 복구
view file-name 일기 전용 화일 열기
* 커서 명령
h 왼쪽으로 이동
j 아래로 이동
k 위로 이동
l 오른쪽으로 이동
w 한단어 오른쪽으로 이동
W 한단어 오른쪽으로 이동(past punctuation)
b 한단어 왼쪽으로 이동
B 한던어 왼쪽으로 이동(past punctuation)
Retuen 한행 아래로 이동
Back Space 한문자 왼쪽으로 이동
Space Bar 한문자 오른쪽으로 이동
H 화면의 맨 위로 이동
M 화면의 중간으로 이동
L 화면의 맨 아래로 이동
Ctrl-F 한 화면 앞으로 이동
Ctrl-D 반 화면 앞으로 이동
Ctrl-B 한 화면 뒤로 이동
Ctrl-U 반 화면 뒤로 이동
* 문자와 행 삽입
a 커서의 오른쪽에 문자 삽입
A 커서가 있는 행의 끝에 문자 삽입
i 커서의 왼쩍에 문자 삽입
I 커서가 있는 행의 맨 앞에 문자 삽입
o 커서의 아래에 새로운 행 삽입
O 커서의 위레 새로운 행 삽입
* 텍스트 변경
cw 단어(또는 커서 오른쪽의 단어의 일부) 변경
cc 한 행 변경
C 커서 오른쪽의 행 일부 변경
s 커서가 위치한 문자영 대체
r 커서가 위치한 한 문자를 다른 문자로 대체
r-Return 행 분리
J 현재 행과 아래 행 결합
xp 커서가 위치한 문자와 오른쪽에 있는 문자 교환
~ 문자형(대문자, 소문자) 변경
u 이전 명령 취소
U 행 변경사항 취소
:u 이전의 최종 행 취소
* 텍스트 삭제
x 한 문자 삭제
dw 단어(또는 커서 오른쪽의 단어 일부) 변경
dd 한 행 삭제
p yank 되거나 삭제된 행을 현재행 아래에 삽입
P yank 되거나 삭제된 행을 현재행 위에 삽입
:1,2 co 3 1-2행을 3행 다음으로 복사
:4,5 m 6 4-5행을 6행 다음으로 이동
* 행 번호 설정
:set nu 행 번호 표시
:set nonu 행 번호 숨기기
* 행 찾기
G 화일의 마지막 행으로 가기
21G 21번째 행으로 가기
* 탐색 및 대체
/string/ 원하는 string 탐색
?string? 원하는 string 을 찾기위해 역방향으로 탐색
n string의 다음 발생 찾기
:/search-string/s// search-string 탐색 후 replace-string으로 대체
replace-string/
:/search-string/s// search-string 탐색 후 확인하고 replace-string으로 대체
replace-string/gc
* 화면 정리
Ctrl-L 불필요한 화면 내용 제거
* 다른 화일의 내용 삽입
:r file-name 커서 다음에 화일의 내용을 읽어들임
:30 r file-name 30번째 행의 다음에 화일의 내용을 읽어서 삽입
* 화일 보관 및 종료
:w 변경사항 보관
:w file-name file-name의 화일에 기록
:wq 변경사항 보관후 vi 종료
ZZ 변경사항 보관후 vi 종료
:q! 변경사항을 보관하지 않고 vi 종료
----------------------------------------------------------------------------
vi 관련 참고 자료 및 사이트
* vi 사용법(SPARCS@KAIST) 다국어 지원 Emacs(MULE) FAQ) [
http://www.meitetsu.co.jp/docs/mule/FAQ-Mule-jp.html or
ftp://etlport.etl.go.jp/pub/mule/READMEDIR]
|
|
|
|