3

で指定されたバッファMyCommandにアクセスする必要がある実行したい。今、私は似たようなことをしていますb:somevar<afile>

function F()
    let l:a = bufnr(expand("%"))
    let l:b = bufnr(expand("<afile>"))
    execute "bufdo call G(" . l:b . ")"
    execute "buffer " . a
endfunction

function G(d)
    let l:a = bufnr(expand("%"))
    if l:a == a:d
        execute 'MyCommand'
    endif
endfunction

autocmd BufDelete *.hs :call F()

したがってF()、ロードされたすべてのバッファがにあるかどうかをチェックし<afile>ます。それは機能しますが、かなり気が狂ったように感じます。もっと良い方法があるはずです。

4

1 に答える 1

2

にアクセスする必要がある場合(および を介してバッファの内容にMyCommandアクセスする必要がある場合) は、 を使用できます。b:somevargetbufline()getbufvar(expand('<abuf>'), 'somevar')


一方、バッファでコマンドを直接実行する必要がある場合は、次のように一時的にバッファをウィンドウに表示する必要があります。

function! ExecuteInVisibleBuffer( bufnr, command )
    let l:winnr = bufwinnr(a:bufnr)
    if l:winnr == -1
        " The buffer is hidden. Make it visible to execute the passed function.
        let l:originalWindowLayout = winrestcmd()
            execute 'noautocmd silent keepalt leftabove sbuffer' a:bufnr
        try
            execute a:command
        finally
            noautocmd silent close
            silent! execute l:originalWindowLayout
        endtry
    else
        " The buffer is visible in at least one window on this tab page.
        let l:currentWinNr = winnr()
        execute l:winnr . 'wincmd w'
        try
            execute a:command
        finally
            execute l:currentWinNr . 'wincmd w'
        endtry
    endif
endfunction
于 2013-01-22T09:06:09.627 に答える