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

In vim ex mode, what does @% do?

我正在写一些 vim 领导者映射来将(GitHub 风味降价)中的文件转换为 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('%') 替换了它,我 "get" 多了一点。

任何人都可以解释其中的区别,甚至可以去哪里查找吗?我确实读过 :help :@,但它谈到了 Execute the contents of register as an ex command似乎 不是这里发生的事情。

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

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

i<C-r>%
"%p

在您的第一个示例中,shellescape() 需要一个字符串作为其第一个参数并输出一个字符串。恰好@%的类型是String所以@%可以直接使用