[출처] http://revoman.tistory.com/category/Unix%20%26%20Linux/VI/VIM
블럭지정
- 복사, 삭제, 변경등 편집단위를 묶기 위해 블럭지정
- v: 글자단위 블럭지정
- V: 라인단위 블럭지정
Ctrl+v: 블럭단위 블럭지정
vimrc & viminfo
- $HOME/.vimrc
vi가 수행시 실행하는 초기화 명령이 들어 있는 파일
여기에 map이나, abbr set 명령등 자신이 vim수행시 필요한 사항들을 기록해둔다.
- $HOME/.viminfo
vi가 수행하는 동안 필요한 임시내용들을 저장하는 파일 찾기나, ex 명령, 버퍼등의 정보가 여기에 저장되므로 반복 입력시 처음부터 다 입력할 필요 없이 화살표를 통해
이전 명령들을 검색할 수 있게 됨.
map
- 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 **************************************************************/
외부명령의 수행
- ex mode에서 !로 수행함.
- :%!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 키를 입력하면 된다.
치환
- foo라는 문자열을 bar로 바꾼다.
- :%s/foo/bar
- c 옵션
- :%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>에서 삽입
'엔지니어' 카테고리의 다른 글
message queue늘리는 방법(Solaris) (274) | 2012.07.11 |
---|---|
LINUX 디스크, CPU 정보 확인 명령 (481) | 2012.07.11 |
전산학의 아버지가 남긴 격언 (153) | 2012.07.06 |
소프트웨어 개발방법론의 한계 (327) | 2012.07.06 |
소프트웨어 개발방법론의 함정 (331) | 2012.07.06 |