[출처] http://revoman.tistory.com/category/Unix%20%26%20Linux/VI/VIM 

블럭지정

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

   

   

vimrc & viminfo

  • $HOME/.vimrc

  vi가 수행시 실행하는 초기화 명령이 들어 있는 파일

  여기에 map이나, abbr set 명령등 자신이 vim수행시 필요한 사항들을 기록해둔다.

   

  • $HOME/.viminfo

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

  이전 명령들을 검색할 수 있게 됨.

   

map

  • map 은 자기만의 명령을 만들어 냄.
  1.   ex)
  2.   map ; %
  3.   map <F1> :q!<CR>
  4.   map <F3> :set nu!<CR>
  5.   map :%!htran -NF "한글변환해라

   

  • vmap은 visual모드에서만 사용가능한 맵
  1.   ex)
  2.   vmap <space> zf  "블럭지정한 부분을 fold기능으로 묶어버림

   

  • imap은 insert모드에서만 사용가능한 맵
  1.   ex)
  2.   imap <C-j> <DOWN>  "Control+j는 입력모드에서 아래화살키로 변경
  3.   imap <C-k> <UP>
  4.   imap <C-h> <LEFT>
  5.   imap <C-l> <RIGHT>
  6.   imap <TAB> <Space><Space><Space><Space>
  7.  
  8.   map <f1> :set nu!
  9.   map <f2> :wq!
  10.   map <f3> :set ic!
  11.   map <f6> I/* <ESC>A */<ESC>
  12.   map <f7> :s#/\* \(.*\) \*/#\1<CR>:nohlsearch<CR>
  13.  

   

abbr

  • 입력시 지정해 놓은 글자로 변경됨!
  1.   ex)
  2.   abbr q1 q!
  3.   abbr Q1 q!
  4.   abbr Wq wq
  5.   abbr p# printf("\n");
  6.   abbr inculde include
  7.   abbr THe The
  8.   abbr em@ email:minw.seo@samsung.com
  9.   abbr #b /**************************************************************
  10.   abbr #e **************************************************************/

   

   

외부명령의 수행

  • ex mode에서 !로 수행함.
  1.   :%!sort
  2.   :%!uniq
  3.   :r !ls
  4.   :r !pwd
  5.   ※ex mode에서 'r'은 덧붙임 기능.

   

여러파일의 편집

  1.   vi `grep -l abc *.c`
  2.  
  3.   :b1<CR>
  4.   :b2<CR>
  5.   .
  6.   .
  7.   .
  8.   :bn<CR>
  9.   :bp<CR>

   

  • 참고

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

   

파일탐색기능

  1.   :20vs./
  • 왼쪽에서 수직으로 나뉘며 넓이가 20칸인 창을만들고, 현재 디렉토리의 파일 목록을 보여준다.
  • 열고자 하는 파일을 선택하고 'O'(shift+o)를 입력한다. 그러면 오른쪽의 넓은 창에서 해당 파일이 열린다.

   

자동완성기능

  • 자동완성 기능이란 입력모드에서 문서의 매칭되는 단어들을 자동으로 완성 시켜주는 기능.
  • 사용법

  단어를 입력하다 귀찮을 때 아래와같은 명령 수행

  1.   Ctrl+p(previous)
  2.   Ctrl+n(next)

   

fold기능

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

   

   

split기능

  • 화면을 가로 또는 세로로 쪼개서 여러 파일을 동시에 편집할 때 또는 다른 파일을 참조하면서 코딩시에 유용하게 사용할 수 있는 기능.
  1.   :sp 가로로 쪼개기
  2.   :vsp 세로로 쪼개기
  3.   ctrl+w s 가로로 쪼개기 다른 방법
  4.   ctrl+w v 세로로 쪼개기 다른 방법
  5.   ctrl+ww  쪼개진 창 간 이동
  6.   ctrl+w=  쪼개지 창 사이즈 동일하게
  7.  
  • 쪼개진 창사이즈 조절(세로)
  1.   ctrl+w [0]+
  2.   ctrl+w [0]-
  • 쪼개진 창사이즈 조절(가로)
  1.   ctrl+w [0]>
  2.   ctrl+w [0]<

   

diff기능

  • vim의 split기능을 이용하여 두 파일간 차이를 한눈에 쉽게 비교할 수 있다.
  1.   vi -d file1 file2

   

  1. set dip=iwhite,icase
  2. ; vim으로 diff시 unix diff의 -i -b 옵션 같은 기능, 공백무시, 대소문자 무시 비교 시 사용

   

register(= named buffer)

   

  • 윈도우의 클립보드와 같은 기능으로, vim에서 사용가능한 버퍼는 알파벳[a-z]까지 26개 및 다양한 특수 문자 및 숫자에 특수한 기능으로 설정되어 있다.
  1. ctrl+R + W%"
  2. ctrl+r,w : 현재 커서 밑 단어
  3. ctrl+r,% : 현재 파일 명
  4. ctrl+r," : 현재 버퍼 내용

   

  1. :register or :reg
  2.   현재의 register내용을 보여 줌.
  3.   ""   ^[
  4.   "0~9
  5.   "a
  6.   "s
  7.   "w
  8.   "-   ^[
  9.   ".
  10.   ":   register
  11.   "%   DBBG_rep.ch
  12.   "/   prep_map

   

vim+ctags

   

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

   

정규표현식

   

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

   

#*

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

   

파일간 복사

  • * register를 이용하는 방법.
  • * split기능을 이용한 방법.
  • * :r 명령을 이용한 방법.

   

undo & redo

* vim에서는 무한 undo & redo가 가능하다.

  1.   undo : u
  2.   redo : ctrl+r

   

숫자의 증감 ctrl+a ctrl+x

  • 숫자를 자동으로 증감 시키는 기능
  1.   add
  2.   extract
  • 사용법
  1.   ctrl+a  숫자 1증가
  2.   ctrl+x  숫자 1감소

   

ctrl+o <TAB>

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

   

set syn=c

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

   

VIMRUNTIME

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

   

대문자 소문자 변경

  • 대문자를 소문자로 변경할때
  1.   %s/.*/\L&/g
  • 소문자를 대문자로 변경할때
  1.   %s/.*/\U&/g
  • ~키를 누르면 커서에 위치한 문자가 대/소문자로 변경된다.
  • 영역선택후 u 를 누르면 전체 문자열이 소문자로 변경된다.
  • 영역선택후 U 를 누르면 전체 문자열이 대문자로 변경된다.
  • : help ~
  • gUU : 커서에 위치한 줄 전체가 대문자로 변경
  • guu : 커서에 위치한 줄 전체가 소문자로 변경

   

함수선언과 지역변수 선언 부분으로 이동

  • 함수나 변수가 사용된 부분에 커서를 위치 시킨후 명령모드에서 '[i'를 입력하면 하단에 해당 함수나 변수의 원형이 나타난다
  • 지역변수가 선언된 부분으로 이동하고 싶다면 'gD', 'gd'를 입력한다.

   

^M 문자 제거

  • :%s/^M//g
  • set fileformat=dos
  • ^M문자는 ctrl+v+Enter 키를 입력하면 된다.

   

치환

  • foo라는 문자열을 bar로 바꾼다.
  1.   :%s/foo/bar

   

  • c 옵션
  1.   :%s/foo/bar/c
  2.   바꿀 때마다 바꾸어도 좋은지 물어보기에 더 안전하다. y를 누르면 바꾸고, n을 누르면 다음으로 건너뛰고, a를 누르면 모두 바꾼다.

   

  • 정확한 문자열 치환
  1.   :%s/\<foo\>/bar
  2.   이렇게 하면 정확하게 foo에 일치될 때만 바꾼다. 즉 foo는 바꾸지만, foo 앞뒤로 다른 문자열이 붙어 있는 경우,
  3.   예를 들어
  4.   fooZZZ
  5.   ZZZfoo
  6.   ZZZfooZZZ
  7.   이런 문자열 속의 foo 는 바꾸지 않는다.

   

  • 대소문자 구분없이 치환
  1.   :%s/foo/bar/i
  2.   이렇게 i 옵션을 붙인다.

   

  •  전역 치환
  1.   :%s/foo/bar/g

   

  • '%' 는 전체문서(처음부터 끝까지),  '.'  은 현재, '$' 은 마지막을 나타낸다. 숫자를 입력할 경우 숫자는 라인을 나타낸다. 다음은 간단한 사용 예이다.
  1. 문서 처음부터 마지막까지의 char 를 _char_ 로 치환한다.
    :%s/char/_&_/g

    # 현재(커서위치)부터 마지막까지의 char 를 _char_ 로 치환한다.
    :.,$s/char/_&_/g

    # buf_.*[255], buf_in[255], buf_get[255] 와 같은 문자열을 hello 로 변경한다. 
    :1,10s/buf_.*\[255\]/hello/g

인코딩

인코딩을 변환하여 불러오기.

:e ++enc=euc-kr

   

그리고 아래 명령으로 인코딩을 변환한 다음 저장한다.

:set fileencoding=utf-8

 

라인 정렬

처음부터 끝 라인까지 모조리 정렬하기.

g=GG

붙여넣기 시에 복사했던 라인 그대로 가져오려면

set paste ( 이를 실행하고 나면 자동 indent 기능이 off 됨)

 

 

solaris9 vim 설치시 주의사항

Unix & Linux/VI/VIM / 2009/06/09 14:46

solaris9에서 LOCALE을 다음과 같이 설정하고, VIM에서 한글을 입력하고자 하면 문제가 발생할 수 있다.

  1.  
  2. LANG=ko_KR.UTF-8
    LC_CTYPE="ko_KR.UTF-8"
    LC_NUMERIC="ko_KR.UTF-8"
    LC_TIME="ko_KR.UTF-8"
    LC_COLLATE="ko_KR.UTF-8"
    LC_MONETARY="ko_KR.UTF-8"
    LC_MESSAGES="ko_KR.UTF-8"
    LC_ALL=

   

이 경우에는 vim 설치시 다음 옵션을 추가하여 configure를 수행하도록 한다.

   

./configure --with-x --enable-multibyte --enable-fontset --enable-hangulinput

   

기타 한글 관련 메뉴얼은 설치 디렉토리내의 vim72/runtime/doc/hangulin.txt를 참고하면 된다.

   

 

<http://revoman.tistory.com/category/Unix%20%26%20Linux/VI/VIM>에서 삽입

반응형

+ Recent posts