vim
google Software Engineer이신 Bram Moolenaar씨가 만드신 개량판 vi
VIM - Vi Improved
쓰고 또 쓰고, 또 쓰다보면 정말 신기한 놈이다. 이거 없으면 컴퓨터가 하기 싫어진다는.. ㅋㅋ
google Software Engineer이신 Bram Moolenaar씨가 만드신 개량판 vi
VIM - Vi Improved
쓰고 또 쓰고, 또 쓰다보면 정말 신기한 놈이다. 이거 없으면 컴퓨터가 하기 싫어진다는.. ㅋㅋ
,
레지스터,
명령,
버퍼,
여러파일,
이동,
파일color vc
syn on
set history=500 " keep 100 lines of command line history
set hlsearch
set ruler
set tabstop=4
set shiftwidth=4
set nobackup
set nocompatible
set fileencoding=korea
"set enc=utf-8
set showmatch
set is
set dip=iwhite,icase,vertical
"C indent 설정하기
set nocp incsearch
set cinoptions=:0,p0,t0
set cinwords=if,else,while,do,for,switch,case
set formatoptions=tcqr
set cindent
"set ic
"below script for match it
"source $VIMRUNTIME/macros/matchit.vim
"runtime macros/matchit.vim
map <F1> :q!<CR>
map <F3> :nohlsearch<CR>
map <F4> :set number!<CR>
map <F5> :set ts=8<CR>
map <F7> I/* <ESC>A */<ESC>
map <F8> :s/\/\* \(.*\) \*\//\1/
map <F9> :w!<CR>
map <F10> :set columns=181<cr><C-w>=zR]c
map ; ebve<C-Insert>
map ,1 :b1<CR>
map ,2 :b2<CR>
map ,3 :b3<CR>
map ,4 :b4<CR>
map ,5 :b5<CR>
map ,6 :b6<CR>
map ,7 :b7<CR>
map ,8 :b8<CR>
map ,8 :b8<CR>
map ,9 :bp<CR>
map ,0 :bn<CR>
imap <C-j> <DOWN>
imap <C-k> <UP>
imap <C-h> <LEFT>
imap <C-l> <RIGHT>
"imap <TAB> <Space><Space><Space><Space>
map -
map =
map <space> l
vmap <space> zf
autocmd FileType html set formatoptions+=tl
autocmd FileType css set smartindent
autocmd FileType html,css set noexpandtab tabstop=2
abbr p% printf("\n", );
abbr inculde include
abbr q1 q!
abbr Q1 q!
abbr Wq wq
abbr WQ wq
abbr wQ wq
abbr wq1 wq!
abbr WQ1 wq!
abbr Wq1 wq!
abbr wQ1 wq!
abbr #b /************************************************************
abbr #e ************************************************************/
abbr THe The
abbr ds diffs
abbr 2html runtime! syntax/2html.vim
set noeb
set commentstring=//%s
set lines=50
set columns=90
winpos 700 0
"set tags=D:\p4\KTF\src\tags
set tags=D:\depot\dp\shibumi\releases_7.2.7-br\src\tags
set path=c:\Program\ Files\\Microsoft\ Visual\ Studio\ 8\\VC\PlatformSDK\include
,
vimrc,
vimrc설정,
나만의 작업1. 저장하고 종료하기
저장하며 종료하기 위한 꼼수로는 map을 씁니다. 다음과 같은 명령을 .vimrc파일에 넣어두고 <F9>키를 누르면, 저장하고 종료하기가 실행됩니다.
map <F9> :wq!<CR> "<F9>키를 누르면 저장하고 끝내라!
2. 저장하지 않고 종료하기
저장하지 않고 종료하기 위한 꼼수로도 map을 씁니다. 다음과 같은 명령을 .vimrc파일에 넣어두고 <F1>키를 누르면, 저장하지 않고 종료하기가 실행됩니다.
map <F1> :q!<CR> "<F1>키를 누르면 저장하지 말고 끝내라!
3. 종료하면서 발생하는 오타 방지하기
종료하면서 발생하는 오타를 방지하기 위한 꼼수로는 abbr을 씁니다. 다음과 같은 명령을 .vimrc파일에 두고 사용하다 보면 가끔씩 발생하는 오타명령시 예를 들어 :wq 명령으로 종료를 해야하는데 :Wq명령을 치게 되는 경우(':'이 shift key를 누르면서 쳐야되는 글자이기 때문에 이와 같은 실수가 꽤나 자주 발생하는 편입니다.) abbr이 자동으로 Wq를 wq로 바꾸어 주기 때문에 vim을 사용하는데 있어 흐름을 깨지 않고 편하게 사용할 수 있습니다. 덧붙여 말씀드리면 Wq라는 단어를 사용하는 경우가 거의 없기 때문에 abbr로 지정을 하고 사용해도 큰 불편을 느끼지 못한다는 사실!
abbr q1 q!
abbr Q1 q!
abbr Wq wq
abbr WQ wq
abbr wQ wq
abbr wq1 wq!
abbr WQ1 wq!
abbr Wq1 wq!
abbr wQ1 wq!
※ vim을 엊그제부터 사용하기 시작한 초보자를 위한 참고사항!
- map은 해당 키를 사용자가 지정한 명령으로 바꾸어 주는 기능입니다.
- abbr은 사용자가 입력모드에서 입력시 복잡하고 긴 단어를 짧고 간결하게 바꾸어주는 기능입니다.
- <CR>은 map명령에서 Carriage Return을 의미합니다. 이는 ^M(이거 한글자입니다)과 같은데, 여기서 ^M은 Ctrl+V + Ctrl+M의 조합으로 입력할 수 있습니다.
,
꼼수,
저장,
종료- 무한 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에서는 대문자 명령과 소문자 명령 사이에는 반대의 뜻이 담겨 있습니다!
- [0] : 숫자를 입력합니다.
- [A] : 글자를 입력합니다.
ex) 4tJ : tJ를 4번 반복합니다. 따라서 현재 라인의 4번째 J바로 앞으로 커서가 이동합니다.
- | : 백스페이스바로 및 또는 바로 왼쪽에 있는 \와 같이 있는 글자입니다.
^: 현재라인의 시작부분으로 이동(공백무시)
0: 현재라인의 시작부분으로 이동(공백포함)
$: 현재라인의 끝부분으로 이동
워드단위이동(공백기준)
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: 이전에 블럭 지정해 둔 부분 다시 블럭 지정하기
- $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: