我正在尝试将 bash 命令的输出重定向到一个新文件中。
如果我尝试如下管道:
ls -la | vim
Run Code Online (Sandbox Code Playgroud)
Bash 向我展示了错误:
Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.
Run Code Online (Sandbox Code Playgroud)
我知道我可以打开 Vim 然后使用:
:r !ls -la
Run Code Online (Sandbox Code Playgroud)
但是有没有办法在 bash 本身中做到这一点,以便打开 Vim 并将输出自动粘贴到那里?
cha*_*aos 168
您可以使用进程替换(这也适用于无法读取的应用程序STDIN):
vim <(ls -la)
Run Code Online (Sandbox Code Playgroud)
或者使用vim的函数读取STDIN:
ls -la | vim -
Run Code Online (Sandbox Code Playgroud)
Cri*_*rph 45
你真的很亲近自己。你只是少了一个角色。
ls -la | vim -
Run Code Online (Sandbox Code Playgroud)
Ala*_*Ali 22
这是另一种方法,希望能教给某人一些新东西。
如果您知道该命令:r !ls -la在 vim 中有效,您可以执行以下操作来打开 vim 并使其在打开后立即运行该命令,直接从 bash:
vim -c ':r! ls -la'
Run Code Online (Sandbox Code Playgroud)
这相当于打开vim然后执行命令:r! ls -la。这应该适用于任何vim命令,其中命令在-c选项之后。