通过管道输出到命令行编辑器以执行下一个命令

通过管道输出到命令行编辑器以执行下一个命令

我一直在使用

sudo find / -iname '*foo*' 2>/dev/null | vim

获取包含 的目录/文件列表foo,然后检查此列表,编辑它,并在 vim 中编写一堆新命令。

在 vim 中编写命令后,我复制所编写的内容并退出 vim,然后将其粘贴到新的命令行中。

Vim 是我的 Cx Ce 命令行编辑器。

我可以让它:wq从这个 vim 会话内部自动用缓冲区填充命令行吗?

因为我会用 Cx Ce 而不是 启动 vim vim

如何使用管道输入启动 Cx Ce vim 会话?

答案1

您可以使用vipe(from moreutils) 作为:

sudo find / -iname '*foo*' 2>/dev/null | vipe | "$SHELL"

wherevipe允许您编辑管道输入,然后将其提供给您首选的 shell。

或者:

sudo find / -iname '*foo*' 2>/dev/null | vipe | xclip -sel c

将编辑后的管道保存到 CLIPBOARD X11 选择中。

vipe将启动存储在 中的编辑器$VISUAL,或者$EDITOR如果$VISUAL未设置或vi两者均未设置。

如果您想使用 将该编辑结果直接推送到 shell 的历史记录中,则zsh可以是:

print -rs -- "$(sudo find / -iname '*foo*' 2>/dev/null | vipe)"

(并用钥匙回忆一下Up)。

要将其直接放入 shell 的编辑缓冲区中,仍然用zsh,替换print -rsprint -rz

或者如果你没有vipe

(){vim $1 && print -rz -- "$(<$1)"} =(sudo find / -iname '*foo*' 2> /dev/null)

你可以为它创建一个函数,例如:

vif sudovif() {
  () {
    vim $1 &&
      print -rz -- "$(<$1)"
  } =(${0%vif} find "$@")
}
vif / -iname '*foo*'

相关内容