1

我正在编写一个小的 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('%')我“得到”更多的东西。

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

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

4

1 回答 1

4

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

i<C-r>%
"%p

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

于 2017-02-27T08:38:21.273 回答