【问题标题】:How to close cmd window from vim command after using latexmk?使用latexmk后如何从vim命令关闭cmd窗口?
【发布时间】:2019-09-05 03:15:32
【问题描述】:

我是 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>

可以工作,但事实证明不行。

【问题讨论】:

    标签: windows vim latex


    【解决方案1】:

    你可以试试:

    autocmd FileType tex inoremap ,lc <Esc>:w! \| !latexmk -pdf -pv %<CR> \| call feedkeys(' ')<CR>
    

    feedkeys() 模拟给定键的按下,出现空格键,它应该为您关闭命令消息。


    其他建议

    由于您是 Vim 新手,您可能会对我想分享的一些其他建议感兴趣,以改进您的上述代码:

    • 您可以将&lt;buffer&gt; 参数添加到您的映射中:

      autocmd FileType tex inoremap <buffer> ,lc   ...
      

      它会将您的快捷键映射为乳胶缓冲区。没有它,一旦加载了乳胶文件,每个缓冲区和窗口都会解释您的映射,我猜这不是您想要的。

    • 您可以创建一个专用函数来执行您想要的工作:它将提高可读性并使其更易于修改。确实,您的自动命令行阅读起来变得很长,如果您想添加更多功能,它可能会更长。

      所以你可以把你的代码变成这样的:

      autocmd FileType tex inoremap <buffer> ,lc <Esc>:call MakeLatex()<CR>
      
      function MakeLatex()
          w!
          !latexmk -pdf -pv %
          call feedkeys(' ')
      endf
      
    • 根据您希望映射的确切行为,您可以在映射中将 &lt;esc&gt; 替换为 &lt;c-o&gt;

      这样,您可以在输入快捷方式后保持插入模式:

      autocmd FileType tex inoremap <buffer> ,lc <C-O>:call MakeLatex()<CR>
      
    • 最后要改进的事情(恕我直言)是将所有这些放入一个单独的 ftplugin 文件中。通过这种方式,您可以分离只需要 Latex 文件的功能,并且可以更轻松地添加更多基于文件类型的功能。

      为此,请转到您的 vim 主目录(在 Windows 上应该类似于 ~/.vim~/vimfiles)并创建文件 &lt;YOUR_VIM_DIR&gt;/ftplugin/tex.vim;每次您要编辑乳胶文件时都会加载此文件,而无需任何autocmd FileType tex。然后将以下代码放入该文件中:

      inoremap <buffer> ,lc <c-o>: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 文件。

    希望这是有用的,快乐的vimming;

    【讨论】:

    • 您好,非常感谢您的回答。我已经使用了您的代码,但 cmd 窗口没有关闭。我认为这是因为我的 vim 窗口打开了一个 cmd 窗口,然后打开了查看器,因此输入空格键的顺序丢失了。那有意义吗?如果没有,会发生什么?
    • 对不起,我没有读够你的问题,我错了你对“cmd窗口”的意思(那里的linux用户)。所以我的回答对你的问题没用,祝你好运
    • 没问题,谢谢你的额外建议,不过,它们看起来很整洁。
    猜你喜欢
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多