[vi] 편리한 몇가지 팁

Linux 2011. 2. 17. 13:53
vi를 사용하여 문서를 편집할 때 편리하게 해주는 몇가지 팁을 소개하려고 한다.

1. Key mapping
Key mapping은 vi에서 사용할 수 있는 단축키를 지정하는 것을 의미한다.
Default로 mapping 되어 있는 단축키가 꽤 있지만
자신이 자주 사용하는 것을 단축키로 지정하여 사용하면 작업 능률을 상당히 올릴 수 있다.

Key mapping은
vi내에서 command line에서 지정해 줄 수도 있고(해당 문서에만 적용됨)
.vimrc 설정 파일에서 선언하여 사용할 수도 있다.(모든 문서에서 사용가능)

Key mapping은 간단히 사용자가 키보드로 입력하는 sequence를 키 하나로 지정한다고 생각하면 된다.

예를 들어 normal mode에서 지금 커서가 있는 단어에 중괄호를 하고 싶다 하면
다음과 같은 순서로 입력을 하면 될 것이다.

i (insert mode) -> { ('{'를 입력) -> <Esc> (normal mode) -> e (단어의 끝으로 이동) -> a (append mode) -> } ('}'를 입력) -> <Esc> (normal mode)

이 과정을 우리가 단축키 F5로 지정하고 싶다고 하면
아래와 같이 vi command line 혹은 .vimrc에 선언해 주면 된다.

map <F5> i{<Esc>ea}<Esc>

물론 꼭 normal mode에서만 작성이 가능한 것이 아니다
:map                      Normal, Visual, Operator-pending mode
:vmap                    Visual mode
:nmap                     Normal mode
:omap                    Operator-pending mode
:map!                    Insert, Command-line mode
:imap                     Insert mode
:cmap                    Command-line mode
위와 같이 mode별로 단축키를 설정하는 명령어를 다르게 사용하면 된다.
여기서 Operator-pending mode의 경우 예를 들어 설명하자면
우리가 vi normal mode에서 d2w하게 되면 두개의 단어를 지우라는 명령어가 된다.
여기서 d의 경우 delete 명령어, 뒤의 2w가 두개의 단어를 뜻하는데
Operator pending mode는 일단 우리가 d를 누른 상태 (즉, 목적어를 지정해주지 않은 상태)를 의미한다.

또한, 우리가 알아두어야 할 것이 위에서와 같이 <와 >로 둘러 쌓인 특수키인데
많이 쓰이는 것만 알아보도록 하면 다음과 같다
<Esc>                  ESC 키
<CR>                   엔터키 (Carriaga retrun)
<C-A>                  Ctrl+A
<A-A>                  Art+A
<S-A>                 Shift+A
<F1>                   F1키
<Home>                Home 키
<End>                 End 키


2. Command
소스 코드를 작성 할 경우 중간에 vi를 나가서 작성하다가 compile을 한다거나 다른 작업을 해야하는 경우가 종종 있다.
이럴 경우 vi를 나갔다가 다시 들어오고 해야하는데 디렉토리 이동이 있을 경우 매우 번거로워진다.
그럴 때에 사용할 수 있는 방법이 두가지 있다.

a. Background 사용
경로 이동이 잦고 복잡할 경우엔 background를 사용하면 편하다
vi 상에서 Ctrl+Z를 누르면 background로 vi가 실행되게 된다.
하고자 하는 작업을 마친 뒤
Shell에서
> fg
를 하면 다시 vi로 돌아오게 된다.

b. vi에서 command를 직접 입력
vi command-line mode에서 '!'를 하고 shell명령을 하면 된다. 예를 들자면
:!ls                     ls 실행
:!dir                  dir 실행


3. Mark
하나 또는 여러 문서간의 이동이 잦으면 marking 기능을 사용할 수 있다.
일단 하나의 문서 내에서 mark를 사용하려면
vi normal mode에서
ma
하면 커서가 있는 부분에 a라는 mark를 생성한다.
또 다른 부분에
mb
하면 그 부분에 b라는 mark를 생성한다.
그리고 나서 작업을 하다가 mark a로 돌아가고 싶으면
`a
라고 치면 되고,
mark b로 돌아가고 싶으면
`b
라고 하면 된다.

(여기서 `는 키보드 상단에 숫자 1 옆에 있는 키이다.)

이와 마찬가지로 여러 문서에서 mark를 사용하려면
mark의 이름을 대문자를 사용하면 된다.

vi normal mode에서
1번 문서에서
mA
하면 커서가 있는 부분에 A라는 mark를 생성한다.
또 2번 문서 어떠한 부분에
mB
하면 그 부분에 B라는 mark를 생성한다.
그리고 나서 작업을 하다가
`A
라고 치면 1번문서의 해당 부분에 돌아가게 되고,
`B
라고 하면 2번 문서의 marking 부분에 돌아가게 된다.


4. Folding
Folding 기능은 여기 링크에서 확인할 수 있다.

'Linux' 카테고리의 다른 글

[vi] Line 단위로 지우기  (0) 2011.12.07
[vi] ctags 사용법  (0) 2011.02.17
[Perl] Bin to Hex Converter  (0) 2011.02.14
[Perl] Hex to Bin Converter  (0) 2011.02.14
[vi] Folding  (0) 2011.02.08
Posted by sunshowers
,