是否可以在 vi 中输入 bash 命令并获取标准输出?
我发现仅仅因为我想在 shell 中查找某些内容而关闭并重新打开 vi 通常很乏味。
答案1
是的,例如,如果您想做ls
,请尝试:
:!ls
要生成 shell,请使用
:shell
答案2
我倾向于使用ctrl+z
睡眠 vi,在 shell 中运行我需要的内容,然后fg
恢复 vi。不完全是您问题的答案,但我发现这是一种非常快速的工作方式。
如果您忘记在后台打开 vi(这可能会在您忙碌时发生),当您尝试使用注销 shell 时,ctrl+d
系统会警告您有后台作业正在运行,您可以关闭它们,或再次按 ctrl+d 注销。另外,如果您尝试重新打开同一个文件两次,您会收到恢复警告,因此您可以按a
中止,然后运行 fg 返回 vi。
答案3
既然您提到“获取标准输出”,请注意您可以这样做
:r! command
命令的输出将被添加到文件中,或者
:<range>!command
通过命令过滤范围的内容 [eg :1,$!wc
]
答案4
通过使用冒号和感叹号,您可以在 shell 路径和 shell 脚本中运行任何命令,请记住该命令在运行 vi/vim 程序并使用其环境的用户下运行。
:!<command>
由于 vi 使用运行时有效的环境,因此它使用父命令中的相同路径。请记住,某些 shell 会在路径中保留程序的缓存,而 vi 可能无法使用此缓存(取决于它使用的 shell 及其版本),因此,如果您有更多的二进制文件,您最终可能会运行错误的二进制文件比一个具有相同名称的二进制文件。