vi 에디터

OS/리눅스 & 유닉스 2010. 5. 7. 13:01

파일 관련

:e <file> 파일 열기 (open)

:e 현재 편집 중인 파일 열기

:w 파일 저장 (save)

:w <file> 다른 이름으로 저장 (save as)

:w >> <file> 덧붙여 저장

ZZ 저장 후 종료

 

 이동키

 분류 키와 설명  VS(MS Visual Studio)키 
 문자 이동 hjkl  ←↑↓→
 단어 이동

wW

bB

eE 

Ctrl + →

Ctrl + ←

 

 행내 이동

0 또는 ^

Home

End 

 화면내 수직 이동

H   커서를 맨 윗행으로

M  커서를 중간 행으로

L    커서를 맨 아래 행으로

Ctrl + Home

 

 

 행간 이동

+  다음 행의 첫 글자로

- 위 행의 첫 글자로

 
 문단 이동 (){}   
 화면 이동

Ctrl+f   한 화면 아래로

Ctrl+b   한 화면 위로

Ctrl+d   반 화면 아래로

Ctrl+u   반 화면 위로

PgDn

PdUp

 

 

 Go

nG 또는 :n   n행으로

gg (vim)

G 맨 마지막 행으로 

Ctrl+g 

Ctrl + Home

Ctrl + End 

 현재행 자체 이동

z<CR>  현재 행을 화면 맨 위로

z.         현재 행을 화면 중앙으로

z-         현재 행을 화면 맨 아래로

 

 

 입력

aAiIoO

s 현재 글자 지우고 입력 (x i와 동일 효과)

cc 한 행을 지우고 입력 (dd O와 동일 효과)

 

 삭제

문자 삭제

    x 또는 dl

    X 또는 dh

단어 삭제

    dw 단어 삭제

행내 삭제

    d0  행 앞까지 삭제

    D 또는 d$   행 끝까지 삭제

행삭제

    dd 현재 행 삭제

    dj 현재 행+아래 행 2행 삭제

    dk 현재 행+위 행 2행 삭제

 

 vi 레지스터

  vi는 총 17개의 레지스터를 가지고 있는데 편집 중 내용을 지우면 그 내용은 "1 레지스터에 저장된다. 그리고 다시 삭제를 하면 "1 레지스터는 "2 레지스터로 이동하고 "1 레지스터에 새로 지운 내용이 저장된다. 이런 레지스터는 "1 ~ "9 이며 9개 공간을 가진 Queue와 같은 역할을 하는 셈이다. 레지스터를 보려면 :reg 를 실행한다.

 

    :reg  (vim 명령)

 

  그리고 특수 레지스터 8개를 포함해 총 17개의 레지스터를 가진다. 레지스터 이름은 "뒤에 한 문자가 오는 형식을 가지며 모든 레지스터의 역할은 아래와 같다.

 

"" 바로 이전에 삭제되거나 복사된 내용이 저장된다. "0 이나 "1 레지스터와 내용물이 동일하다.

"0 복사(yank)한 내용이 저장된다.

"1 ~ "9 삭제된 내용이 저장된다.

". 이제까지 타이핑한 내용

"% 현재 편집하는 파일이름

"/ 가장 최근에 검색한 문자열

"-

": 가장 최근의 ex 명령 (:를 누르고 내린 명령)

"#

 

 블록 설정 

v 키를 누른 후 커서 이동: 역상으로 블록이 설정된다.(vim)

Ctrl + v 키를 누른 후 커서 이동: 직사각 형태로 블록이 설정된다.(vim)

 

<블록 명령>

~   대소문자 전환             d   삭제             y    복사              c     치환

>   행 앞에 탭 삽입           <   행 앞에 탭 삭제                        J     라인 합침

n> n개의 탭 삽입             n<  n개의 탭 삭제                          

:    선택된 영역에 대한 ex명령                    U    대문자로       u     소문자로

 

 되돌리기

u        방금한 작업 취소

Ctrl+R  작업 되돌리기 (윈도의 Ctrl+Z)

 

 문자열 검색

/[패턴]    아래로 검색

?[패턴]    위로 검색

특정 '단어' 위에서 *     /'단어' 검색 수행  (vim)

특정 '단어' 위에서 #     ?'단어' 검색 수행  (vim)

 

 문자열 바꾸기

:[범위]/[매칭 문자열][치환 문자열]/[행 범위]

 

[범위]

  s       현재 행

  %s    문서 전체

  n,ms  n행과 m행 사이

  -n,+m 현재 행의 위로 n행, 아래로 m행 사이

 

[매칭 문자열]

  vi의 정규표현식 

일반 정규식과 약간 차이가 있으며 grep에서도 사용가능하다.

 

^  행의 첫문자        $ 행의 끝      [ ]  []사이의 문자중 하나    \+ 1번 이상 반복   *  0번 이상 반복

\{min,max\}  min이상 max이하 반복                                .  임의 한 문자       \|  OR

\< 단어 시작        \> 단어 끝    \n 개행 문자                     \t  탭 문자

 

  POSIX 문자 클래스 (VIM)

[:문자클래스명:]으로 표시하고 vim에서 사용할 때는 [[:문자클래스명:]]으로 표현한다.

 

    alnum   알파벳과 숫자[A-Za-z0-9]    alpha  알파벳[A-Za-z0-9]    cntrl    제어문자

    blank    탭과 공백 문자                     digit    숫자[0-9]                 xdigit   16진수

    graph   제어 문자와 공백 문자를 제외한 문자  

    lower    소문자                                upper  대문자                     print     출력가능한 문자

    punct    graph 문자중 alnum을 제외한 문자                                  

    space  화이트 스페이스  (공백, 리턴, 탭, 수직 탭,..)

 

  vim의 확장 정규 표현식

    \한 문자 로 표시하며 편집기에 보다 충실한 표현식이다. POSIX 문자 클래스보다 간단하게 표현할 수 있다.

 

    i    변수명에 사용되는 문자들[_0-9A-Za-z]          I    i와 같으나 숫자 제외

    k    키워드로 사용하는 문자[_\.\-0-9A-Za-z]    K    k와 같으나 숫자 제외

    f    파일 이름으로 사용하는 문자                         F    f와 같으나 숫자 제외

    p    프린트 가능한 문자                                     P    p와 같으나 숫자 제외

    s    whitespace  문자 (공백과 탭)                      S    non-whitespace

    d    숫자[0-9]                                                 D    숫자가 아닌 문자[^0-9]

    x    16진수 숫자                                               X    16진수가 아닌 문자

    o    8진수 숫자                                                O    8진수가 아닌 문자

    w   숫자와 알파벳                                            W    w제외한 문자

    h    알파벳과 -                                                H    h제외한 문자

    a    알파벳                                                      A     a제외한 문자

    l    소문자                                                       L     l제외한 문자

    u    대문자                                                      U     u제외한 문자

    e    ESC키    t     탭키    r    리턴    b    백스페이스    n    개행

 

[행 범위]

  g    행 전체에 걸쳐 바꾸기 실행

  c    사용자 확인(confirm)하면서 문자열 바꾸기

 

 여러 파일 동시 편집

vi file1 file2 file3

 

  파일 버퍼 명령(vim)

:buffers, :files, :ls    버퍼의 각 파일명 표시

:bN      N번 버퍼로 이동(다른 파일로 전환)

:bd[N]    N번 파일 삭제(N이 없으면 현재 버퍼)

:bw[N]    N번 파일 완전 삭제(N이 없으면 현재 버퍼)

:bp[N]    이전 버퍼로 이동(N이 있으면 N만큼 이동)

:bn[N]    다음 버퍼로 이동(N이 있으면 N만큼 이동)

:sb[N]:   창을 수평 분할하여 N번 버퍼 로드

:bf          첫 번째 버퍼로 이동

:bl          마지막 버퍼로 이동

:al          현재 열려 있는 모든 버퍼를 수평 분할 창에 로드

 

  다중 창 사용

새로운 가로분할 창 만들기: Ctrl+w n (컨트롤키를 누른채 w키를 누르고, 컨트롤키를 뗀 후 n키)

파일을 열면서 창 만들기: 커서를 헤더파일 등에 놓고 Ctrl+w f

창간 이동: Ctrl+ww (컨트롤키를 누른채 w키 두 번)

창 닫기: Ctrl+w q (또는 vi커맨드로 종료)

현재의 파일을 두 개의 창으로 보기: Ctrl+w s (서로 다른 행을 비교할 때 편리하다.) 

수직 분할: Ctrl+w v

창 크기 변경(현재 창을 최대로): Ctrl+w _(수평 분할시), Ctrl+w |(수직 분할시)

창 크기 변경(균등 분할 상태로): Ctrl+w =

 

  키 매핑

:map 명령을 실행하거나 .vimrc 파일 내 일련의 명령키를 단축 키로 매핑할 수 있다.

 

.vimrc파일 작성 방법 (map명령 구조)

map `1        :!clear;ls -l<cr>         "현재 디렉토리내 파일 출력

     단축키   매핑 내용   엔터표시              주석

 

위 파일을 사용자 디레토리에 두고 vim을 실행 후 `1을 입력하면 현재 디렉토리내 파일을 표시한다. 매핑내용 중 "<cr>" 문자열은 엔터키를 표시한다.

 

  멀티 클립보드(네임 레지스터)

윈도는 하나의 클립보드로 Ctrl+C, Ctrl+V를 수행하는데 vim은 name register라는 것으로 a~z까지의 버퍼를 사용해서 26개의 문자열을 저장 후 붙여넣기할 수 있다.

 

- 네임 레지스터에 복사: "[a-z][yank 명령]   ex) 현재부터 5행을 a레지스터에 복사: "a5yy

- 네임 레지스터를 붙여넣기: "[a-z][paste 명령] ex) a레지스터를 붙여넣기: "ap

 

  매크로

매크로는 네임 레지스터를 이용한다. 일련의 키보드 입력을 네임 레지스터에 저장 후 호출 사용한다.

 

- 매크로 작성 시작: q[a-z]  아래 명령줄에 recording이라는 표시가 생긴다.

     ex) f 레지스터에 매크로 작성 시작: qf

- 매크로 작성 완료: q

- 매크로 실행: n@[a-z]  n은 반복 횟수를 나타낸다.

     ex) f레지스터의 매크로 실행: @f

     ex) f레지스터의 매크로를 3번 실행: 3@f

 

예제) C 주석문 매크로 설정

  vi에디터로 C언어를 편집할 때 특히 불편할 때가 주석을 입력할 때다.

/* */를 입력하려면 ESC + I + /* + ESC + A + */ + ESC 키를 입력해야 하므로 무려 9번을 입력해야 한다. Visual Studio에서는 단지 Ctrl+K,C 입력하므로 상대적으로 매우 불편하다. 이 점을 개선하기 위해 매크로를 사용하면 된다. 주석(Comment)이므로 qc를 입력하여 c레지스터에 저장하면 기억이 편할 것이다.

 

  마킹

Visual Studio를 사용한 적이 있다면 Ctrl+K,K로 현재 위치를 기억하고, 다른 부분 편집 중 Ctrl+K,N으로 마킹 위치로 곧바로 가본 경험이 있을 것이다. vim은 이를 넘어 다른 파일에도 마킹할 수 있는 기능을 제공한다.

 

마킹하기: m[a-zA-Z]   소문자:현재 파일 내 마킹.   대문자: 다른 파일간 마킹 가능   ex) ma, mB

마킹된 행의 커서 위치로 가기: '[a-zA-Z]    ex) 'a

마킹된 행의 맨 앞 위치로 가기: `[a-zA-Z]    ex) `a

바로 전에 커서가 있던 행의 맨 앞으로 가기: ''

바로 전에 커서가 있던 행의 위치로 가기: ``

vim이 현재 파일을 닫기 전 커서가 있던 행의 맨 앞으로 가기: '"

vim이 현재 파일을 닫기 전 커서가 있던 행의 위치로 가기: `"

 

  기타 (vim)

- 매칭되는 괄호 찾기: '{' 또는 '}' 기호위체 커서를 두고 %키를 누른다.

- 함수 폴딩

   함수 접기: 함수의 '{'에서 '}'까지 블럭을 잡고 zf

   함수 펼치기: 커서를 블럭위에 두고 zo

   ※ '{'위에서 v]} 키를 누르면 자동으로 상대 '}'까지 블럭을 잡는다. 보통 .vimrc 파일내 키 매핑을

       지정해 단축키로 많이 사용한다.

- 함수 참조

  함수 선언 보기: 함수가 사용된 부분에 커서를 두고 [i 를 누르면 하단에 프로토타입이 출력된다.

  함수 정의 부분으로 이동: 커서를 위치하고 gd 를 누른다. 파일내 내부 함수만 가능하다.

- auto indent

  블럭 설정 후 = 키. 인터넷 등에서 소스파일을 복사해 붙였을 경우 유용하다.

- 코드 자동 완성

  함수나 변수의 일부분 타이핑 후 Ctrl+p 또는 Ctrl+n

  p또는 n은 자동 완성을 결정할 단어를 찾는 방향이다. 보통 p가 많이 사용된다.

[출처] VI 에디터|작성자 괄목상대

'OS > 리눅스 & 유닉스' 카테고리의 다른 글

crontab(2)  (0) 2010.05.18
crontab(1)  (0) 2010.05.18
vi 메뉴얼  (0) 2010.04.22
grep 명령어  (0) 2010.04.20
리눅스 명령어  (0) 2010.04.20
: