我一直在使用
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*'