'vi improved'에 해당되는 글 1건

  1. 2012.11.19 [단축키] VIM by 당신은 천하보다 귀중합니다. av930

준비한 단축키 소개가 이제 어느 정도 막바지에 이르렀다. 오늘은 가장 많이 사용하는 editor인 vim에 대해서 소개하려고 한다. 아직도 VI(VIsual Editor), VIM(Vi IMproved) 혼용해서 불러지고 있지만, 엄밀히 말하면 지금 사용하고 있는 editor는 vim이다.

 

   

ESC key로 mode change를 해서 사용하도록 설계된 vi는 이것 때문에 좋아하는 사람과 싫어하는 사람이 극명히 갈리는 editor이다. VI를 design한 시점에 주로 사용되는 keyboard는 현재 사용하고 있는, (ESC key가 keyboard 왼쪽 가장 상단에 위치한 형태) 키보드가 아니었으며, 현재의 tab 정도에 위치하였다. 그래서 그렇게 design된 것이었다.

   

이유야 어째튼 마우스가 없던 모든 것을 keyboard로 해야 했던 시절에 출발한지라 모든 기능이 keyboard로 가능하다. 최근 mouse까지 추가하여 별도의 기능을 제공하기도 하지만 H,J,K,L로 이어지는 커서 이동은 과히 독특함을 넘어 유별나다 할 수 있다.

VI를 사용하면서 가장 큰 난적은 환경이다. Shell과 terminal type, 그리고 각 os마다 존재하는 수많은 VI 가 사용자에게 혼란을 주기 때문이데, 이를 잘 이해한다면 언제 어디서나 최적의 환경 속에서 작업이 가능하다.

   

그럼 단축키를 알아보자.

구분

명령

단축키

    

    

설명

    

    

    

    

    

    

파일

    

    

    

    

    

   

종료

   

   

:q

그대로 종료하기

   

   

   

   

:q!

변경된 내용을 저장하지 않고 강제로 종료하기

   

   

   

   

:wq

변경된 내용을 저장하고 종료하기

   

   

   

   

:wqa!

현재 열린 창을 모두 저장하고 종료하기

   

   

   

   

:x

:wq와 동일한 명령

   

   

   

   

ZZ

:wq와 동일한 명령

   

   

   

   

   

   

   

열기

vi file file…

   

다중파일 열기

   

   

   

   

   

다른 file로 이동할 때는 프롬프트 상에서 :n 이라 입력한다.

   

   

   

   

:shell

VI를 종료하지 않고 shell 화면으로 나갈 수 있다.

   

   

   

   

exit

다시 VI로 이동할 때는 exit라 입력한다.

   

리프레쉬

CTRL+

   

L

화면 리프레쉬

   

   

   

   

   

   

   

복구

   

   

   

시스템이 갑자기 꺼졌을 때(최악의 상황) 복구하는 명령은 VI -r [작업하던 file name]

   

   

   

   

   

   

편집

    

    

    

    

    

   

삽입

   

   

i

현재 커서의 위치부터 삽입

   

   

   

   

a

현재 커서의 위치 다음부터 추가 시작

   

   

   

   

A

현재 줄의 마지막에 추가 시작

   

   

   

   

I

현재 줄의 처음에 추가 시작

   

   

   

   

o

현재 라인의 아래에 새로운 라인을 열어준다

   

   

   

   

O

현재 라인의 위에 새로운 라인을 열어준다.

   

   

   

   

   

   

   

삭제

   

   

x

커서 위치의 한문자 삭제

   

   

   

   

X

커서가 있는 문자 앞에 있는 문자 삭제

   

   

   

   

dw

커서가 있는 단어 삭제

   

   

   

   

dW

공백으로 구분된 뒷 단어 삭제

   

   

   

   

db

커서가 앞에 있는 단어 삭제

   

   

   

   

dB

공백으로 구분된 앞 단어 삭제

   

   

   

   

d)

현재행부터 문장의 나머지 삭제

   

   

   

   

dG

현재행부터 파일의 나머지 삭제

   

   

   

   

dL

현재행부터 화면의 나머지 삭제

   

   

   

   

d0

행의 0번째 char(시작)부터 현재 앞 문자까지 지운다.

   

   

   

   

d1G

현재 행부터 file의 시작까지 지운다.

   

   

   

   

dnG

현재 행에서 n 번째까지 지운다.

   

   

   

   

dd

현재행 삭제

   

   

   

   

ndd

n개의 라인을 지운다.

   

   

   

   

D

커서가 있는 라인의 나머지 삭제

   

   

   

   

d}

문단의 나머지 삭제

   

   

   

   

dH

화면의 시작까지 삭제

   

   

   

   

J

커서와 다음 단어의 공백을 모두 삭제

   

   

   

   

   

   

   

바꾸기

   

   

r

커서에 있는 문자 대치

   

   

   

   

s

커서가 있는 문자 삭제 후 입력 모드로 전환

   

   

   

   

cb

커서가 있는 앞 문자 삭제 후 입력 모드

   

   

   

   

cB

공백으로 구분된 앞 단어 삭제 후 입력 모드

   

   

   

   

C

커서가 있는 라인의 나머지를 삭제하고 입력 모드로 전환

   

   

   

   

c

특정 텍스트 바꾸기

   

   

   

   

c}

문단의 나머지 바꾸기

   

   

   

   

cm

표시까지 모든 것 바꾸기

   

   

   

   

ch

화면의 시작까지 바꾸기

   

   

   

   

R

입력 모드로 한 문자씩 덮어씀

   

   

   

   

S

커서가 있는 줄을 삭제 후 입력 모드로 전환

   

   

   

   

cW

공백으로 구분된 뒷 단어를 삭제 후에 입력 모드

   

   

   

   

cc

커서가 있는 라인을 삭제하고 입력 모드

   

   

   

   

cO

커서에서부터 라인의 시작까지 텍스트 바꾸기

   

   

   

   

c)

문장의 나머지 바꾸기

   

   

   

   

cG

파일의 나머지 바꾸기

   

   

   

   

cL

화면의 나머지 바꾸기

   

   

   

   

cw

현재 위치에서 단어 교체

   

   

   

   

cfc

현재 위치에서 `c' 문자까지 변경

   

   

   

   

` . '

VI에서 마지막 명령을 반복하라는 뜻이다.

   

   

   

   

   

   

   

복사

   

   

yw

커서가 있는 단어를 복사

   

   

   

   

yW

공백으로 구분된 뒷 단어 복사

   

   

   

   

y

특정한 다음 텍스트 복사

   

   

   

   

y)

문자의 나머지 복사

   

   

   

   

yG

파일의 나머지 복사

   

   

   

   

yL

화면의 나머지 복사

   

   

   

   

yb

커서가 있는 앞 단어를 복사

   

   

   

   

yB

공백으로 구분된 앞 단어를 복사

   

   

   

   

yy

커서가 있는 라인을 복사, 커서가 가리키는 곳으로 라인을 이동

   

   

   

   

y}

문단의 나머지 복사

   

   

   

   

yH

화면의 시작까지 복사

   

   

   

   

   

   

   

붙여넣기

   

p

삭제나 복사된 텍스트를 커서가 있는 문자나 라인 뒤에 삽입

   

   

   

   

dw p

커서가 있는 단어를 삭제한 후 이를 원하는 곳 커서 뒤로 삽입

   

   

   

   

d p

지정한 다음 텍스트로 삭제한 후 커서가 가리키는 곳으로 이동

   

   

   

   

d} p

문단의 나머지로 이동

   

   

   

   

dH P

화면 시작 부분으로 이동

   

   

   

   

P

삭제나 복사된 텍스트를 커서가 있는 문자나 라인 앞에 삽입

   

   

   

   

dw P

커서가 있는 단어를 삭제한 후 이를 변경한 커서가 있는 곳으로 삽입

   

   

   

   

d) P

문장의 나머지로 이동

   

   

   

   

dG P

파일의 나머지로 이동

   

   

   

   

dL P

화면의 나머지를 이동

   

   

   

   

   

   

   

블럭명령

   

   

   

   

   

: 10,20w [file name]

블록을 file에 저장

   

   

: 10,20w >> [file name]

블록을 file에 추가

   

   

: 10,20r [file name]

10에서 20까지에 file을 읽어 현재 줄에 삽입

   

블록 자르기

   

   

수정/삭제를 하면 버퍼에 그 내용을 복사(yank)

   

블록 복사

   

yw

한 단어 버퍼에 기록

   

   

   

   

y$

줄의 끝까지 기록

   

   

   

   

yy

현재 줄을 버퍼에 기록

   

   

   

   

   

==> 역시 name을 주어 buffer에 기록 할 수 있다.

   

블록붙이기

   

p

현재 커서 위치 오른쪽에 추가한다.

   

   

   

   

P

현재 커서 위치 왼쪽에 추가한다.

   

   

   

   

namep

buffer에 있는 name의 블록을 현재 위치에 추가

   

   

   

   

   

   

이동

    

    

    

    

    

   

   

   

   

f문자

다음에 나타나는 "문자"로 이동

   

   

   

   

F문자

이전에 나타나는 "문자"로 이동

   

단어 단위

   

w

다음 단어의 맨처음으로 이동

   

   

   

   

W

커서를 공백으로 구분된 다음 단어로 이동

   

   

   

   

e

다음 단어의 마지막으로 이동

   

   

   

   

E

커서를 공백으로 구분된 다음 단어 끝으로 이동

   

   

   

   

b

이전 단어의 맨처음으로 이동

   

   

   

   

B

커서를 공백으로 구분된 이전 단어로 이동

   

줄단위

   

   

0

커서를 라인의 시작으로 이동(숫자 0임)

   

   

   

   

$

커서를 라인의 끝으로 이동

   

   

   

   

Enter

커서를 다음 라인 시작으로 이동

   

   

   

   

+

다음 행의 처음으로 이동합니다.

   

   

   

   

-

이전 행의 처음으로 이동합니다.

   

   

   

   

n

   

   

   

   

   

G

커서를 텍스트 마지막 라인으로 이동

   

   

   

   

M

커서를 화면 중간 라인으로 이동

   

   

   

   

H

화면의 처음으로 이동

   

   

   

   

L

화면 끝으로 이동

   

   

   

   

숫자G

커서를 숫자 라인만큼 이동

   

문장단위

   

(

문장의 시작으로 이동

   

   

   

   

)

문장 끝으로 이동하여 다음 단어의 시작으로 커서 이동

   

   

   

   

{

문단의 시작으로 이동

   

   

   

   

}

문단 끝으로 이동

   

   

CTRL+

   

F

한화면으로 앞으로 이동

   

   

CTRL+

   

B

한화면으로 뒤로 이동

   

   

CTRL+

   

U

반화면 앞으로 이동

   

   

CTRL+

   

D

반화면 뒤로 이동

   

방향키를 이용한

<-, Del

왼쪽으로 커서 한 칸 이동

   

커서 이동 명령

   

->

오른쪽으로 한 칸 이동

   

   

   

   

SpaceBar

   

   

   

   

윗 줄로 커서 이동

   

   

   

   

아래 줄로 커서 이동

   

   

   

   

Home

줄 처음 칸으로 이동

   

   

   

   

PageUp

화면 위로 이동

   

   

   

   

PageDown

화면 아래로 이동

   

   

   

   

Enter

다음 줄 첫 칸으로 이동

   

   

   

   

Esc

다음 줄 첫 칸으로 이동

   

   

   

   

:sp filename

새창 생성

   

창단위

CTRL+

   

ww

창간이동

   

   

CTRL+

   

wt

맨위창으로

   

   

CTRL+

   

wb

맨아래창으로

   

   

CTRL+

   

wj

위창

   

   

CTRL+

   

wk

아래창

   

   

CTRL+

   

wc

현재창 닫기

   

   

CTRL+

   

w_

현재창 최대화

   

   

20 CTRL+

w_

현재창 높이를 20으로

   

   

   

   

   

   

검색

    

    

    

    

    

   

검색

/pattern

   

패턴을 앞방향으로 검색

   

   

?pattern

   

패턴을 뒷방향으로 검색 (dir path slash(/)가 들어가는 검색시 사용하면 된다.)

   

   

n

   

   

이전 검색 앞방향으로 반복

   

   

N

   

   

이전 검색 뒷방향으로 반복

   

   

:s/

   

   

old를 new로 치환해 준다.

   

치환

[범위]s/old/new/[cgi]

[범위]숫자, $, .(현재 위치)등을 지정한다.

   

   

   

   

   

[cgi] c는 변경여부를 묻는 플래그이고, g는 한줄의 모든 것을 변경하며,

   

   

   

   

   

I 는 검색시 대소문자를 구분하지 않는다.

   

   

   

   

   

10줄에서 파일의 끝까지 수행

   

   

   

   

   

   

   

   

   

   

   

   

옵션

    

    

    

디폴트

`

   

   

:set autoindent

off

들여 쓰기 가능, 탭으로 들여 쓰기 범위 지정

   

   

:set autoprint

on

줄이 바뀔 때 현재 줄을 화면상에서 출력

   

   

:set errobells

off

명령 에러가 발생시 삑 소리나게 함

   

   

:set number

off

줄 번호를 나타나게 함

   

   

:set report

5

편집시 메시지를 보낼 편집 변화 크기 지정

   

   

:set showmatch

off

가로 닫기 괄호를 사용할 때 일치하는 가로 열기 괄호를 보여줌

   

   

:set wam

on

저장하지 않고 vi 종료할 때 경고 메시지를 뿌려 줌

   

   

:set ignorecase

on

검색 패턴에 사용되는 대소문자 구별하지 않음

   

   

:set tabstopp=n

8

탭 공백을 n 수만큼 지정

   

   

:set wrapmargin=n

0

텍스트 오른쪽 여백을 n 수만큼 지정

     

   

이런 단축키가 당신에게 능숙함을… 그리고 그 능숙함이 좀 더 빠른 퇴근을… 그리고 퇴근 후 잠자리에 들기 전, 삶의 본질에 대해서 생각할 수 있는 시간 20분만이라도 할애 해주길 바란다. (Jesus is my Christ)

Posted by 당신은 천하보다 귀중합니다. av930

댓글을 달아 주세요