행복아울렛

vim 초 간단 매뉴얼 본문

vim

vim 초 간단 매뉴얼

붕탱구 2008. 12. 18. 00:45
0. vim의 특징

- 무한 Undo & redo 기능
- 커맨드 및 레지스터 저장기능
- syntax hilight기능
- split기능

1. 이동

  t/T, f/F, |, ^,$

- 글자단위이동

  [0]f[A]: 현재 라인에서 가장 가까운 해당글자위로 이동(오른쪽)
  [0]F[A]: 현재 라인에서 가장 가까운 해당글자위로 이동(왼쪽)
  [0]t[A]: 현재 라인에서 가장 가까운 해당글자 바로 전 이동(오른쪽)
  [0]T[A]: 현재 라인에서 가장 가까운 해당글자위로 이동(왼쪽)
  [0]|: 해당 column으로 이동(ex 30| : 30번째 column으로 이동)


- vi에서는 대문자 명령과 소문자 명령 사이에는 반대의 뜻이 담겨 있습니다.
   (예를 들어 f는 오른쪽 방향의 이동 F는 왼쪽 방향의 이동)
- [0] : 숫자를 입력합니다.
- [A] : 글자를 입력합니다.
ex) 3tA : tA를 3번 반복합니다. 따라서 현재 라인의 3번째 A바로 앞으로 커서가 이동합니다.
      아래의 예문에서 보시면 맨 앞에 있는 커서에서 3tA를 입력하시면 SPEAKER의 E의 위치에 커서가 이동합니다.
      TANNOY ACTIVE SPEAKER
      ^
- | : 백스페이스 바로 및 또는 바로 왼쪽에 있는 \와 같이 있는 글자입니다.(파이프군요 ^^)
 

^: 현재라인의 시작부분으로 이동(공백무시)
0: 현재라인의 시작부분으로 이동(공백포함)
$: 현재라인의 끝부분으로 이동

g[jk]라인이 엄청 길어서 한라인을 넘어선 경우 실제 다음라인이 아닌 보이는 다음라인으로 이동하고자 할 때 jk앞에 g를 입력하시면 눈에 보이는 다음라인으로 넘어갑니다.

워드단위이동(공백기준)
w: 다음 단어의 처음으로
b: 이전 단어의 처음으로
e: 단어의 끝으로

글자단위의 이동은 매크로 작성의 기본이 됩니다. 매크로작성시 가변적인 부분들은 위 글자단위 이동등을 통하여 절대적인 명령으로 매크로를 기록해야 합니다. 예를들어
this is a test.
this is a new test.
위 문장을 printf문으로 싸는 매크로를 작성시 hhhhhhlllll이런 식으로 이동하게 되면 윗 예제 아래 예제에 동일한 매크로를 작성할 수 없게 됩니다. 따라서 ^, $등으로 이동해서 매크로를 작성해야 가변적인 특성들을 아우르는 매크로를 만들 수 있습니다.
ex) 현재 라인을 printf("[현재라인]\n");으로 바꾸어 주는 매크로 작성 시
  ^iprintf("<ESC>a\n");<ESC>


2. 블럭지정

- 복사, 삭제, 변경등 편집단위를 묶기 위해 블럭지정
  v:      글자단위 블럭지정
  V:      라인단위 블럭지정
  Ctrl+v: 블럭단위 블럭지정

 ※ gv: 이전에 블럭 지정해 둔 부분 다시 블럭 지정하기

3. vimrc & viminfo


- $HOME/.vimrc
  vi가 수행시 실행하는 초기화 명령이 들어 있는 파일
  여기에 map이나, abbr set 명령등 자신이 vim수행시 필요한 사항들을 기록해둔다.

- $HOME/.viminfo
  vi가 수행하는 동안 필요한 임시내용들을 저장하는 파일.
  찾기나, ex 명령, 버퍼등의 정보가 여기에 저장되므로 반복 입력시 처음부터 다 입력할 필요 없이 화살표를 통해 이전 명령들을 검색할 수 있게 됨.

4. map

- map 은 자기만의 명령을 만들어 냄.
ex) map ; %
  map <F1> :q!<CR>
  map <F3> :set nu!<CR>
  map :%!sort "현재 문서를 알파벳 순으로 정렬하기
- vmap은 visual모드에서만 사용가능한 맵
ex) vmap <space> zf  "블럭지정한 부분을 fold기능으로 묶어버림
- imap은 insert모드에서만 사용가능한 맵
ex)
  imap <C-j> <DOWN>  "Control+j는 입력모드에서 아래화살키로 변경
  imap <C-k> <UP>
  imap <C-h> <LEFT>
  imap <C-l> <RIGHT>
  imap <TAB> <Space><Space><Space><Space>
ex)   
  map <f1> :set nu!
  map <f2> :wq!
  map <f3> :set ic!
  map <f6> I/* <ESC>A */<ESC>
  map <f7> :s#/\* \(.*\) \*/#\1<CR>:nohlsearch<CR>


5. abbr

- 입력시 지정해 놓은 글자로 변경됨!
ex)
  abbr q1 q!
  abbr Q1 q!
  abbr Wq wq
  abbr p# printf("\n");
  abbr inculde include
  abbr THe The
  abbr em@ email:butcool@hitel_net
  abbr #b /**************************************************************
  abbr #e **************************************************************/


6. macro

- macro기록법
  q[버퍼명]  -> macro기록시작
  명령들 수행
  q  -> macro 기록 종료
- macro 수행
  @[버퍼명]
  여기서 버퍼명:a-z
- macro는 아래의 global command, norm mode command와 결합하면 아주 유용하게 사용할 수 있음.


7. global command

- g
  Execute the Ex Command on the lines within where pattern matches.
- v
  Execute the Ex Command on the lines within where pattern does not match.
ex) 전체 문서에서 특정패턴을 포함한 라인만을 제거하거나, 또는 그 반대로 특정패턴을 포함한 라인만 남겨놓고 나머지는 모두 제거할 때.
  %g/지우는라인/d
  %v/남기는라인/d


8. norm mode command

- Execute Normal mode commands
:norm WhateverYouWantToDo

ex) :norm Iprintf("<ESC>A\n");<ESC>
현재 라인을 printf로 감싸주는 명령

9. 외부명령의 수행

- ex mode에서 !로 수행함.
  :%!sort   -> 전체문서를 정렬하기.
  :%!uniq  -> 전체문서중 중복된 부분 삭제하기.
  :r !ls -> 현재 커서 위치에 ls한 결과를 삽입하기
  :r !pwd -> 현재 커서 위치에 pwd한 결과를 삽입하기
※ex mode에서 'r'은 덧붙임 기능.

10. 여러파일의 편집 vi `grep -l abc *.c`

:b1<CR>
:b2<CR>
.
.
.
:bn<CR>
:bp<CR>

*참고
shell에서 ``는(ESC밑 물결무늬모양 키) ''(Enter옆 따옴표)와는 다른데, 이것은 쉘에서 명령입력 시
[``으로 감싼 명령을 실행한 결과를 가지고 명령을 수행해라] 라는 의미입니다.
예를 들어 date +%y%m%d를 쉘에서 수행하게 되면 오늘 날짜의 연월일을 출력하게 됩니다. 이를 mkdir `date +%y%m%d`를 쉘에서 수행하게 되면 오늘날짜의 디렉토리가 생성되게 됩니다.


11. 자동완성기능

- 자동완성 기능이란 입력모드에서 문서의 매칭되는 단어들을 자동으로 완성 시켜주는 기능.
  잘못입력된 변수명으로 인한 오류를 줄이기 위해
  긴 단어 입력시 손가락 아픔을 방지하기 위해
- 사용법
  단어를 입력하다 귀찮을 때 아래와같은 명령 수행
Ctrl+p(previous)
Ctrl+n(next)

12. fold기능

- 소스코드 등의 중요하지 않은 부분들을 묶어서 간단하게 표시하고자 할 때 사용함.
- 사용법
  zo : 닫혀있는 폴드 열기
  zc : 폴드 닫기
  zf : 폴드 생성하기
  zd : 현재 위치의 폴드 삭제하기
  zR : 현재 문서의 모든 폴드 열기
  ZM : 현재 문서의 모든 폴드 닫기
  zE : 현재 문서의 모든 폴드 삭제
  zD : 현재 위치의 겹쳐진 폴드 삭제
  set fdm=marker
  ;폴드를 마커에 의존해서 동작하게 한다. 기본적으로는 ,의 짝으로 이루어지게 되어 있음.
  set fdm=marker를 .vimrc파일에 넣어두고 사용하게 되면, 파일을 열 때마다 설정할 필요가 없음.
  또는 /* vim: set fdm=marker: */ 이런 식으로 문서의 맨 처음이나 맨 끝에 두게 되면, 자동으로 설정되어, set fdm=marker라고 설정해 두지 않아도 vim 구동시 자동으로 동작하게 됨.


13. split기능


- 화면을 가로 또는 세로로 쪼개서 여러 파일을 동시에 편집할 때 또는 다른 파일을 참조하면서 코딩시에 유용하게 사용할 수 있는 기능.

  :sp 가로로 쪼개기
  :vsp 세로로 쪼개기
  ctrl+w s 가로로 쪼개기 다른 방법
  ctrl+w v 세로로 쪼개기 다른 방법
  ctrl+ww  쪼개진 창 간 이동
  ctrl+w=  쪼개지 창 사이즈 동일하게
 
  쪼개진 창사이즈 조절(세로)
  ctrl+w [0]+
  ctrl+w [0]-
 
  쪼개진 창사이즈 조절(가로)
  ctrl+w [0]>
  ctrl+w [0]<


14. diff기능


- vim의 split기능을 이용하여 두 파일간 차이를 한눈에 쉽게 비교할 수 있다.
  vi -d file1 file2
 
- set dip=iwhite,icase
  ;vim으로 diff시 unix diff의 -i -b 옵션 같은 기능
  공백무시, 대소문자 무시 비교 시 사용


15. register(= named buffer)

- 윈도우의 클립보드와 같은 기능으로, vim에서 사용가능한 버퍼는 알파벳[a-z]까지 26개 및 다양한 특수 문자 및 숫자에 특수한 기능으로 설정되어 있다.

  ctrl+R + W%"
  ctrl+r,w : 현재 커서 밑 단어
  ctrl+r,% : 현재 파일 명
  ctrl+r," : 현재 버퍼 내용

- :register or :reg
    ;현재의 register내용을 보여 줌.
  ""   ^[
  "0~9 
  "a  
  "s  
  "w  
  "-   ^[
  ".  
  ":   register
  "%   DBBG_rep.ch
  "/   prep_map


16. vim+ctags

- vim과 ctags는 유닉스 환경에서 프로그래밍 시 없어서는 안될 필수의 기능이다.
  ctags는 소스파일을 읽어서 각종 변수 및 구조체 함수의 위치를 태그로 만들어 tags라는 파일로 생성해서 이를 vim에서 함수 및 변수명을 통한 파일간 이동을 쉽게 해주는 툴이다.
- tags파일 생성법
ctags -R

  ctrl+] -> tag로 이동
  ctrl+t ->
  vi -t tagname


17. 정규표현식

- 특정한 패턴을 기술하기 위한 Meta 언어를 이용하는 패턴 묘사.

  ^ 행의 시작에서 정규 표현식의 첫번째 문자가 매치(대괄호 안에서는 부정의 의미)
  . 개행문자를 제외한 임의의 문자 한 개와 매치
  [] 대괄호 안에 있는 임의의 문자와 매치하는 문자 클래스
  * 바로앞에 있는 패턴이 0번 혹은 그 아상 반복되는 것
  $ 행의 끝에서 정규표현식의 마지막 문자가 매치
  \+ 앞에 있는 정규 표현식이 한 번이나 그 이상 반복하여 매치할 수 있음을 의미.
  A\{1,3\}
    ;문자 A가 한번에서 연속 세번까지 나타난 문자열 매치
  \| 앞에 있는 정규 표현식 혹은 뒤에 있는 정규 표현식에 매치
  \< 단어의 시작
  \> 단어의 끝
  \( \) 정규표현식 여러 개를 새로운 정규표현식 한 개로 묶는다.
  \s 공백(탭, 스페이스)
  \d 숫자


18. #*


- 커서밑 단어 쉽게 찾기
  # == ?\<ctrl+r ctrl+w\>
  ;커서밑 단어와 같은 단어 위로 탐색
  * == /\<ctrl+r ctrl+w\>
  ;커서밑 단어와 같은 단어 아래로 탐색


19. 파일간 복사


1) register를 이용하는 방법.
2) split기능을 이용한 방법.
3) :r 명령을 이용한 방법.


20. undo & redo


- vim에서는 무한 undo & redo가 가능하다.
undo : u
redo : ctrl+r


21. 숫자의 증감 ctrl+a ctrl+x


- 숫자를 자동으로 증감 시키는 기능
add
extract
-사용법
101ctrl+a
100ctrl+x


22. ctrl+o <TAB>


- ctrl+o : 찾기 등의 명령으로(마커이동) 이동한 곳으로 이동
- <TAB>  :  되돌아가기


23. set syn=c


- 확장자가 다른 파일 강제 syntax할당
  확장자가 틀려서 syntax 칼라매핑이 안될 때.


24. VIMRUNTIME


echo $VIMRUNTIME
help file, syntax file, plugin file등이 있음.
.profile에 export VIMRUNTIME=...로 추가


-----------------------------------------------
- 백문이 불여일타!
- vi는 배우는 것이 아니라 몸으로 익히는 것이다!
-----------------------------------------------
-- vim: set fdm=marker:

Comments