当前 g f 命令将打开* .pdf文件作为ascii文本。我想用外部工具(如okular,foxitreader等)打开pdf文件。我尝试使用autocmd来实现它:
au BufReadCmd *.pdf silent !FoxitReader % & "open file under cursor with FoxitReader
au BufEnter *.pdf <Ctrl-O> "since we do not really open the file, go back to the previous buffer
但是,第二个autocmd无法按预期工作。我无法找到以<Ctrl-o>
方式执行autocmd
命令的方法。
有人可以给我一个关于如何<Ctrl-O>
autocmd
的提示,或者直接建议用 g f f 打开pdf文件的更好方法KBD>
感谢。
答案 0 :(得分:8)
那是因为autocmd
之后的是一个ex命令(那些开始的命令)
用冒号)。要模拟正常模式命令的执行,请使用
:normal
命令。问题是你不能通过<C-O>
(而不是
<Ctrl-O>
)直接发送到:normal
,它将被视为文字字符(&lt;,
那么C,然后是r)这不是一个非常有意义的正常命令。你有两个
选项:
使用 control v control o 获取一个:
au BufEnter *.pdf normal! ^O
:execute
构建命令通过这种方式,您可以使用转义序列获得更可读的结果:
au BufEnter *.pdf exe "normal! \<c-o>"
无论如何,这不是最合适的命令。 <C-O>
只是跳到了
跳转列表中的上一个位置,因此缓冲区保持打开状态。我会做
类似的东西:
au BufEnter *.pdf bdelete
相反。我还有另一种解决方案。
使用地图创建另一个命令,例如 gO 。然后使用您的PDF阅读器
如果你在MacOS X或Darwin中,可以直接使用open
这样的实用工具(不确定是否
其他Unix系统拥有它,以及它如何调用)。它就像双击一样
作为参数传递的文件图标,因此它将打开您的默认PDF阅读器
或配置为默认打开任何文件的任何其他应用程序,如图像或
如此。
:nnoremap gO :!open <cfile><CR>
此<cfile>
将扩展到光标下的文件。所以,如果你想
在Vim中打开文件,使用 gf 。如果要使用默认值打开它
申请,使用 gO 。
如果您没有此命令或更喜欢仅使用PDF的解决方案,请创建地图 您的首选命令:
:nnoremap gO :!FoxitReader <cfile> &<CR>
答案 1 :(得分:0)
如果可接受默认应用程序,则只需在命令模式下使用:!open %
即可。您始终可以在vim配置文件等中将其映射到合适的领导者组合。
如果您想要某种可以在普通模式下使用的功能,则可以尝试以下操作(我也用它来打开HTML文件),并根据自己的需要进行修改:
if has('win32') || has ('win64')
autocmd FileType html nmap <Leader>g :silent ! start firefox "%"<cr>
elseif has('mac')
autocmd FileType html nmap <Leader>g :!open "%"<cr><cr>
endif