我知道寄存器 % 包含當前緩衝區的完整路徑。但是如何透過緩衝區的編號取得另一個緩衝區的完整路徑呢?
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: