[英]How to close cmd window from vim command after using latexmk?
我是vim的新手,正在使用它来键入我的latex
文档。 我在Windows上工作,并在vimrc文件中定义了此映射:
autocmd FileType tex inoremap ,lc <Esc>:w! \| !latexmk -pdf -pv %<CR>
运行latexmk时,它将打开一个cmd窗口,然后打开PDF查看器窗口。 但是,它不会关闭cmd窗口,然后我必须通过按任意键关闭该窗口。 有什么方法可以定义我的地图,使其关闭命令行并打开我的PDF? 我想像
autocmd FileType tex inoremap ,lc <Esc>:w! \| !latexmk -pdf %<CR> \| !latexmk -pv %<CR>
可以工作,但事实并非如此。
你可以试试:
autocmd FileType tex inoremap ,lc <Esc>:w! \| !latexmk -pdf -pv %<CR> \| call feedkeys(' ')<CR>
feedkeys()
模拟给定键的按下, feedkeys()
是按空格键,它会为您关闭命令消息。
当您刚接触Vim时,我可能会分享一些其他建议以改善您的上述代码,您可能会对这些建议感兴趣:
您可以将<buffer>
参数添加到映射中:
autocmd FileType tex inoremap <buffer> ,lc ...
它将映射您shortkey 只有乳胶缓冲区。 没有它,一旦加载了乳胶文件,每个缓冲区和窗口都会解释您的映射,这不是您想要的。
您可以创建专用功能来执行所需的工作:它将提高可读性并使其更易于修改。 确实,您的自动命令行正变得很长,以供阅读,如果您想添加更多功能,可能会更长。
因此,您可以将代码转换为如下形式:
autocmd FileType tex inoremap <buffer> ,lc <Esc>:call MakeLatex()<CR> function MakeLatex() w! !latexmk -pdf -pv % call feedkeys(' ') endf
根据您要映射的确切行为,可以在映射中用<co>
替换<esc>
。
这样,您可以在键入快捷方式后保持在“插入”模式:
autocmd FileType tex inoremap <buffer> ,lc <CO>:call MakeLatex()<CR>
要改进的最后一件事(恕我直言)是将所有这些放到单独的ftplugin文件中。 这样,您可以分离只需要为Latex文件使用的功能,并使添加更多基于文件类型的功能更加容易。
为此,转到您的vim主目录(在Windows上应为~/.vim
或~/vimfiles
)并创建文件<YOUR_VIM_DIR>/ftplugin/tex.vim
; 每次您要编辑乳胶文件时都将加载此文件,而不需要任何autocmd FileType tex
。 然后将以下代码放入该文件:
inoremap <buffer> ,lc <co>:MakeLatex<cr> command! -buffer MakeLatex call s:make_latex() function s:make_latex() w! !latexmk -pdf -pv % call feedkeys(' ') endf
与上面的版本相比,它是一个稍微改进的版本,因为现在, 所有内容都在缓冲区或脚本本地。 在以前的版本中, MakeLatex()
函数作用域对于Vim是全局的,而在Latex文件之外则不需要。 在此版本中, s:make_latex()
在脚本本地,而MakeLatex
命令在缓冲区本地,因此命令/功能的范围实际上仅限于Latex文件。
希望这可以是有用的,祝大家开心!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.