![在管道中使用 vim 在退出时将当前行转储到标准输出?](https://linux22.com/image/1566922/%E5%9C%A8%E7%AE%A1%E9%81%93%E4%B8%AD%E4%BD%BF%E7%94%A8%20vim%20%E5%9C%A8%E9%80%80%E5%87%BA%E6%97%B6%E5%B0%86%E5%BD%93%E5%89%8D%E8%A1%8C%E8%BD%AC%E5%82%A8%E5%88%B0%E6%A0%87%E5%87%86%E8%BE%93%E5%87%BA%EF%BC%9F.png)
我可以做这样的事情吗:
$ ls | vim | xargs ...
并让 vim 将在退出时通过视觉选择的任何行传递到 stdout?
如果仅仅转储“当前行”会更容易,那么这样做也可以。
我当然愿意将一些命令行参数传递给 vim,或者自定义 vimrc 以使其工作。
注意:我想使用这个功能让我能够使用 VIM 在命令行上以交互方式选择任何一段文本,无论它是整行还是单行的部分。
答案1
我找到了一个可以很容易地与 vim 配合使用的解决方案,所以现在我可以做这样的事情
$ ls | choose.sh | xargs ....
这将启动 vim,允许我直观地选择所需的文本,并在按下 时将选定的文本传递到 stdout F4
。请注意,我也可以只编辑缓冲区并将其修改为仅包含我想要选择的文本,然后保存并退出,缓冲区的内容将传递到 stdout。因此,vim 的所有功能都可以在命令行上以交互方式“选择”某些内容!
我可以使用 vim 通过将以下内容添加到我的.vimrc
(snagged从这里)
map <F4> "*yggdG"*pZZ
并将以下内容保存到脚本中(snagged从这里)
选择文件
#!/bin/bash
# create temporary file
TMPFILE=`mktemp /tmp/vipe.bashXXXXXXXX`
cat > ${TMPFILE}
vim ${TMPFILE} < /dev/tty > /dev/tty
cat ${TMPFILE}
rm ${TMPFILE}
答案2
你choose.sh
基本上重新实现了vipe
(六、管道) 命令更多工具:
SYNOPSIS command1 | vipe | command2 DESCRIPTION vipe allows you to run your editor in the middle of a unix pipeline and edit the data that is being piped between programs. Your editor will have the full data being piped from command1 loaded into it, and when you close it, that data will be piped into command2.