在vim ex模式下,@%做什么?

时间:2017-02-27 08:04:23

标签: vim ex

我正在编写一个小的vim leader映射,将(GitHub风格的markdown)中的文件转换为pdf。

这两项工作,似乎在功能上等同:

nnoremap <expr> <leader>pdf ':! pandoc -f markdown_github --latex-engine=xelatex ' . shellescape(@%,1). ' -o ' . shellescape(expand('%:r'), 1) . ".pdf \<cr>"

nnoremap <expr> <leader>pdf ':! pandoc -f markdown_github --latex-engine=xelatex ' . shellescape(expand('%'),1). ' -o ' . shellescape(expand('%:r'), 1) . ".pdf \<cr>"

我让第一个工作(感谢Stack Overflow;)但我并没有真正理解第一个shellescape中的@%。所以我用expand('%')替换了它,我得到了更多。

任何人都可以解释这个差异,甚至可以去哪看?我确实阅读了:help :@,但它谈到Execute the contents of register as an ex command,其中似乎就是这里发生的事情。

任何帮助/指针都会很棒!

1 个答案:

答案 0 :(得分:4)

@%是一个寄存器,包含与当前缓冲区关联的文件的名称。它可以像任何其他寄存器一样使用,例如:

i<C-r>%
"%p

在第一个示例中,shellescape()期望String作为其第一个参数并输出一个String。它发生在@%的类型为String,因此@%可以直接使用。