Answers:
是的,例如,如果您想这样做ls
,请尝试:
:!ls
要生成外壳,请使用
:shell
:w !sudo tee %
nano
我倾向于使用ctrl+z
vi睡眠,在shell中运行所需的东西,然后fg
恢复vi。不完全是您问题的答案,但是我发现这是一种非常快速的工作方式。
如果您确实忘记了在后台打开vi(这可能在您很忙时发生),那么当您尝试使用登出Shell时,系统ctrl+d
会警告您您正在运行后台作业,您可以关闭它们,或再次按ctrl + d退出。另外,如果您尝试重新打开同一文件两次,则会收到恢复警告,因此您可以按a
放弃,然后运行fg返回到vi。
由于您提到了“获取标准输出”,因此请注意,您可以执行
:r! command
命令的输出将添加到文件中,或者
:<range>!command
通过命令[例如:1,$!wc
] 过滤范围的内容
:%!command
看起来非常有用
:.,+20 !sort
]
我首选的成语是
!!command
这是简写
:.!command
它通过命令通过管道传递当前行,并将输出插入文件中。对我而言,最常见的情况是使用vi编辑命令并运行:
!!sh
要么
!<motion>command
例如(例如)
!apsh
通过shell运行当前段落的整个部分。
!}
您必须放在段落的开头,请尝试!ap
。(我不知道这是在每个vi还是仅在vim中)
通过使用冒号和感叹号,您可以在shell路径和shell脚本中运行任何命令,请记住该命令在运行vi / vim程序的用户及其环境下运行。
:!<command>
由于vi使用的是运行时有效的环境,因此它使用与父命令相同的路径。请记住,某些外壳程序会在路径中保留程序的缓存,而vi可能无法使用此缓存(取决于它使用的外壳程序及其版本),因此如果您拥有更多的外壳程序,则可能会运行错误的二进制文件而不是一个同名二进制文件。