note

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()

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s