如何取得緩衝區的檔案路徑?

如何取得緩衝區的檔案路徑?

我知道寄存器 % 包含當前緩衝區的完整路徑。但是如何透過緩衝區的編號取得另一個緩衝區的完整路徑呢?

VIM中有這樣的函數/指令嗎?

我想解釋一下我是如何想到這個問題的...

有 2 個緩衝區打開。第一個是左側視窗中的 XML 文件,另一個是右側視窗中的 XSD 文件。我編輯了它們。在編輯過程中,我想根據架構驗證 XML。

然而命令

!xmllint --schema /tmp/schema.xsd %

當然,只有噹噹前緩衝區是包含 XML 的緩衝區時才能正常運作。所以我很好奇是否可以/tmp/schema.xsd用某些命令或函數呼叫來替換,這些命令或函數呼叫可以透過緩衝區編號來確定完整路徑。就像是:

!xmllint --schema getBufferPath(3) %

答案1

您可以使用expand()通話。例如

:echo expand("#2:p")

將列印緩衝區 #2 中檔案的完整路徑,您可以使用以下命令列出所有緩衝區:ls

您可以使用其他修飾符和其他關鍵字(有關完整資訊頁面,請參閱:help expand()

這是一個快速摘錄:

           When {expr} starts with '%', '#' or '<', the expansion is done
            like for the cmdline-special variables with their associated
            modifiers.  Here is a short overview:

                   %               current file name
                    #               alternate file name
                    #n              alternate file name n
                    <cfile>         file name under the cursor
                    <afile>         autocmd file name
                    <abuf>          autocmd buffer number (as a String!)
                    <amatch>        autocmd matched name
                    <sfile>         sourced script file name
                    <slnum>         sourced script file line number
                    <cword>         word under the cursor
                    <cWORD>         WORD under the cursor
                    <client>        the {clientid} of the last received
                                    message server2client()
            Modifiers:
                    :p              expand to full path
                    :h              head (last path component removed)
                    :t              tail (last path component only)
                    :r              root (one extension removed)
                    :e              extension only

           Example:
                    :let &tags = expand("%:p:h") . "/tags"
            Note that when expanding a string that starts with '%', '#' or
            '<', any following text is ignored.  This does NOT work:
                    :let doesntwork = expand("%:h.bak")
            Use this:

相關內容