vi editor 단축키 모음

vi editor

 

vi editor 단축키 모음

 

차 례

전산학 및 실습 수업을 수강하는 학생은 표시가 되어 있는 부분은 꼭 보세요.


커서의 위치를 움직이는 명령(Move commands)

N에 *가 있는 경우 숫자를 사용할 수 있고, -의 경우 사용할 수 없다.

N

명령어

기능

*

h or ^H or <erase>

커서를 한칸(N칸) 왼쪽으로 이동시킨다.

*

j

커서를 한행(N행) 아래로 이동시킨다.

*

l or <sp>

커서를 한칸(N칸) 오른쪽으로 이동시킨다.

*

k or ^P

커서를 한행(N행) 위로 이동시킨다.

*

$

커서가 위치한 행(N번째 행)의 끝으로 이동한다.

-

^

커서가 위치한 행의 처음으로 이동한다.

*

+ or <enter>

다음행(N행 아래)의 처음으로 이동한다.

-

0

커서가 위치한 행의 처음으로 이동한다.

*

|

N번째 column으로 이동한다.

*

f<char>

오른쪽으로 N번째 char를 찾는다.

*

F<char>

왼쪽으로 N번째 char를 찾는다.

*

w

커서부터 오른쪽 N번째 단어의 첫부분.

*

W

커서부터 오른쪽 N번째 WORD(tab,space,linefeed 뒤에 있는 단어)의 첫부분.

*

b

커서부터 왼쪽 N번째 단어의 첫부분.

*

B

커서부터 왼쪽 N번째 WORD의 첫부분.

*

e

커서부터 오른쪽 N번째 단어의 끝부분.

*

E

커서부터 오른쪽 N번째 WORD의 끝부분.

*

G

커서부터 N번째 라인으로.(default 화일의 끝).

*

H

Screen의 위에서부터 N번째 라인으로.

*

L

Screen의 아래에서부터 N번째 라인으로.

-

M

Screen의 중간으로.

*

)

N개의 문장 뒤로.

*

(

N개의 문장 앞으로.

*

}

N개의 paragraphs 뒤로.

*

{

N개의 paragraphs 앞으로.

-

]]

뒤의 N번째 section으로(default 화일의 끝).

-

[[

앞의 N번째 section (default 화일의 처음).

-

`<a-z>

Mark한 곳으로.

-

'<a-z>

Mark가 있는 라인의 첫번째 CHAR로.

-

``

가장 최근의 jump(예를 들어 `/'나 `G'를 사용한 jump)를 하기 직전의 위치로.

-

''

가장 최근의 jump(예를 들어 `/'나 `G'를 사용한 jump)를 하기 직전의 라인의 첫 CHAR로.

-

/<문자열>

다음으로 <문자열>이 나오는 위치로.

-

?<문자열>

/를 반대방향으로 수행.

-

n

가장 최근의 `/'|`?' 를 반복한다.

-

N

n을 반대방향으로의 수행.

-

%

Braket( { } or [ ] or ( ) )을 찾고 그것의 match를(괄호가 닫힌 쌍)찾는다.


찾기(Searching)

/<문자열>

다음으로 <문자열>이 나오는 위치로.

?<문자열>

/를 반대방향으로 수행.

:[x,y]g/<문자열>/<명령어>

x에서 y까지 <문자열>을 찾고(globally) <명령어>를 실행한다.

:[x,y]v/<문자열>/<명령어>

x에서 y까지 문자열과 match되지 않는 라인에 <명령어>를 실행한다.


취소(Undoing changes)

u

가장 최근에 한 작업을 취소한다.

U

만약 작업을 한 라인에서 벗어나지 않았다면, 그 라인에서 한 작업들을 모두 취소한다.

:q!

Save하지 않고 vi를 끝낸다.

:e!

현재 편집중인 화일을 버리고 다시 편집한다.


문자열 삽입(Appending text)

1. <esc>를 누르면 삽입 작업이 끝난다.
2. N에 *가 있는 경우 숫자를 사용할 수 있고, -의 경우 사용할 수 없다.

*

a

커서의 오른쪽에 쓰기 시작한다.

*

A

커서가 위치한 라인의 맨 끝에 쓰기 시작한다.

*

i

커서의 위치부터 쓰기 시작한다.

*

I

커서가 위치한 라인의 맨 처음부터 쓰기 시작한다.

*

o

커서가 위치한 라인 밑에 새로운 라인을 만들고 거기에 쓰기 시작한다.

*

O

커서가 위치한 라인 위에 새로운 라인을 만들고 거기에 쓰기 시작한다.

*

.

앞에 실행했던 명령을 N번 반복한다.


문자열 삭제(Deleting text)

지운 것은 모두 buffer에 저장할 수 있다. 일단 지우는 명령을 실행하기 전에 "를 치고 a-z 중간의 한 문자를 치면 지운 것이 그 문자에 해당하는 buffer에 저장되게 된다. 참고로 Undo buffer는 가장 최근에 바꾼 것만 저장하게 되고, 1-9에 해당하는 buffer는 가장 최근의 9라인을 지운 것을 저장하게 된다.

*

x

커서 오른쪽의 N개의 문자를 지운다.

*

X

커서 왼쪽의 N개의 문자를 지운다.

*

d<move>

커서가 위치한 곳에서부터 <move>로 인해 움직인 위치까지 지운다.

*

dd

커서의 위치로부터 밑으로 N개의 라인을 지운다.

-

D

커서의 위치로부터 오른쪽의 문자를 모두 지운다.

*

.

최근에 실행했던 명령을 N번 반복한다.


문자열 수정(Changing text)

<esc>를 누르면 바꾸는 작업이 끝난다.

*

r<char>

커서의 위치로부터 N개의 문자를 <char>로 바꾼다.

*

R

라인의 나머지를 덮어쓴다.

*

s

N개의 문자를 교체한다.

*

S

N개의 라인을 교체한다.

*

c<move>

커서의 위치로부터 <move>의 위치까지 바꾼다. 예를 들어 cw는 한 단어를 바꾸는 명령이다.

*

cc

N개의 라인을 바꾼다.

*

C

라인의 나머지 부분을 바꾼다.

-

~

대문자와 소문자를 각각 소문자와 대문자로 바꾼다.

*

J

N개의 라인을 연결한다.

*

.

가장 최근의 명령을 N번 반복한다.

-

&

가장 최근의 `ex'의 교체명령을 반복한다.

-

:[x,y]s/<p>/<r>/<f>

x번째 라인에서 y번째 라인까지 <p>의 문자열을 <r>이라는 문자열로 교체한다. <f>는 여러가지 옵션인데, c는 확인을 요하는 옵션이고 g는 무조건 교체하라는 옵션이다.


문자열 기억(yanking)

Yanking하기 전에 a-z, A-Z 까지의 문자중 하나를 친 후 yanking하는 경우 기억된 문자열이 각 문자에 해당하는 buffer에 저장된다. 그렇지 않은 경우 단순히 undo를 위한 buffer에 저장된다.

*

y<move>

커서의 위치로부터 <*><move>후 움직인 위치까지 저장한다.

*

yy

N개의 라인을 저장한다.

*

Y

yy와 같은 역할.

-

m<a-z>

커서의 위치를 문자로 마크한다.


저장, 다른 화일의 편집, vi를 끝내기

:q

Buffer가 변하지 않은 경우 vi를 끝낸다.

:q!

강제로 vi를 종료한다.

^Z

vi를 종료한다.

:w

화일에 저장한다.

:w <화일명>

<화일명>으로 저장한다.

:w >> <화일명>

Buffer의 내용을 <화일명>에 붙인다.

:w! <화일명>

편집하고 있는 화일을 <화일명>에 강제로 저장한다.

:x,y w <화일명>

x부터 y번째 라인의 내용을 <name>에 저장한다.

:wq

화일에 저장하고 vi를 끝낸다. 어떤 version에서는 저장이 제대로 되지 않는 경우도 있으므로 그 경우는 ZZ를 사용하면 된다.

ZZ

Buffer의 내용이 변한 경우 화일에 저장하고 vi를 끝낸다.

😡 [<file>]

ZZ와 같지만, <file>에 저장하고 끝낸다.

:x! [<file>]

`:w![<file>]' + `:q'.

:f <화일명>

현재 편집하고 있는 화일명을 <화일명>으로 바꾼다.

:cd [<dir>]

현재 작업하고 있는 디렉토리에서 <dir>로 바꾼다. (default는 홈 디렉토리이다.)

:cd! [<dir>]

cd와 같지만, 변화를 저장하지 않는다.

:e<화일명>

<화일명>으로 지정한 화일을 편집한다.

:e!<화일명>

현재 편집중인 변경된 화일을 버리고 <화일명>으로 지정한 화일을 편집한다.

:rew

최초의 화일로 돌아간다.

:rew!

현재 편집중인 변경된 화일을 버리고 최초의 화일로 돌아간다.

:n [<files>]

다음의 화일을 편집한다.

:n! [<files>]

현재 편집중인 변경된 화일을 버리고 다음의 화일을 편집한다.iting the current buffer.


Display 명령어

^G

화일명, 현재 라인의 위치, 전체 화일에 대한 상대적인 위치 등을 나타낸다.

^L

스크린을 새롭게 한다.(refresh)

[*]^E

커서는 자기 자리에 그대로 있고(화면의 바깥으로 나가지 않는 이상) 화면 전체가 밑에서 N라인 위로 이동한다.

[*]^Y

커서는 자기 자리에 그대로 있고 화면 전체가 위에서 N라인 밑으로 내려온다.

[*]^D

N라인 밑으로 scroll한다.(default: page의 반)

[*]^U

N라인 위로 scroll한다.(default : page의 반)

[*]^F

N 페이지 밑으로 간다.

[*]^B

N 페이지 위로 간다.


명령어와 문자열의 간단한 지정.(Mapping and abbreviation)

:map <생략형> <문자형>

<생략형>에 해당하는 문자(키보드의 키)에 대해 <문자형>에 해당하는 기능으로 변경한다. 예를 들어 :map V 'ap 라고 쓴다면 앞으로 명령모드에서 P라고 칠때마다 a에 해당하는 buffer를 붙이게 된다.(paste) 한가지 중요한 점은 만약 기존의 명령을 mapping하는 경우 기존의 명령보다 mapping한 것을 우선으로 취급하게 되므로 주의해야 한다.

:map

모든 mapping을 보여준다.

:unmap <문자열>

문자열에 해당하는 mapping을 취소한다.

:map! <생략형> <문자형>

Append 모드에서 <생략>을 입력하면 무조건 <문자형>으로 치환된다.

:map!

모든 append 모드에서의 mapping을 보여준다.

:unmap! <string>

Deprive <string> of its mapping (see `:unmap').

:ab <생략형> <문자형>

Append 모드에서 <생략형>을 입력한 후 ESC나 space, return키를 입력하면 <문자형>으로 전개된다.

:ab

모든 생략형을 보여준다.

:unab <string>

생략형을 취소한다.


다른 명령계통으로의 전환 및 shell 명령어의 사용.(Switch and shell commands)

Q

vi에서 ex 명령으로 전환한다.

:

ex명령어를 vi상에서 사용할 수 있게 한다.

:vi

ex 에서 vi로 전환한다.

:sh

잠시 shell환경으로 나간다. 다시 vi로 돌아오려면 exit를 치면 된다.

:[x,y]!<명령어>

x에서 y까지의 라인을 input으로 해서 shell의 <cmd>를 수행하여 그 output으로 대체한다.

:[x,y]!! [<args>]

가장 최근의 shell명령어를 수행하고 <args>를 붙인다.

[*]!<move><cmd>

<move>까지의 라인을 input으로 하여 shell의 <cmd>를 수행하고 그 output으로 대체한다.

[*]!<move>!<args>

<args>를 가장 최근의 <cmd> and execute it, using the lines described by the current <*><move>.

[*]!!<cmd>

N 라인을 shell의 <cmd>명령어의 input으로 하여 그 output으로 그 라인들을 대체한다.

:x,y w !<cmd>

x에서 y까지의 라인을 <cmd>의 input으로 한다. (w와 !사이에 space가 있는것에 주의.)

:r!<cmd>

<cmd>의 output을 새로운 라인에 붙인다.

:r <화일명>

<화일명>의 화일을 buffer에서 읽어들인다.


vi를 시작할 때.(option)

vi [<files>]

file의 첫 페이지에서부터 edit하기 시작한다.

앞서 설명했던 `:set'이나 `:map', `:ab' 등의 설정은 일단 vi를 종료하면 없어진다. 만약 이 설정이 매회 사용하는 것이라면 vi를 가동할 때 마다 이들 명령어를 입력하지 않으면 안된다. vi는 이들 설정을 홈 디렉토리의 `.exrc'라는 화일에 기술해 놓으면 가동시에 자동적으로 `.exrc'를 참조하여 set이나 map, ab등을 설정해 준다. .exrc에는 :이 필요없다. 다음의 예를 살펴보자.

        set ai aw nu    자동 인덴트, 자동쓰기, 행 번호의 지정.
        set ts=4        탭 정지를 4로 지정.
        map! PO POSTECH  PO라고 입력하면 자동적으로 POSTECH으로 변환.

이런 식으로 .exrc 화일을 만들면 된다. 만약 .exrc가 아닌 새로운 설정화일을 사용하려면, vi를 실행시킨 상태에서

    :so file

이라고 쓰면 된다. 간단한 설정의 경우라면 `vi +<cmd> file', 의 형태로 vi를 시작할 수 있다.

vi +x file

커서가 x번째 라인으로 위치한 상태에서 vi가 시작된다.

vi +/<문자열> file

<문자열>이 처음 나타나는 위치에서 vi가 시작된다.

vi -t <tag>

지정한 tag를 사용하여 vi가 시작된다.

가끔씩 시스템의 에러로 vi가 비정상적으로 종료할 경우가 있는데, 이때에는 `vi -r file'의 명령을 사용하여 잃어버린 데이타를 찾을 수 있다. 그냥 `vi -r'을 치면 복구할 수 있는 화일의 리스트가 나타난다. 그리고 text를 단순히 보기만 할 경우(no change) `view'를 사용하거나 `vi -R'을 사용해서 text를 볼 수 있다.


중요한 옵션들(The most important options)

ai

autoindent - Indent(단락구분)을 한다. 되돌가갈 때는 <Ctrl>+<d>

aw

autowrite - 자동적으로 화일을 쓰기 시작한다.

dir=<string>

directory - 임시 화일을 만들 디렉토리.(default /tmp)

eb

errorbells - 실수를 한 경우 Beeps 음을 울린다.(모든 터미날에서 되는 것은 아니다.

handtabs

vi의 단말 탭수를 설정한다.

ic

ignorecase - 정규표현에서 대문자, 소문자의 구별을 하지 않는다.

list

탭(<lf>), 행말(`$')을 표시한다.

mesg

vi가 발생하는 이외의 메시지도 화면에 표시한다.

nu

number - 행 번호를 표시한다.

readonly

편집 화일을 write 금지 상테에서 read한다. 예외로서, `w!'를 실행했을 경우는 강제적으로 write된다.

redraw

편집에서의 삭제, 삽입시에 적극적으로 화면을 재표시한다. noredraw(초기설정값)일 때에 삭제, 삽입을 하면 공백분은 @표 표시되며 재표시되지 않는다. redreaw로 설정할 때는 통신 속도가 빠른 상태가 아니면 재표시를 하기 위하여 반응이 둔해지므로 주의해야 한다.

remap

:map으로 치환된 문자/명령어를 :map에서 다시 다른 문자/명령어로 등록하는 것을 허가한다.

report

변경/삭제/대피에 의해 영향받았던 행수가 지정차를 초과하였을 경우, 화면 한단에 그 행수를 표시한다.

showmatch

대응하는 괄호끼리 커서를 뛰어넘는 `match 기능'을 ON으로 한다.

showmode

화면 우측 아래에 현재의 vi mode를 표시한다.

terse

에러 메시지를 약식 표시로 한다.

warm

편집에서 변경한 내용을 기록하지 않은 상태에서 `:!'로 시작되는 명령을 실행하였을 때에 `NO write since last change'라는 경고 메시지를 표시하도록 한다.

wrapscan

커서 위치에 관계 없이 버퍼 내 모두를 문자열 검색 대상으로 한다. now로 하였을 경우 문자열 검색은 현재의 커서 위치에서 최후의 문자까지 종료한다.

writeany

편집한 내용을 화일에 기록할 때의 vi에 의한 안전 체크를 해제한다.

scroll

<Ctrl>+<Ctrl> <Ctrl>+<u>로 스크롤할 행수를 설정한다.

tabstop

화면에 표시되는 외관상의 탭수를 설정한다.

wrapmargin

오른쪽 마진을 설정한다. 설정한 마진수를 초과하면 화면이 옆으로 밀리지 않고 리턴으로 개행된다. 0(초기설정치)를 설정하면 이 기능을 OFF로 한다.

paragraphs

편집 텍스트 중 단락의 구분을 나타내는 문자조를 설정한다. vi는 이것에 의해 설정된 문자로 둘러싸인 블록을 하나의 단락으로 인식하여 문자조의 사이를 }과 {으로 이동시킬 수 있다. 이 이동에서는 섹션으로 설정된 문자조도 단락으로 간주한다. Default의 설정에서는 .IP, .LP, .PP, .P, .LI, .pp, .lp, .ip, .bp 10개의 문자조가 설정되어 있다.

ections

paragraphs의 단락에 대해서 섹션은 절을 구획짓는 문자를 설정한다. 절 사이의 이동에는 [과 ]을 사용한다. 이 때 paragraph로 설정된 문자조를 단락으로 간주하지 않는다. Default로는 NH, .SH, .H, .HU, .us, .sh, .+c 의 7문자조가 설정되어 있다.


옵션의 세팅과 확인

:set <option>

<option>을 사용함.

:set no<option>

<option>을 사용하지 않는다.

:set <option>=<value>

<option>을 <value>값으로 지정한다.

:set

Default가 아닌 모든 옵션들의 값들을 보여준다.

:set <option>?

<option>에 해당하는 값을 보여준다.

:set all

모든 option과 각각의 값들을 보여준다.

위로 스크롤