我正在编写一个小的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
,其中似乎就是这里发生的事情。
任何帮助/指针都会很棒!
答案 0 :(得分:4)
@%
是一个寄存器,包含与当前缓冲区关联的文件的名称。它可以像任何其他寄存器一样使用,例如:
i<C-r>%
"%p
在第一个示例中,shellescape()
期望String作为其第一个参数并输出一个String。它发生在@%
的类型为String,因此@%
可以直接使用。