[출처] http://revoman.tistory.com/category/Unix%20%26%20Linux/VI/VIM
블럭지정
- 복사, 삭제, 변경등 편집단위를 묶기 위해 블럭지정
- v: 글자단위 블럭지정
- V: 라인단위 블럭지정
Ctrl+v: 블럭단위 블럭지정
vimrc & viminfo
vi가 수행시 실행하는 초기화 명령이 들어 있는 파일
여기에 map이나, abbr set 명령등 자신이 vim수행시 필요한 사항들을 기록해둔다.
vi가 수행하는 동안 필요한 임시내용들을 저장하는 파일 찾기나, ex 명령, 버퍼등의 정보가 여기에 저장되므로 반복 입력시 처음부터 다 입력할 필요 없이 화살표를 통해
이전 명령들을 검색할 수 있게 됨.
map
- ex)
- map ; %
- map <F1> :q!<CR>
- map <F3> :set nu!<CR>
- map :%!htran -NF "한글변환해라
- 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>
-
- map <f1> :set nu!
- map <f2> :wq!
- map <f3> :set ic!
- map <f6> I/* <ESC>A */<ESC>
- map <f7> :s#/\* \(.*\) \*/#\1<CR>:nohlsearch<CR>
-
abbr
- ex)
- abbr q1 q!
- abbr Q1 q!
- abbr Wq wq
- abbr p# printf("\n");
- abbr inculde include
- abbr THe The
- abbr em@ email:minw.seo@samsung.com
- abbr #b /**************************************************************
- abbr #e **************************************************************/
외부명령의 수행
- :%!sort
- :%!uniq
- :r !ls
- :r !pwd
- ※ex mode에서 'r'은 덧붙임 기능.
여러파일의 편집
- 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`를 쉘에서 수행하게 되면 오늘날짜의 디렉토리가 생성되게 됩니다.
파일탐색기능
- :20vs./
- 왼쪽에서 수직으로 나뉘며 넓이가 20칸인 창을만들고, 현재 디렉토리의 파일 목록을 보여준다.
- 열고자 하는 파일을 선택하고 'O'(shift+o)를 입력한다. 그러면 오른쪽의 넓은 창에서 해당 파일이 열린다.
자동완성기능
- 자동완성 기능이란 입력모드에서 문서의 매칭되는 단어들을 자동으로 완성 시켜주는 기능.
- 사용법
단어를 입력하다 귀찮을 때 아래와같은 명령 수행
- Ctrl+p(previous)
- Ctrl+n(next)
fold기능
- 소스코드등의 중요하지 않은 부분들을 묶어서 간단하게 표시하고자 할 때 사용함.
- 사용법
- zo : 닫혀있는 폴드 열기
- zc : 폴드 닫기
- zf : 폴드 생성하기
- zd : 현재 위치의 폴드 삭제하기
- zR : 현재 문서의 모든 폴드 열기
- ZM : 현재 문서의 모든 폴드 닫기
- zE : 현재 문서의 모든 폴드 삭제
- zD : 현재 위치의 겹쳐진 폴드 삭제
- set fdm=marker
- ;폴드를 마커에 의존해서 동작하게 한다. 기본적으로는 ,의 짝으로 이루어지게 되어 있음.
- set fdm=marker를 .vimrc파일에 넣어두고 사용하게 되면, 파일을 열 때마다 설정할 필요가 없음.
- 또는 /* vim: set fdm=marker: */ 이런 식으로 문서의 맨 처음이나 맨 끝에 두게 되면, 자동으로 설정되어, set fdm=marker라고 설정해 두지 않아도 vim 구동시 자동으로 동작하게 됨.
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]<
diff기능
- vim의 split기능을 이용하여 두 파일간 차이를 한눈에 쉽게 비교할 수 있다.
- vi -d file1 file2
- set dip=iwhite,icase
- ; vim으로 diff시 unix diff의 -i -b 옵션 같은 기능, 공백무시, 대소문자 무시 비교 시 사용
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
vim+ctags
- vim과 ctags는 유닉스 환경에서 프로그래밍 시 없어서는 안될 필수의 기능이다. ctags는 소스파일을 읽어서 각종 변수 및 구조체 함수의 위치를 태그로 만들어 tags라는 파일로 생성해서 이를 vim에서 함수 및 변수명을 통한 파일간 이동을 쉽게 해주는 툴이다.
- tags파일 생성법
- ctags -R
- ctrl+] -> tag로 이동
- ctrl+t ->
- vi -t tagname
정규표현식
- 특정한 패턴을 기술하기 위한 Meta 언어를 이용하는 패턴 묘사.
- ^ 행의 시작에서 정규 표현식의 첫번째 문자가 매치(대괄호 안에서는 부정의 의미)
- . 개행문자를 제외한 임의의 문자 한 개와 매치
- [] 대괄호 안에 있는 임의의 문자와 매치하는 문자 클래스
- * 바로앞에 있는 패턴이 0번 혹은 그 아상 반복되는 것
- $ 행의 끝에서 정규표현식의 마지막 문자가 매치
- \+ 앞에 있는 정규 표현식이 한 번이나 그 이상 반복하여 매치할 수 있음을 의미.
- A\{1,3\}
- ;문자 A가 한번에서 연속 세번까지 나타난 문자열 매치
- \| 앞에 있는 정규 표현식 혹은 뒤에 있는 정규 표현식에 매치
- \< 단어의 시작
- \> 단어의 끝
- \( \) 정규표현식 여러 개를 새로운 정규표현식 한 개로 묶는다.
- \s 공백(탭, 스페이스)
- \d 숫자
#*
- # == ?\<ctrl+r ctrl+w\>
- ;커서밑 단어와 같은 단어 위로 탐색
- * == /\<ctrl+r ctrl+w\>
- ;커서밑 단어와 같은 단어 아래로 탐색
파일간 복사
- * register를 이용하는 방법.
- * split기능을 이용한 방법.
- * :r 명령을 이용한 방법.
undo & redo
* vim에서는 무한 undo & redo가 가능하다.
- undo : u
- redo : ctrl+r
숫자의 증감 ctrl+a ctrl+x
- add
- extract
- ctrl+a 숫자 1증가
- 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=...로 추가
대문자 소문자 변경
- %s/.*/\L&/g
- %s/.*/\U&/g
- ~키를 누르면 커서에 위치한 문자가 대/소문자로 변경된다.
- 영역선택후 u 를 누르면 전체 문자열이 소문자로 변경된다.
- 영역선택후 U 를 누르면 전체 문자열이 대문자로 변경된다.
- : help ~
- gUU : 커서에 위치한 줄 전체가 대문자로 변경
- guu : 커서에 위치한 줄 전체가 소문자로 변경
함수선언과 지역변수 선언 부분으로 이동
- 함수나 변수가 사용된 부분에 커서를 위치 시킨후 명령모드에서 '[i'를 입력하면 하단에 해당 함수나 변수의 원형이 나타난다
- 지역변수가 선언된 부분으로 이동하고 싶다면 'gD', 'gd'를 입력한다.
^M 문자 제거
- :%s/^M//g
- set fileformat=dos
- ^M문자는 ctrl+v+Enter 키를 입력하면 된다.
치환
- :%s/foo/bar
- :%s/foo/bar/c
- 바꿀 때마다 바꾸어도 좋은지 물어보기에 더 안전하다. y를 누르면 바꾸고, n을 누르면 다음으로 건너뛰고, a를 누르면 모두 바꾼다.
- :%s/\<foo\>/bar
- 이렇게 하면 정확하게 foo에 일치될 때만 바꾼다. 즉 foo는 바꾸지만, foo 앞뒤로 다른 문자열이 붙어 있는 경우,
- 예를 들어
- fooZZZ
- ZZZfoo
- ZZZfooZZZ
- 이런 문자열 속의 foo 는 바꾸지 않는다.
- :%s/foo/bar/i
- 이렇게 i 옵션을 붙인다.
- :%s/foo/bar/g
- '%' 는 전체문서(처음부터 끝까지), '.' 은 현재, '$' 은 마지막을 나타낸다. 숫자를 입력할 경우 숫자는 라인을 나타낸다. 다음은 간단한 사용 예이다.
- 문서 처음부터 마지막까지의 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에서 한글을 입력하고자 하면 문제가 발생할 수 있다.
-
- 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>에서 삽입