vi 편집기 사용법 0



vi 편집기

unix의 일반 text 모드에서 사용되는 편집기에는 vi, emacs, pico 등이 있다.

특징

pico 편집기는 쉽고 단순하다. 간단한 편집 유틸리티 정도로 볼수 있음.

vi - 유닉스에서 가장 널리 사용되는 대중적인 편집기 *. 위키백과사전에 설명되어 있는 vi

emacs - 강력한 편집 기능 제공, vi 편집기에 비하면 더 복잡하고 크다.

* 레드헷을 포함한 대부분의 리눅스에서 기본적으로 사용되는 vi 편집기는 vi 편집기의 기능을 좀 더 향상 시킨
vim(vi improved) 이라는 편집기가 vi 라는 이름으로 사용되고 있으며 본래의 vi 편집기에 비해 사용하기 편한 좀
더 많은 기능을 제공한다.

vi 편집기 mode

vi 편집기 명령어는 크게 세 가지 모드로 나뉘어 질수 있다.

명령 모드 : vi 편집기의 기본모드.( 입력 상태이면 편집 명령어 사용 불가능)

입력모드 : i,I,a,A,o.O (입력모드 상태가 아니면 편집기 입력이 불가능)

확장모드(ex 모드, 또는 last line 모드라고 부른다.? - 왼쪽 하단에 명령어가 표시된다)

각 모드에서 사용하는 명령어는 정해져 있으며 입력모드 명령어가 가장 적다(i,I,a,A,o.O)

확장 모드 명령어는 명령어를 입력할 때 대부분 먼저 ‘:’을 붙이고 명령어를 입력함으로써

다른 모드 명령어와 구분이 된다.

각 모드 사이의 전환

명령어 모드 => 입력모드 전환 ; 입력모드 명령어중 하나를 사용.

입력모드 => 명령모드전환 ; esc 키 입력

입력모드 => 확장모드 ; 명령모드로 전환 후 확장모드 명령어 입력.

vi 편집기 명령어

커서 이동 명령

 j(↓) 아래로 이동

 k(↑) 위로 이동

 h(←) 왼쪽으로 이동

 l (→) 오른쪽으로 이동

 G(go) 제일 끝줄로 이동

 nG n번째 행으로 이동.

 ^b(back) 한 화면 위로 이동

 ^f(forward) 한 화면 아래로 이동

 ^u(up) 반 화면 위로 이동

 ^d(down) 반 화면 아래로 이동

 e 한 단어 뒤로 이동

 한 단어 앞으로 이동

 줄의 제일 처음부터 이동

 $ 줄의 제일 끝으로 이동

*. vi 편집기 명령어중 반복할 수 있는 일부 명령어 앞에? n(숫자)을 붙일 수 있다.
  이때 n 의 의미는 n 뒤의 명령을 n 번 반복하라는 의미이다.
ex) 3dd => dd 명령을 세 번 반복하라. => 세 줄이 삭제된다.

입력 명령어

 i 현재 커서 위치에 삽입(커서 위치에 문자를 오른쪽으로 한 칸 밀고 삽입)

 a 현재 커서 위치 다음에 삽입 (a == "l + i")

 o 현재 커서가 위치한 줄의 아랫줄에 삽입(o == "$ + a + Enter")

 I현재 커서가 위치한 줄의 맨 앞에 삽입 (I == "0 + i")

 A 현재 커서가 위치한 줄의 맨 뒤에 삽입 (A == "$ + a")

 O 현재 커서가 위치한 줄의 바로 위에 삽입

지우기 명령어

 x 현재 커서 위치의 문자를 지운다. (nx x를 n번 반복)

 dd현재 커서가 위치한 줄을 지운다. (ndd dd를 n번 반복)

 dw 현재 커서가 위치한 단어를 지운다.

 d$현재 커서가 위치한 곳부터 그 행의 끝까지를 지운다.

 dG 현재 커서가 위치한 행부터 편집문서의 마지막 줄까지 삭제한다.

*. 삭제한 내용은 바로 지워지지 않고 버퍼에 저장되므로 붙여넣기 하거나 취소 할 수 있다.

* 리눅스에 서 사용하는 vim 편집기는 undo를 여러 번 수행할 수 있다

복사하기와 붙이기

 yy(=Y) 현재 커서가 위치한 줄을 버퍼에 복사한다.

(nyy => 현재 커서가 위치한 곳부터 아래로 n 라인을 버퍼에 복사한다)

yw 현재 커서가 위치한 단어를 버퍼에 복사한다.

(nyw => 현재 커서가 위치한 단어부터 오른쪽으로 n개의 단어를 버퍼에 복사한다)

 p 버퍼에 들어 있는 내용을 현재 커서가 위치한 줄의 아래에 붙인다.

 P버퍼에 들어 있는 내용을 현재 커서가 위치한 줄의 위에 붙인다.?  "xyy x라는 버퍼에 라인을 카피한다. (버퍼에 이름을 붙여서 사용하면 편집기가 열려 있는 동안은?버퍼의 내용을 잊어버리지 않는다.)

치환

 r 현재 위치의 문자를 한개만 바꾼다.

 현재 커서위치에서 오른쪽으로 esc 키를 입력할 때 까지 바꾼다.

 cw 현재 위치의 단어를 바꾼다.

 cc현재 커서가 위치한 줄을 바꾼다.

 현재 커서가 위치한 곳으로부터 줄의 끝까지 바꾼다.

 ~ 대소문자를 서로 바꾼다.

기타 명령어

현재 줄과 다음 줄을 합한다.

^g 현재 편집하고 있는 파일의 정보를 보여준다.

u 방금 한 명령을 취소한다.

^r (=redo) 취소한 명령을 다시 취소 (vim)

U 현재 커서가 위치한 줄에 대한 편집 명령을 취소한다.

방금한 명령을 되풀이 한다.

^l  화면 refresh

 

확장모드 명령어

 :! shell command  ; 편집기를 벗어나지 않은 상태로 shell command 를 실행한다.

 :args 현재 편집하는 파일명을 보여준다.

 :w 편집하는 내용을 덮어쓰기로 저장한다.

 :w filename 현재 내용을 지정된 파일 이름으로 저장한다.

 :w! 강제로 덮어쓰기를 한다.

 :wq 현재 편집하는 내용을 저장하고 종료한다.

 :wq! 현재 편집하는 내용을 강제로 저장하고 종료한다.

 :q! 강제로 종료한다.

 :e filename ;새로운 파일을 편집한다.

 :e! 현재 파일을 저장하지 않고 편집이전의 상태에서 새로 작성한다.

 :r filename 현재 커서위치 다음에 파일을 끼워 넣는다.

 :14 r filename 14행 이후에 파일을 읽어 삽입한다.

 :n1,n2d n1번째 행에서 n2번째 행까지를 지운다.

 :n1,n2 w filename n1에서 n2행까지를 filename에 저장한다.

 :3,$d 3번째 행에서 끝항까지 지운다.

 :set 여러 가지 환경 변수를 설정한다. set all하면 현재 설정되어 있는 환경 변수를 보여준다.

 :set nu ; 라인 넘버 붙이기 (<=> set nonu)

 :set showmode ; 현재 명령 상태를 화면 하단에 표시

 :set bg=dark 편집기 글자색을 밝게 표시 (vim)

 :set bg=light 편집기 글자색을 어둡게(진하게) 표시 (vim)

 :set ai 자동 들여쓰기

 :set ic 문자열 검색시 대소문자 구분 안한다.

 :ab문자 문자열? ; 문자열을 문자열 앞에 있는 문자로 줄여 사용할 수 있음.(아래아한글의 상용구 기능에 해당)

 :set ts=n 기본 tab size를 n column 으로 한다.

 :sp 편집기 화면 수평 분할(화면을 수평으로 여러 개 분할해서 사용할 때 쓴다) (vim)

 :^ww 분할된 화면으로 커서 이동. (vim)

문자열검색

 /패턴 ; 패턴에 해당하는 내용을 현재 커서위치로 부터 오른쪽에서 그리고 아래쪽으로 찾는다.

 n 정방향 다음 찾기 (현재 진행방향으로 => 아래쪽으로)

 N 역방향 다음 찾기 (현재 진행 방향 반대쪽으로 => 위쪽으로)

 ? 패턴 패턴에 해당하는 내용을 현재 커서위치로 부터 왼쪽에서 그리고 위쪽으로 찾는다.

문자열 치환

 :n1,n2s/serch/replace/g ( => 시작행번호, 마지막행번호s/찾을패턴/바꿀패턴/옵션 )

(g 는 global의 의미 해당 라인의 문자열을 전부 치환, g옵션이 생략될 경우에는 한 라인에서 치환해야할 패턴이
여러 개일 경우 맨 왼쪽 에  있는 것만 치환됨.)

*. 옵션에 i 가 사용되면 intractive 모드로 명령어 실행, 바꾸기 전에 물어본다.
* . 키보드에 있는 'Del', 'PageUp','Home','End' 및 방향키는 vi 편집기에서는 사용되지 않는다.
(vi 편집기 명령에 사용되는 키가 아니므로 시스템 환경에 따라서 될 수도 있고 안될 수도 있음)

vi 환경설정.

환경설정 파일을 만들면 자주 사용되는 vi 명령을 디폴트값으로 사용 할 수 있다.
환경설정파일은 확장 모드 명령어만 사용
위치 $HOME/.exrc 또는 .vimrc

설정 파일예

set nu(=set number)  : 라인번호를 붙임.

set ts=4 : tab 의 크기를 4칸으로 함

syn on(=syntax on) : syntax highlighting

set ai : 자동들여쓰기

set cindent : c 소스 코딩시 자동들여쓰기

set shiftwidth : 자동들여쓰기 간격

set showmode : 편집 상태를 화면 하단에 표시

set vb : visual beep (경고음을 시각적으로 표시)

set title : 제목표시줄에 현재 편집중인 파일명 표시

set ic(=ignorecase) : 문자열 검색 할 때 대/소문자 구분 안함

set bg=dark : 글자색을 밝게 표시되도록 한다.

*. 기타
매크로
qa 라고 하면 a 레지스터에 입력하는 모든 키가 순서대로 매크로로 저장이 된다. 매크로가 실행줄일때는 아래에 기록중이라는 메세지가 보인다. q 를 누르면 매크로 저장이 돤료된다.

매크로에 저장된 명령을 실행할때는 @a 라고 하면 된다. 반복실행할때는 5@a 이렇게 숫자를 앞에 붙여주면 된다.


** vi 명령어 기타 **

vim 또는 vi에서 , Tab 문자를 보려면
:set list
그러면 현재 문서의 모든 탭문자가 ^I 라는 기호로 나타난다.
그리고 라인끝에는 $ 문자가 표시된다.
탭문자를 보이지 않게 하려면
:set nolist

 


덧글

댓글 입력 영역