Vundle으로 Vimplugin을 쉽게 관리해 보자 (+ vimplugin 모음)
간단히 말해서, vim plugin 관리자 에요...
pacman, rpm, apt-get이 시스템의 패키지를 관리하는거라면 얘는 vim plugin을 관리하죠.
번잡하게 vim.org에서 script 파일다운받아서 플러그인 디렉토리에 저장하는 삽질을 얘가 대신 해 줍니다.
그런고로 설치도 쉽고, 유지하기도 쉽고, 삭제도 깔끔하게 되고좋죠.
1, 저장소로 부터 설치
$git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle
2, ~/.vimrc에 다음 내용을 넣습니다
set nocompatible
filetype off
set rtp+=~/.vim/bundle/vundle/ call vundle#rc()
" 필수 Bundle
Bundle 'gmarik/vundle'
" 이 사이에 원하는 번들(vim plugin)을 넣어줍니다.
3, 설정파일 다시불러오기
:so
~/.vimrc
4, 번들을 검색해 봅니다...
:BundleSearch
<<티스토리는 원본으로 사진올리기 참으로 힘드네여... 말풍선 안쓰면 원본(?)으로 올리기가 안되네요..
그래서 하는김에...일일이 스샷마다 말풍선을 달았습니다 -_-...>>
5, 원하는 번들을 검색합니다. 머 그냥 vim 에서 항상 찾던식으로.. (주의! 대소문자)
/SearchBundleName
6, 찾았으면 그 라인을 복사하고, ~/.vimrc (" 이 사이에 원하는 번들(vim plugin)을 넣어줍니다.)아래에 집어 넣습니다.
그냥 설치해도 되긴하지만.vimrc에 명확하게 정의를 해 놓아야 관리하기가 더 쉽겠죠
(정 안되면 플러그인 디렉토리 뒤져보면 되긴 하지만...)
7, 설정파일을 다시 불러온후, 설치를 시작합니다.
:so ~/.vimrc
:
:BundleInstall
추가사항: 삭제할때는 ~/.vimrc에서 Bundle을 주석/삭제한후 vim을 재 시작 하신 후에
:BundleClean하면 됩니다. (BundleClean이라고 해서 전부가 초기화 되는건 아네요. 주석친거만 삭제!)
8, 이제 실제 제가 사용하는 vim plugin을 정리해 보겠습니다.
아마 저번에도 포스팅한게 있지 않을까 싶긴 한데... 추가된것도 많고, 한 김에 다 정리해 보려구요~
자 시작!
Bundle 'minibufexpl.vim'
" 버퍼를 보기쉽게 만들어 줍니다
~/.vimrc
let g:miniBufExplModSelTarget = 1
let g:miniBufExplorerMoreThanOne = 0
let g:miniBufExplModSelTarget = 0
let g:miniBufExplUseSingleClick = 1
let g:miniBufExplMapWindowNavVim = 1
let g:miniBufExplMapCTabSwitchBuffs = 1
let g:miniBufExplHSplit = 10
let g:miniBufExplSplitAbove=1 "let g:miniBufExplSplitBelow=1
let g:alternateNoDefaultAlternate = 1
" Alt + number 맵핑
map ^[1:bf<CR>
map ^[2 :bf<CR> :bn1<CR>
map ^[3 :bf<CR> :bn2<CR>
map ^[4 :bf<CR> :bn3<CR>
map ^[5 :bf<CR> :bn4<CR>
map ^[6 :bf<CR> :bn5<CR>
map ^[7 :bf<CR> :bn6<CR>
map ^[8 :bf<CR> :bn7<CR>
map ^[9 :bf<CR> :bn8<CR>
Bundle 'matchparenpp'
" 괄호 (),[],{}에 커서를 갖다대면, 상대 괄호를 깜박여 줍니다. 설정할거 없이 그냥 깔아 쓰면 됩니다. 참 쉽죠?
Bundle 'Conque-Shell'
" vim내부에서 shell을 사용합니다.아직은 화면출력에 문제가 있어, 명령어를 잠시 띄울때 사용합니다.
" 개행이 많을경우, clear, man, 기타 ncurses 프로그램을 사용한후 프로그램을 종료하면 잔상이 남는 문제가 있습니다.
" 그냥 잠시동안 사용하고 싶을때 사용하면 좋을거 같네요.
" 아 그리고 중요한것, vim컴파일 할때 python 확장기능이 사용이 가능하게 되어야 사용이 가능합니다.
" 추가적으로 설정, 더 자세한 것은 :help
~/.vimrc
" let g:ConqueTerm_CWInsert = 1
" let g:ConqueTerm_CloseOnEnd = 1 "쉘을 끝내면 창도 자동으로 닫습니다.
Bundle 'sudo.vim'
" root권한이 있는 파일을 저장할때 사용합니다.
" 저장할때는 다음과 깉이 합니다.
:e sudo:filepath
Bundle 'YankRing.vim'
" y,yy명령으로 복사한 내용을 보고, 붙여넣기
" 명령은 다음과 같습니다. 명령자체가 설명이니까, 따로 설명은 하지 않겠습니다~
:YRShow
:YRSearch
:YRClear
:YRPop
:YRPush
" ~/.vimrc 에 yank파일경로를 지정합니다. 안하면 홈 디렉토리가 지저분해 지니까요.
let g:yankring_history_dir = '~/etc/vim'
Bundle 'https://github.com/Lokaltog/vim-powerline.git'
" powerline, vim의 아래창(상태표시줄)을 좀더 visual하게 보여줍니다.
" Shell의 TERM 변수가 "xterm-86color" 또는 "xterm-256color"로 설정되어 있어야 안깨지고 제대로 나옵니다.
" ps; git로 설치하여야 합니다. 일단 제가 설치할때는 번들이 있긴한데 git에서 받아오질 못하더라고요...
" ~/.vim/bundle/vim-powerline/autoload/Powerline/Colorschemes
" Pl#Hi#Segments(['mode_indicator']의 값을 변경하면, MODE색을 다른것으로 바꿀수 있습니다.
" 그리고 좀 더 fansy하게 보이려면 다음을 참조해 보세요.
" https://github.com/Lokaltog/vim-powerline/blob/develop/fontpatcher/README.rst
Bundle 'c.vim'
" c의 skel을 미리 작성해 줍니다. snipMate랑 같이쓰세요...
" 자주 쓰는거 몇개만 요약합니다. 명령 모드에서 다음을 입력 해 보세요.
" 간단한건 아래의 박스... 더 많은 단축키는 여기를 참조하세요 http://lug.fh-swf.de/vim/vim-c/csupport.html
\p< : include (#include <stdio.h>)
\p" : include (#include "stdio.h" )
\im : main function
\if : user defined function
Bundle 'DoxygenToolkit.vim'
" doxygen을 위한 주석 생성기능 입니다.
" 이렇게 하면 나중에 문서화 하기 훨씬 쉽겠죠?
Bundle 'EasyMotion'
" 단어(word)간 이동을 쉽게 합니다, \\w를 눌러보세요 :D
" 주변의 위치로 이동할때, 이제 hhh...,lll...www...WWW... 이런거 좀 적게 하게 되겠죠.
" ps; 단어 이동이 w니까! 로 생각하면 외우시기 좋을겁니다.
\\w |
뒤로 단어 이동 |
\\W |
앞으로 단어 이동 |
\\f |
뒤로 글자 검색 |
\\F |
앞으로 글자 검색 |
Bundle 'neocomplcache'
" 향상된 자동완성 기능
Bundle 'ctags.vim'
Bundle 'cscope.vim'
" 아래 2개는 C,C++프로그래머라면 필수... 말이 필요없죠.
" ctrl + ] 이거 하나만으로도 대단하지 않나요? 해더파일 보는거랑...
Bundle 'cscope-quickfix'
" 제가 ctags와 더불어 오랬동안 사용했던 확장기능 이죠 ㅋㅋ..
" 컴파일 결과를 나타내는 결과 버퍼를 사용합니다. 에러/경고가 발생했을떄 편하게 위치를 이동할수 있습니다.
"~/.vimrc
autocmd BufReadPost quickfix setlocal nonu
autocmd FileType asm set makeprg =nasm\ -f\ bin\ -o\ %<.img\ %
autocmd FileType c,cpp set makeprg =gcc\ -g\ -Wall\ -O2\ %\ -o\ %<
autocmd FileType sh set makeprg =%
" 현재 디렉토리에 Makefile이 있다면, 기존 makeprg 대신 make명령을 사용한다
func! Makefile_Run()
let now_file_path = expand("%:h")
if (now_file_path == "")
let now_file_path = "."
endif
if filereadable(now_file_path."/Makefile")
exec 'lcd ' . now_file_path
set makeprg=make
endif
make
endfun
"저장후 컴파일해서 결과를 봅니다,
"저는 F10을 누르면 컴파일이 되고 아래에 결과가 나오게 설정했어요. 원하시는 키로 바꿔주세요.
map <F10> :ccl<CR>:w!<cr>:call Makefile_Run()<CR>:botright cwindow<CR><CR>
Bundle 'snipMate'
" 명령어 자동완성 기능입니다. c.vim은 복잡한(?)키를 입력해야하지만, 얘는 한방이에요...
" 단점이 있다면, 패턴이 그리 많지 않다는것... 그래서 c.vim과 같이 사용하길 추천합니다.
' 많이 사용하는 자동완성 타입은 다음과 같습니다.
-전처리기
#include <stdio.h> |
inc + <TAB> |
#include "Filename.h" |
Inc + <TAB> |
#ifdef ~ #define ~ #endif |
Def + <TAB> |
#define | def + <TAB> |
#ifdef ~ #endif | ifdef + <TAB> |
- 제어, 반복문
if |
if + <TAB> |
else | el + <TAB> |
do ~ while | do + <TAB> |
while | wh + <TAB> |
for | for + <TAB> (Loop), forr + <TAB> (Custom) |
- 함수
function |
fun + <TAB>, fund + <TAB>, main + <TAB> |
- 선언
typedef struct |
tds + <TAB> |
enum | tde + <TAB> |
- 출력
printf |
pr + <TAB> |
fprintf | fpr + <TAB> |
전 snipMate/snippets/c.snippets 를 다음과 같이 약간 고쳐서 사용합니다. (2013/9/16)
데이터타입/디버그/기타 구문을 입맛에 맞게 추가/수정했습니다...
만약, 추가하실경우 snippet 이름이 겹치지 않게 주의하세요...
" 예> *.c 파일에서 자동완성한 모습.
Bundle 'tComment'
" 주석을 치는 확장기능. c,cpp,sh 등 다양한 포맷의 소스파일에 주석을 쉽게 칠수 있습니다.
" 주석을 해제할때도 "주석 체크"된 곳을 Block으로 잡고나서 "( Ctrl ) + ( _ ) + ( Ctrl ) + ( _ ) 하시면 해제 됩니다.
" 키가 복잡하다.. 하시는 분은 .vimrc에서 shortkey바꾸면 되겠죠.
Bundle 'surround.vim'
" 특정문자열을 태그/따옴표로 감싸는 기능. html태그 string형을 선언할때 유용하다.
" (명령모드에서) vi(블럭잡기) + w(단어) + s (sorround를 사용) + 감쌀 문자열 이런식으로 응용해서 사용합니다.
" 둘러싸는 기능 뿐만아니라, 삭제, 변경(작은따옴표를 큰따옴표로)도 가능합니다.
- 추가
Hello_world -> viws"
=> "Hello_world"
Hello_world ->viws'
=> 'Hello_world'
Hello_world -> viws[
=> [Hello_world]
Hello_world -> viws<head> ;viws< 하면 입력하시면 됩니다.
=> <head>Hello_world</head>
- 변경
"Hello_world" -> cs"' # change surround '(작은따옴표) -> '(큰따옴표)
=> 'Hello_world'
"Hello_world" -> cs"' # change surround '(큰따옴표) -> '(작따옴표)
=> 'Hello_world'
삭제
[Hello_world] -> ds[ # delete surround [ (중괄호)
Hello_world
Bundle 'ShowMarks'
" 왼쪽에 마크를 표시해 줍니다.
\mt - ShowMarks 토글
\mo - (마크가 되어있다면) ShowMarks를 계속 보여줍니다.
\mh - 현재라인의 마크를 삭제합니다.
\ma - 현재버퍼의 모든 마크를 삭제합니다.
\mm - 현재라인에 마크를 답니다(마크번호는 사용가능한 다음 char,
예> 마크가 'b'로 되어있는 상태에서 \mm하면 현재라인에 마크를 'c'로 만듭니다.
~.vimrc
" 첫번째 라인 : 특정 타입을 무시합니다. h: Help, m : Non-modifiable, p : Preview, q : Quickfix, r : Readonly
" 두번째 라인 : 화면에 표시할 마크들을 표시합니다. defaults로 하면 일반적으로 쓰지 않는 마크들도 나와서 혼란...
let g:showmarks_ignore_type= "hprmq"
let g:showmarks_include= "abcdefhijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
" 색깔을 변경합니다. 기본 xterm-256color로는 색깔 구별이 잘 되지 않더군요. 그래서 수정했습니다.
"l : lowcase, u : upcase, o : other, m: multiple
highlight ShowMarksHLl ctermfg=white ctermbg=blue
highlight ShowMarksHLu ctermfg=white ctermbg=blue
highlight ShowMarksHLo ctermfg=white ctermbg=blue
highlight ShowMarksHLm ctermfg=white ctermbg=blue
Bundle 'Align'
" 원하는데로 정렬을 지정할 수 있습니다
" http://www.drchip.org/astronaut/vim/align.html#Examples
Bundle 'Tagbar'
" taglist와 비슷한 확장기능인데... 그것보다 좀 더 좋아 보이네요.
" 사실 그전에 taglist로 적었다 이걸로 바꿨어요 ㅋㅋ
:TagbarOpen
:TagbarClose
:TagbarOpenAutoClose "Tagbar로 요소를 선택하면, 자동으로 Tagbar가 닫칩니다.
:TagbarSetFoldlevel n "최대 어느깊이n 까지 출력할까... 하는 옵션이라고 하네요. 전 C라 depth가 그리 깊게까지 못가봐서..
:TagbarToggle "Show/Hide 가 반복되는거죠 그냥...
:TagbarShowTag
~/.vimrc
let g:tagbar_left = 1 "0이면 오른쪽, 1이면 왼쪽에 출력
let g:tagbar_width = 30 "기본폭은 40입니다. 모니터가 작으면 줄여야 겠죠 ㅠ
let g:tagbar_autoclose = 1 "선택하면 자동으로 닫히게 하려면 1을 할당해 주세요
Bundle 'ctrlp.vim'
"프로젝트 디렉토리설정/파일이동을 쉽게 합니다
" 실행할떄는 :CtrlP, 창을 종료하려면, ESC를 두번 눌러 주시면 됩니다.
:CtrlP
:CtrlPDir
:CtrlPBufTag
:CtrlPBufTagAll
:CtrlPBuffer
:CtrlPChange
Bundle 'The-NERD-tree'
" 이번에도 디렉토리 이동을 쉽게 할 수 있는 확장기능 입니다.
" CtrlP보다 디렉토리 트리 이동이 가능합니다. 무었보다도 한눈에 트리가 보이니까 편하네요.
" 실행은 :NERDTree, 사용방법은 NERDTree창에 '?'를 입력하면 도움말을 보실수 있습니다.
" 그래도 뭐 간단히 아래에 사용법 추가.
" hjkl로 방향이동
"기본적인 사용법은 다음과 같습니다
" 더 확실한 도움말을 원하시면, NERDTree에서 ?를 입력해 보세요.
? : 도움말창 토글
q : NERDTree 종료
- 디렉토리 이동
u : 상위 디렉토리로 이동
U : 상위 디렉토리로 이동, 모든 디렉토리리스트를 접음.
c : 선택된 디렉토의 하위 리스트를 새창을 열어서 보여줍니다.
C : 현재 선택된 디렉토리를 ROOT디렉토리로 두기(chroot)
cd : 현재 디렉토리명을 보여줌 (pwd)
P : 최상위 디렉토리(ROOT)로 이동
p : 부모 디렉토리로 이동
K : 첫번째 자식디렉토리로 이동
J : 마지막 자식디렉토리로 이동
- 새로고침
r : 현재 위치한 디렉토리를 새로고침
R : 전체 새로 고침
- 현재 선택된것이 디렉토리라면
o : 디렉토리 노드를 열기(보여주기)/접기
O : 모든 하위 디렉토리를 열기(보여주기)
X : 열린 모든 하위 디렉토리를 닫기(O와 반대)
- 현재 선택된것이 파일이라면
o : 미리보기 윈도우를 띄워서 미리보기
go : 미리보기
t : 새탭으로 열기
i : 수평분할해서 보여줍니다.
gi : 미리보기 윈도우를 사용하여 수평분할해서 보여줍니다.
s : 수직분할해서 보여줍니다.
gs : 미리보기 윈도루르 사용하여 수직분할해서 보여줍니다.
:NERDTreeFromBookmark "Bookmarkname" "북마크된걸 최상위 루트로 해서 엽니다
:NERDTreeToggle "Tagbar과 비슷한거죠머.. 토글기능. 없으면 나오게 하고, 이미 있으면 없애고..
:NERDTreeMirror "다른탭에 있는 NERDTree를 현재 탭과 공유하는 기능이라고 하는데... 사용하지 않아서 전 잘 모르겠어용
:NERDTreeClose
:NERDTreeFind "현재 열려있는 파일의 디렉토리의 트리를 봅니다. 그러니까, 현재디렉토리가 /tmp라면 새로띄우는 NERDTree의 Root는 /tmp 가 된다... 이말이죠.
~/.vimrc
let g:NERDChristmasTree = 1 "colorful 효과
let g:NERDTreeAutoCenter = 1
let g:NERDTreeChDirMode = 1
let g:NERDTreeHighlightCursorline = 1 "현재 커서 위치를 하일라이팅합니다. 기본값은 1
let g:NERDTreeSortOrder=['\.c$', '\.h$', '*'] "*.c, *.h, 기타파일 순으로 정렬합니다.
let g:NERDTreeBookmarksFile = ~/.NERDTreeBookmarks "북마크 파일을 지정합니다. 이값은 디폴트 값이에요.
let g:NERDTreeIgnore = ['\.vim$', '\~$'] "*.vim파일과 끝이'~'로 끝나는 파일들은 보여주지 않습니다.
let g:lNERDTreeWinSize = 20 "NERDTree의 폭을 설정합니다.
let g:NERDTreeMinimalUI = 1 "NERDTree에서 (위에뜨는) help/bookmark 메세지를 보여주지 않습니다.
" let g:NERDTreeShowHidden = 1 "숨김파일을 보여준다고 합니다.
" let g:NERDTreeShowLineNumbers=1 "라인을 보여줍니다
" let g:NERDTreeShowFiles = 0 "0이면 파일을 보여주지 않고, 디렉토리만 보여줍니다.
" let g:NERDTreeWinPos = right "이렇게 설정하면 오른쪽에 NERDTree가 나타납니다.
" 이외에 더 자세한건 :help NERDTree
Bundle 'echofunc.vim'
" 커서에 위치해 있는 define/변수가 정의된 형태를 상태표시줄에 보여준다
" 딱히 추가적으로 키 누르고 그런건 없습니다.
" 대신 "$ctags -R --fields=+lS ." 같이 해서 미리 태그를 만들어 둬야겠지요...
" 근데 옜날엔 잘 됬는데 이제 이 확장기능이 맛이 갔네요 아놔... 그래서 스샷은 딴걸로 대체 ㅠ.
let g:EchoFuncLangsUsed = ["java","cpp","c"] "적용할 언어
let g:EchoFuncPathMappingEnabled = 1 "특수디렉토리(홈디렉토리 하위파일들)에 있으면 파일경로를 자동으로 단축
let g:EchoFuncKeyNext = '<C-+>' "다음 태그
let g:EchoFuncKeyPrev = '<C-->' "이전 태그
"set statusline+=%{EchoFuncGetStatusLine()}
"let EchoFuncShowOnStatus = 1
Bundle 'myprojects'
ref :
https://github.com/gmarik/vundle
ps; 와 이거 작성하는데 시간 무지하게 오래 걸리네요...
ps2; 그래도 그림이 있으니깐 훨씬 이해하기 쉬운듯...
ps3; 티스토리 글작성기능은 처음부터 끝까지 병신이네요.. 이렇게 에디트가 불편해서 어디 자주 포스팅 하겠나...?
ps4; 원래 완벽하게 다 포스팅 다해놓은 다음에 공개하려고 했는데, 그러다간 언제 할지 몰라서 그냥 이정도로 완성할래요 ㅠ
'Linux > 내부설정' 카테고리의 다른 글
fcitx - ibus를 대체하는 한글 입력기 (3) | 2013.01.29 |
---|---|
Vim Session 기능, highlight color 재 설정 (6) | 2012.12.07 |
Linux Kernel 3.x.x 에서 Virtualbox돌릴시 생기는 문제점 해결 (8) | 2012.10.16 |
슈퍼패미콤 에뮬레이터로 고전게임 해보기! (4) | 2012.06.02 |
삭제된 파일 파일 복구기 (4) | 2012.05.25 |