如何使用管道在vim中打开文件

Kri*_*hna 17 linux bash vim locate pipe

locate非常频繁地使用该命令。

因此,如果我运行以下命令。

locate updatedb | head -1
Run Code Online (Sandbox Code Playgroud)

然后它给了我 O/p

/usr/updatedb.conf
Run Code Online (Sandbox Code Playgroud)

我想知道有没有这样的命令可以让我直接打开那个文件?

我希望有这样的事情。

locate updatedb | head -1 | vim
Run Code Online (Sandbox Code Playgroud)

小智 24

你快完成了:

$ locate updatedb | head -1 | xargs vim
Run Code Online (Sandbox Code Playgroud)

有时(在某些终端下)您需要在编辑后重置终端。

$ reset
Run Code Online (Sandbox Code Playgroud)

  • 很可能你的 `locate` 版本有 `-l` / `--limit` / `-n` 选项,所以你不需要 `head -1`:`locate -n 1 updatedb | xargs vim` (2认同)
  • 为什么会出现这种终端损坏的情况呢?有什么办法可以避免吗? (2认同)

Ing*_*kat 20

作为一个交互式编辑器,Vim 需要 stdin 和 stdout,所以在管道中使用它是有问题的,并让 Vim 对此发出警告。对于单个文件,进程替换很容易解决这个问题:

vim "$(locate updatedb | head -1)"
Run Code Online (Sandbox Code Playgroud)

你也可以使用反引号,它甚至可以在 Vim 内部使用:

:edit `locate updatedb | head -1`
Run Code Online (Sandbox Code Playgroud)


M I*_*ama 5

除了上面的答案之外,为了避免 Jacobo de Vera 在评论中所说的“终端损坏”,请使用 xargs 选项-o--open-tty让 vim 假设输入来自终端,而不是标准输入。

$ locate updatedb | head -1 | xargs -o vim
Run Code Online (Sandbox Code Playgroud)

请参阅:https ://unix.stackexchange.com/a/44428/307359