![通过管道输出到命令行编辑器以执行下一个命令](https://linux22.com/image/185509/%E9%80%9A%E8%BF%87%E7%AE%A1%E9%81%93%E8%BE%93%E5%87%BA%E5%88%B0%E5%91%BD%E4%BB%A4%E8%A1%8C%E7%BC%96%E8%BE%91%E5%99%A8%E4%BB%A5%E6%89%A7%E8%A1%8C%E4%B8%8B%E4%B8%80%E4%B8%AA%E5%91%BD%E4%BB%A4.png)
我一直在使用
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 -rs
为print -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*'