'vim script'에 해당되는 글 2

  1. 2012.02.21 Vim Script 관련 자료
  2. 2012.02.21 [Vim] Source Explorer 플러그인이 특정 상황에서만 동작하게 하기

[Vim] Source Explorer 플러그인이 특정 상황에서만 동작하게 하기

srcexpl.vim가 편리하기는 한데 커서가 움직이면 보고 있던 소스를 볼 수 없다.
커서가 움직이면 현재 위치한 코드와 연관된 소스를 자동으로 보여줘서 오히려 불편하다.

- Eclipse처럼 Ctrl, Shift 키를 누르고 있을때만 동작하게 하자.
키 매핑과 관련해서 검색을 해봤는데 내가 원하는 내용은 없다.

- 특정 변수를 사용해서 필요한 경우에만 동작하도록 하는게 좋을거 같다.

myvimrc
let g:view_source = -1
nmap ,v :let g:view_source = 0<CR>*# "view_source가 0인 경우에만 srcexpl이 동작하게 한다.

srcexpl.vim (version 4.3)
" SrcExpl_Refresh() {{{

" Refresh the Source Explorer window and update the status

function! g:SrcExpl_Refresh()
    
    if g:view_source == -1
"        call SrcExpl_ReportErr("g:view_source is " . g:view_source)
"        echo "view_source off at refresh"
        return -9
    endif

    " Tab page must be invalid
    if s:SrcExpl_tabPage != tabpagenr()
        return -1
    endif

    " If or not the cursor is on the main editor window
    if &previewwindow || SrcExpl_AdaptPlugins()
        return -2
    endif

    " Avoid errors of multi-buffers
    if &modified
        call SrcExpl_ReportErr("This modified file is not saved")
        return -3
    endif

    " Get the ID of main editor window
    let s:SrcExpl_editWin = winnr()

    " Get the symbol under the cursor
    if SrcExpl_GetSymbol()
        return -4
    endif

    let l:expr = '\<' . s:SrcExpl_symbol . '\>' . '\C'

    " Try to Go to local declaration
    if g:SrcExpl_searchLocalDef != 0
        if !SrcExpl_GoDecl(l:expr)
	    let g:view_source = -1
"            echo "view_source off at decl"
            return 0
        endif
    endif

    " Try to tag something
    call SrcExpl_TagSth(l:expr)

    let g:view_source = -1
"    echo "view_source off at tagsth"

    return 0

endfunction " }}}
view_source가 0일때만 동작하게 한다.
소스 미리보기를 한후에는 view_source를 -1로 돌려서 이전 내용이 지워지지 않게 한다.


[todo] -1로 만드는 부분이 저렇게 3군데 있어야 하나?396 쯤에 넣어두면 되지 않나?