如何在Vim脚本中执行外部命令?

9

我希望在Vim脚本中执行外部命令,但是我不知道怎么做。例如,我需要使用chmod命令更改文件权限(请假设应用程序有足够的权限来运行该命令)。

有没有方法可以实现这一点?


1
可能是如何通过vimscript运行shell命令?的重复问题。 - Ciro Santilli OurBigBook.com
3个回答

9
如果你希望用户能看到输出(或与命令交互),则使用:!命令是正确的。对于静默执行(我想这应该是你的chmod所需的),使用system()更可取。特别是在Windows上,这可以避免弹出必须手动关闭的命令提示符窗口。
:call system('chmod +x ' . shellescape(fname))

不错的解决方案。有没有办法获取调用system()的输出并手动向用户显示?例如通过Vim中的echo()命令。 - Afshin Mehrabani
2
它返回输出,退出状态在v:shell_error中。:help system()是你的好朋友 :-) - Ingo Karkat

6
您可以使用:! vim命令。例如,要从vim内部(因此也从vim脚本中)输出echo 'Hello, World!',请键入:
:! echo 'Hello, World\!'

在vim中。或者,在vim脚本中,您可以只放置

! echo 'Hello, World\!'

在使用!命令时需要加\转义!字符的原因是vim会对!字符在!命令参数中进行特殊处理。如果你执行的命令没有包含任何!字符,那么就不需要转义它。

如果你想深入了解更多信息,可以输入

:help :!

在vim中,就像@FDinoff所说的那样。

还要确保查看:h :! - FDinoff

2

我更倾向于按下 Ctrl-z 或运行 :sus 暂停 vim 进程,这样你就可以在 shell 中进行任何操作。

完成后,运行 fg(前台)以恢复你的 vim 会话。

更多信息可以在这里找到。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接