current gf命令将打开*.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
Run Code Online (Sandbox Code Playgroud)
但是,第二个autocmd无法按预期工作.我无法找到一种以某种方式执行<Ctrl-o>命令的autocmd方法.
任何人都可以给我如何暗示<Ctrl-O>的autocmd,或干脆直接提出一个更好的方法来打开PDF文件gf?
谢谢.
那是因为autocmd一个ex命令(以冒号开头).要模拟正常模式命令的执行,请使用该
:normal命令.问题是你不能直接传递<C-O>(而不是
<Ctrl-O>):normal,它将被视为文字字符(<,然后是C,然后是r),这不是一个非常有意义的正常命令.您有两种选择:
使用controlvcontrolo得到一个:
au BufEnter *.pdf normal! ^O
Run Code Online (Sandbox Code Playgroud)
:execute构建命令这样,您可以使用转义序列获得更可读的结果:
au BufEnter *.pdf exe "normal! \<c-o>"
Run Code Online (Sandbox Code Playgroud)
无论如何,这不是最合适的命令.<C-O>只是跳转到跳转列表中的上一个位置,因此缓冲区保持打开状态.我会做的事情如下:
au BufEnter *.pdf bdelete
Run Code Online (Sandbox Code Playgroud)
代替.我还有另一个解决方案.
比如用地图创建另一个命令gO.然后直接使用您的PDF阅读器,或者open如果您使用的是MacOS X或Darwin(不确定其他Unix系统是否拥有它,以及如何调用它).这就像双击作为参数传递的文件的图标一样,因此它将打开默认的PDF阅读器或任何其他配置为默认打开任何文件的应用程序,如图像等.
:nnoremap gO :!open <cfile><CR>
Run Code Online (Sandbox Code Playgroud)
这<cfile>将扩展到光标下的文件.因此,如果要在Vim中打开文件,请使用gf.如果要使用默认应用程序打开它,请使用gO.
如果您没有此命令或更喜欢仅使用PDF的解决方案,请为首选命令创建一个映射:
:nnoremap gO :!FoxitReader <cfile> &<CR>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1737 次 |
| 最近记录: |