vi 中的 Bash 命令

har*_*arp 34 shell bash vim vi

是否可以在 vi 中键入 bash 命令并获取标准输出?

我发现仅仅因为我想在 shell 中查找某些东西而关闭并重新打开 vi 通常很乏味。

dai*_*isy 47

是的,例如,如果您想做,请ls尝试:

:!ls

要生成外壳,请使用

:shell

  • 事实上,我经常做的事情是在编辑某些内容时忘记以 root 身份运行 vi。这个命令使我免于冗长的重写,次数超过了我的记忆。`:w !sudo tee %` (3认同)

Rqo*_*mey 14

我倾向于使用ctrl+z睡眠vi,在shell中运行我需要的东西,然后fg恢复vi。不完全是您问题的答案,但我发现这是一种非常快速的工作方式。

如果您忘记在后台打开 vi(这可能在您忙碌时发生),当您尝试使用退出 shell 时,ctrl+d您将收到警告您正在运行后台作业,您可以关闭它们,或再次按 ctrl+d 退出。此外,如果您尝试重新打开同一个文件两次,则会收到恢复警告,因此您可以按a中止,然后运行 ​​fg 返回到 vi。


Ran*_*832 11

既然你提到了“获取标准输出”,请注意你可以做

:r! command
Run Code Online (Sandbox Code Playgroud)

并且命令的输出将被添加到文件中,或者

:<range>!command
Run Code Online (Sandbox Code Playgroud)

通过命令过滤范围的内容[例如:1,$!wc]


小智 5

我喜欢的习语是

!!command
Run Code Online (Sandbox Code Playgroud)

这是简写

:.!command
Run Code Online (Sandbox Code Playgroud)

它通过命令管道当前行并将输出插入文件。对我来说最常见的情况是使用 vi 编辑命令并运行:

!!sh
Run Code Online (Sandbox Code Playgroud)

或者

!<motion>command
Run Code Online (Sandbox Code Playgroud)

例如(例如)

!apsh
Run Code Online (Sandbox Code Playgroud)

通过 shell 运行整个当前段落。

  • 注意`!}`你必须位于段落的开头,试试`!ap`。(我不知道这是在每个vi中还是只有vim中) (2认同)