vimrc

vim를 잘 쓰고 싶은데.

그래서 찾은 글 하나. 요즘은 친절하게 github에 자신들이 만들어 놓은 vim 설정파일 들을 올려놓는다. 만든 이 자신이 백업용으로, 다른 머신에서 사용할 수 하려는 것이 일차 목적이겠지만 친절하게 설명까지 해주니.  고마울 따름이지.

Why I use VIM

다만 위에 있는 걸 사용하는데 clang plugin에서 에러가 난다. 에러 화면이 순식간에 지나가버려서.  고치기 귀찮은데.

나도 회사에서 몇 년째 사용하고 있는 환경을 github에 올려놓고 집이랑 회사에서 조금씩 개선해가고 싶은데 회사에서는 github에 올리기가 그러니.

ctags

ctags -R --exclude=AAA/\* .  
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .

:make 
:cn next compile error 
:cp previous compile error

Clear highlighted text with Ctrl+L

se hlsearch
" Ctrl-L clears the highlight from the last search
noremap  :nohlsearch
noremap!  :nohlsearch

Window navigation with Ctrl+arrow

noremap   j
noremap   k
noremap   h
noremap   l
noremap   :bd!

clang auto-completion

ctrl+p  

Vim autocmd 활용

불필요한 white space 지우기

.vimrc에 다음 내용 추가

    function! TrimWhiteSpace()  
        %s/s+$//e  
    endfunction  

    autocmd BufWritePre     *.c :call TrimWhiteSpace()
    autocmd BufWritePre     *.cpp :call TrimWhiteSpace()
    autocmd BufWritePre     *.h :call TrimWhiteSpace()
    autocmd BufWritePre     Makefile* :call TrimWhiteSpace()
  • 반드시 vimrc에서 정의하는 함수는 대문자로 시작해야 함(Trim…)
  • “Autocmd”는 뒤에 나오는 옵션에 따라 특정 파일(세번째 옵션)에 대해 특정 이벤트가 발생할 때(두번째 옵션) 동작을 지정한다. 예를 들어 위 첫번째 예는 *.c 파일에 대해 BufWritePre(starting to write the whole buffer to a file) 이벤트가 있으면 TrimWhiteSpace()라는 함수를 호출한다(:call TrimWhiteSpace())
  • utocmd가 지원하는 Event는 다양한데 여기나 :help autocmd 명령에 나오는 도움말에서 찾을 수 있다.

자동으로 불리는 게 싫으면 위 autocmd대신 핫 키를 지정하면 된다.

2) Hot-key를 눌러 위 기능을 수행하려면, 아래 내용을 .vimrc에 추가

    let mapleader=","

    nmap    <leader>t :call TrimWhiteSpace()<CR>

위의 경우 ‘,’를 leader key로 정의하여 ‘,t’를 누르면 TrimWhiteSpace 함수가 호출된다.

응용

코딩 스타일마다 다르겠지만, if, for를 사용할 때 항상 공백을 하나 두고 괄호를 시작하는데 깜빡하고 그렇지 않은 코드가 있거나, 다른 사람이 작성한 일부 코드의 스타일을 바꾸고 싶다면 이렇게 하면 됩니다.

    function! ReplaceString()
       silent! %s/if(/if (/g
       silent! %s/for(/for (/g
    endfunction

    autocmd BufWritePre     *.c :call ReplaceString()
    autocmd BufWritePre     *.h :call ReplaceString()

Vim plugins

[https://github.com/gmarik/vundle](https://github.com/gmarik/vundle) Vim plugin 설치/관리
[http://www.vim.org/scripts/script.php?script_id=1658](http://www.vim.org/scripts/script.php?script_id=1658) NerdTree
[http://www.vim.org/scripts/script.php?script_id=1984](http://www.vim.org/scripts/script.php?script_id=1984) FunnzyFind.. 이건 아직 잘 모르겠네
[http://www.vim.org/scripts/script.php?script_id=2572](http://www.vim.org/scripts/script.php?script_id=2572) grep보다 만배는 편한 ack