在vim函数内以正常模式执行命令

时间:2012-05-17 07:58:16

标签: vim

我有两个命令的正常映射,一个用于调用LaTeX(映射到F6键),另一个用于BiBTeX(F5)。这些工作正如我所期望的那样。我有一个函数来按顺序运行它们,以确保正确插入所有引用和引用。这个功能是这样的:

function FullDocumentGeneration()
  execute "normal \<F6>"
  execute "normal \<F5>"
  execute "normal \<F6>"
  execute "normal \<F6>"
endfunction

这很有效,除了一个细节:运行命令后,会显示一条消息(在shell中),按Enter键返回vim(通常在运行shell命令时),但执行流程进入vim无论如何---没有我按Enter键。这特别烦人,因为我通常想检查程序输出,所以我必须按Ctrl-Z才能返回shell。无论如何避免这种情况?我在函数中做错了什么?

2 个答案:

答案 0 :(得分:0)

据推测,下一个映射会干扰命中输入提示。 尝试插入

call getchar()

在各行之间,可能前缀为echo "Press any key"

答案 1 :(得分:0)

当您使用execute时,一旦命令完成,您将退回到之前使用的任何模式。既然您正在编写一个功能来执行您想要执行的操作,那么为什么不在通话中将其全部放在一行中,例如:!cmd line 1 && cmd line2 && cmd line3,然后它会全部转到shell。或者,您可以编写一个shell脚本来执行您想要的操作,并通过展开%在当前文件上调用它。例如,我一直在用rst和pdflatex写作,所以我一直在做以下几点。

:!rst2html.py % latex-files/%.tex && cd latex-files && pdflatex %.tex

%扩展为当前文件名。 %:p扩展到当前打开文件的绝对路径。