// 참고: 본 페이지는 아직 소스를 검증하지 않았습니다.
key mapping(매핑)과 매크로 기능을 이용하면 매우 훌륭한 기능을 구현할 수 있습니다. 지금까지는 소스 수정하고 수행을 위해서는 새로운 쉘을 이용하거나 vi를 빠져나와서 수행하고 결과를 봤습니다. 그리고 그 결과를 참조할 일이 있으면 따로 메모장에 긁어붙여서 이용했지요. 그게 귀찮아서 다른 IDE처럼 결과화면이 따로 나왔으면 좋겠다고 생각했습니다. 다음은 그렇게 하는 script입니다.
function! MyExecute(cmd) let tmpnam=tempname() let tmpnam=tempname() let cmdstr=expand(a:cmd) exec "!".a:cmd." 2>&1| tee ".tmpnam if bufexists("ResultWindow") && bufwinnr("ResultWindow") > 0 exe bufwinnr("ResultWindow")."wincmd w" set ma noro else bo 1split enew setlocal bt=nofile file ResultWindow endif exec "0" exec "normal dG" exec "r ".tmpnam exec "silent !rm ".tmpnam redraw! endfunction
:call MyExecute(“ls”) 해보세요. 그럼 그 결과가 새로운 창에 생성됩니다. 물론 이렇게 하면 typing이 많아 대략 귀찮지요.
map :call MyExecute(g:myexec)
이렇게 해두고 :let g:myexec=”ls” 라고 한번만 해두면 앞으로는 를 누를때마다 ls가 실행되고 그 결과창이 생성됩니다. 마지막으로 script류를 작성할 때는 더 편리하게 할 수 있습니다. 예를 들면 python이라면 확장자가 .py로 끝나겠죠? 저 같은 경우는 .vimrc에 아래 줄이 추가되어있습니다.
au BufRead,BufNewFile *.py source ~/.vim/python.vim
그러면 .py로 끝나는 파일이 열리면 ~/.vim/python.vim이 수행됩니다. 그리고 ~/.vim/python.vim에
let g:myexec=”python\ %”
이라고 적어두면 .py로 끝나는 파일들은 를 누르면 자동으로 자신을 실행시키게 됩니다. (“%”가 있는 이유는 :help expand 해보세요.) 아. 물론
au BufRead,BufNewFile *.py let g:myexec=”python\ %”
라고 해도 되지만 다른 python전용 설정이 있을 수 있어서 아예 따로 파일을 뺐습니다.
[참고] http://bindung.egloos.com/m/4387839