Unix Linux

vim 설정 및 활용

_침묵_ 2006. 11. 10. 06:39

출처 :http://superkkt.com/86 

 

 

:set ts=4 ( tab stop, tab을 4칸으로 설정 )
:set sw=4 ( shift width, 자동들여쓰기 시 4칸씩 들여쓰기 )
:set nobackup ( 백업파일을 만들지 않는다 )
:set cindent ( C형태의 들여쓰기 )
:set ruler ( 터미널 하단에 라인수/커서위치 표시 )
:set rulerformat=%70(%<%40.45f\ %m\ %r%=%l/%L,\ %c%V\ %4P%) (오른쪽 하단에 표시되는 ruler의 포맷을 원하는대로 조절한다)
:syntax on ( 편집 파일의 형태에 따라 구문의 색을 다르게 표시 )
:set fo+=r (/* */ 형태의 주석을 달때 *를 자동으로 붙여줌)
:filetype plugin indent on (omni completion 사용시 파일타입에 따라 자동완성을 해주도록하는 옵션)
:set hls (VIM 7부터 search 할 때 검색된 스트링을 하이라이트 해주지 않는다. 이 옵션을 사용해서 하이라이트 할 수 있다)
:set completeopt=menu (Omni Completion을 사용할때 창이 split되면서 preview를 보여주는 기능은 사용하지 않고 오직 menu popup만 띄우도록 설정)
:hi Search term=reverse ctermfg=0 ctermbg=3 (검색된 문자열 강조색 변경)

:%retab(tab에 대한 새로운 설정으로 문서를 retab)
:%s/^I/ /g(모든 탭(^I)을 하나의 space( )로 변경)

내가 사용중인 .vimrc

set ts=4
set sw=4
set autoindent
set cindent
set smartindent
set ruler
set fo+=r
set hls
set completeopt=menu
set rulerformat=%70(%<%40.45f\ %m\ %r%=%l/%L,\ %c%V\ %4P%)
filetype plugin indent on
hi Search term=reverse ctermfg=0 ctermbg=3
hi PmenuSel ctermbg=4
hi PmenuSbar ctermbg=4
syntax on
imap <F2> <C-X><C-O>
map <F3> :set paste<CR>
map <F4> :set nopaste<CR>
vmap <F5> :norm i//<CR>
vmap <F6> :norm xx<CR>
vmap <F9> zf
map <F10> zo
map <F11> zc
map <C-b> :tabprevious<CR>
map <C-n> :tabnext<CR>
map <F12> :tabnew<CR>:e .<CR>


vim에서 검색된 문자열을 강조하는 색상은 기본적으로 노란색이다. 그런데 글자색이 그대로 있어서 노란색으로 강조가되면 글자가 안보인다. 그래서 위의 hi 문장을 사용해서 글자색을 어두운 색으로 변경해서 강조가 되더라도 글자가 잘보이게 변경한다. 전체적인 색상 설정은 :hi 를 치면 볼 수 있다. PmenuSel과 PmenuSbar hi 설정은 vim 7의 Omni Completion을 사용할때 셀렉트 박스의 색깔 때문에 글자가 안보이는 문제를 해결하기 위해 추가했다.

map 옵션은 프로그래밍 할 때 자주 사용하는 기능들을 펑션키로 축약시켜 놓은것이다.

F2: Insert 모드에서 Omni Completion을 실행한다.
F3: Paste 모드로 전환한다. Paste 모드에서는 autoindent 및 기타 설정이 reset되기 때문에 붙여넣기를 해도 정렬이 흐트러지지 않는다.
F4: Paste 모드를 해재한다. reset 되었던 입력 관련 옵션들이 다시 원상 복귀된다.
F5 : Visual로 설정한 영역을 모두 주석처리한다.
F6: Visual로 설정한 영역의 주석을 모두 제거한다.
F9: Visual로 설정한 영역을 폴딩한다.
F10: 폴딩된 영역을 다시 펼친다.
F11: 다시 펼쳐진 영역을 다시 폴딩한다.
F12: vim 7부터 추가된 기능인 탭 기능을 활요하기 위한 설정이다. F12키를 누르면 새로운 탭을 만들면서 현재 폴더의 파일리스트를 보여준다.
Ctrl + b: 이전탭으로 이동 (=gt)
Ctrl + n: 은 다음탭으로 이동 (=gT)

탭과 관련된 자세한 도움말은 :help tabpage를 참조한다.


* 파일네비게이션바 만들기

:20vs ./
열기를 원하는 파일에 가서 shitf + o
네비게이션바로 이동은 ctrl + ww


* 구간 설정해서 들여쓰기

1. v로 비주얼모드에서 구간을 설정하고
:'<,'><  또는 :'<,'>> 로 원하는 만큼 들여쓰기, 내어쓰기(<,>의 개수만큼 들여쓰기됨)

2. v로 비주얼모드에서 구간을 설정하고
Shift + > 또는 Shift + <를 누르면 들여쓰기, 내어쓰기가 가능하다. 하지만 이 방법은 1칸씩만 들여/내어쓰기를 할 수 있다.

3. 마크를 사용해서 마크부터 현재까지도 적용시킬 수 있음
마크 후에 원하는 라인으로 이동 후
:'a,.>


* 설정한 구간에 있는 내용에서만 일괄변환하는 방법

- 구간을 설정해서 모든 탭을 제거하는 방법
v로 비주얼모드에서 구간 설정 후
:'<,'>s/\t//g (이때 s 앞에 % 사용하지 않음)


* 설정한 구간에 일괄적으로 주석 추가/제거 하는 방법 - 1

- 주석 추가
v로 비주얼모드에서 구간 설정 후
:'<,'>s/^/\/\//gc
a 키로 all 선택

- 주석 제거
v로 비주얼모드에서 구간 설정 후
:'<,'>s/^\/\///gc
a 키로 all 선택


* 설정한 구간에 일괄적으로 주석 추가/제거 하는 방법 - 2

- 주석 추가
v로 비주얼모드에서 구간 설정 후
:'<,'>norm i// (라인 앞에 //를 추가한다)

- 주석 제거
v로 비주얼모드에서 구간 설정 후
:'<,'>norm xx  (x의 개수만큼 앞에서부터 지워진다)



* 열고 닫는 대괄호 찾는 방법

함수나 루프에서 열고 닫는 대괄호를 자동으로 찾아서 이동시키는 기능이다. 열린 대괄호에서 ]}를 누르면 닫히는 대괄호로 이동하고, 닫힌 대괄호에서 [{를 누르면 열린 대괄호로 이동한다.


* 코드 접는 방법

v로 비주얼모드에서 블럭 설정 후
zf를 누르면 폴딩이 된다.

풀때는 폴딩된 코드 위에서 zo를 누르면되고 풀린 코드 영역에서 zc를 누르면 아까 폴딩했던만큼 다시 폴딩된다.


* 함수/변수명 자동완성

함수나 변수명을 일부만 쓰고 Ctrl + p를 누르면 자동완성이 된다. 만약 여러개가 검색이 되면 Ctrl + p를 계속 누르면서 원하는걸 찾아서 사용 할 수 있다.


* 소스코드를 HTML으로 저장하기

:so $VIMRUNTIME/syntax/2html.vim

화면이 split되면서 html에 코드가 보일것이다. 여기서 <body> 부분의 색상을 아래와 같이 바꿔주면 vi에서 소스코드를 보는것과 똑같은 html 페이지를 얻을 수 있다.

<body bgcolor="black" text="white">


* 코딩중에 해당 함수의 MAN 페이지 보기

함수명 위에서 Shit + k를 누르면 MAN 페이지가 열린다. q를 누르고 빠져나오면 다시 vi로 돌아온다.


* 소스코드 자동 정렬

정렬이 안되어있는 구간을 visual로 선택한 후 = 키를 누르면 자동정렬이 된다. 이 기능은 웹에서 소스코드를 복사해서 vi에 붙여넣기 했을때 정렬이 깨지는 경우 유용하게 사용 할 수 있다.


* 현재 세션 저장
:mks

현재 사용중인 vim의 세션을 파일로 저장한다. 탭도 세션에 포함되기 때문에 퇴근전 세션을 저장하고 다음날 아래와 같이 세션을 로드하면 어제 작업하던 환경 그대로 작업을 이어갈 수 있다.

# vim -S Session.vim


* 현재 파일의 라인길이를 보는 방법
Ctrl + g


* Undo branches (Vim 7 Only)
:earlier 2h

위 명령으로 2시간 전의 코드 상태로 한번에 되돌아 갈 수 있다. 반대는 아래와 같이..
:later 2h

자세한 내용은 :help earlier 참조바람..

* tab page 사용시에 모든 탭에서 동일한 명령을 실행시키고 싶은 경우
:tabdo 명령

특히 위의 명령어는 tab page를 사용해서 여러개의 파일을 열어놓고 작업하다가 cvs commit을 한 경우 모든 파일의 헤더정보가 변경된다. 그래서 reload를 해줘야 하는데 이때 :tabdo e 명령을 사용하면 간편하게 모든 페이지를 reload 할 수 있다.

* 선택한 라인의 모든 문자를 대소문자 변환하는 방법
:V로 비주얼모드 선택 후 + u(소문자) 또는 + U(대문자)

* 선택한 라인의 한 줄 길이를 지정한 길이로 조정하는 방법
:V로 비주얼모드 선택 후 + gq


참고 :http://project.sds.co.kr/wiki/wiki.php?vim&action=show&dummy=1

'Unix Linux' 카테고리의 다른 글

솔라리스 메모리 관리  (0) 2006.11.10
LD_ASSUME_KERNEL  (0) 2006.09.22
초보자를 위한 리눅스 커널의 메모리 관리  (0) 2006.09.20