【问题标题】:To open files in Grep's output to Vim's -o -mode将 Grep 输出中的文件打开到 Vim 的 -o -mode
【发布时间】:2019-08-22 14:19:15
【问题描述】:

如何将文件列表放入 Vim 的 -o -mode 中?

我有一个文件列表作为 Grep 的输出。 我跑不成功

1

grep -il sid * | vim -o

2

grep -il sid * | xargs vim -o

3

grep -il sid * | xargs vim

4

vim -o `grep -il sid *`

5

vim -o | grep -il sid *

【问题讨论】:

标签: vim


【解决方案1】:

试试

vim -p `grep -il sid *`

如果您想在同一窗口的不同选项卡中打开文件。

【讨论】:

  • 我认为这应该是答案。完全符合预期,无需额外工作。
  • 这对我来说是最好的解决方案。在我的终端中使用 xargs 是有问题的,只能在第一次工作,但不是第二次或第三次。
  • 这对我有用,除非在我的情况下,有必要将'r'添加到'-il'(所以'-ilr')以便在当前目录下的目录中递归.
  • 一个很好的版本是使用 -O 和 vim 打开垂直列。 vim -O grep -il <pattern> *
  • 如果任何文件包含空格,这将不起作用。
【解决方案2】:

运行:

grep -il sid * | vim -

这告诉 vim 从标准输入读取文件,所以 grep 的输出将在 vim 中。 现在,将光标放在文件上并按 gF - 这将在 grep 指示的行打开文件。

您也可以使用 ^WF 在新的拆分中打开文件。

【讨论】:

  • 这甚至适用于包含空格的文件名并且易于记忆。
  • 用这样的文件列表打开缓冲区后,您可以运行:% normal gf<C-v><C-o> 以自动在新缓冲区中打开所有文件。有关更多信息,请参阅我的回答:stackoverflow.com/a/69743457/5964556
【解决方案3】:

第二个对我有用。第三也是,虽然你在开始时只看到一个文件。在大多数情况下,4 与 2 相同。 first 和 last 不应该按设计工作。

【讨论】:

  • 我无法理解我的 Zsh 出了什么问题。这些命令现在对我来说同样有效。
  • 有趣,我也用 zsh。所以你一定有一段时间对你很不利:-)
  • 这会导致可怕的Vim: Warning: Input is not from a terminal 错误,之后终端基本上无法使用,直到使用stty sane 恢复。见superuser.com/q/336016
【解决方案4】:

对不起,我迟到了。其中一些选项对我有用,但有奇怪的副作用。试试这个:

vim -o $(grep -il sid *)

【讨论】:

  • 在 Ubuntu 上,所有其他答案都抱怨输入不是来自终端。在那之后,我的终端被冲洗了。
  • 此解决方案在空间上失败并存在安全问题。
  • 这对我有用,除非在我的情况下,有必要将'r'添加到'-il'(所以'-ilr')以便在当前目录下的目录中递归.
  • 这会导致可怕的Vim: Warning: Input is not from a terminal 错误,之后终端基本上无法使用,直到使用stty sane 恢复。见superuser.com/q/336016
【解决方案5】:

要使用xargs 调用vim,必须使用-o 调用xargs

grep -il sid * | xargs -o vim -o

如果文件名可能包含空格,请使用 grep -Zxargs -0

grep -ilZ sid * | xargs -0 -o vim -o

没有xargs -o,我们会收到警告:

Vim: Warning: Input is not from a terminal

-o 选项存在于 OSX/BSD 上。此外,-o 选项位于GNU findutils built from git 中。此选项是在 4.6.0 之后添加的。

【讨论】:

  • -o 仅存在于 OSX/BSD。
  • 该选项也已添加到 GNU findutils 但尚未发布。我已经相应地更新了答案。
  • 更新:GNU findutils 4.7.0 发布。
【解决方案6】:

除非其中一些文件名包含空格,否则第二个应该可以工作。你应该这样做

grep -il sid * | xargs -d "\n" vim -o

如果这是可能的。 -d "\n" 告诉 xargs 在读取参数时使用换行符作为分隔符;通常它是任何空格(换行符、制表符或空格字符)

【讨论】:

  • 这会导致可怕的Vim: Warning: Input is not from a terminal 错误,之后终端基本上无法使用,直到使用stty sane 恢复。见superuser.com/q/336016
猜你喜欢
  • 2016-08-30
  • 1970-01-01
  • 1970-01-01
  • 2017-01-01
  • 2012-06-04
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多