我已经用过moreutils
套件几次,我发现它让你进一步思考基本实用程序,并且很有洞察力(而且很有趣)。例如,vipe
vim
允许在管道中间运行类似编辑器的操作并在继续执行之前编辑数据1。例如:
function refcheck_vipe() { echo -n "$@ documentation last udate: "; links -dump "http://www.gnu.org/software/$@/manual"| vipe | grep 'last updated' | vipe | cut -d ' ' -f 7,8,9 | vipe ; }
# refcheck_vipe grep
每次 time(3)vipe
被任意放置在管道中并因此被调用时,都会在 vim 中呈现数据,一旦退出,执行就会继续。所以在这里你会得到网页, 匹配的线最后是孤立的细绳。也许缺少的是我在某些情况下保留使用过的缓冲区来比较内容......
我不知道你可以多路复用vim
(!)中缓冲区的布局。现在我想知道我是否要在 vim 上启动我的命令命令行,是否有一种方法可以将每个 vipe 执行“步骤”重定向到不同的缓冲区。并允许tmp
文件在我退出后以某种方式继续显示内容。事实上,您必须执行:q
才能继续执行到下一个“步骤”,所以我不知道如何使我刚才所说的与此相一致。另一方面,我注意到我可以:split new
这样做:r! ls
,并且其输出也将包含在内。
为了总结和添加上下文,我正在考虑这样的事情:
command1 | vipe1 | command2 | vipe2 | command n | vipe n
would be wrapped by the answer to produce this in vim(the vipe part):
-------------------------
| | | | A buffer would open to the right side
| vipe | vipe | vipe | for every vipe command in the pipeline.
| step1 | step..| step n|
| | | |
| | | |
-------------------------
| | | Bottom left you see a "file manager".
|find . | \ | whatever | Its contents could be refreshed, from
|vidir - | | time to time.
-------------------------
:cli
我知道vim
不是一个窗口管理器或者复用器。这里的目标是展示 shell 命令中的数据处理,同时提高我的 vim 技能2。重点是vim
,但考虑到vipe
读取 EDITOR 变量,我也会感兴趣地阅读利用emacs
.
那么,我是否可以实现一些别名/函数/设置来完成我所描述的内容(通过将缓冲区直观地添加到编辑器的右侧,对于vipe
管道中的每个命令,允许以某种集成方式比较我获得的输出)?
1. 如果我将一些命令与正则表达式串在一起,但它不起作用(通常是这种情况),我将回溯,删除命令并简化管道中的表达式,直到我可以隔离问题。因此vipe
在某些情况下可以提供帮助。
2. 除了应对必须使用系统的情况外,开箱或者i3不存在!
[..] 未引用但出现在代码示例中,vidir
。
答案1
vipe 使用临时文件(对我而言/tmp
)在 Vim 之间传递和接收管道内容。由于管道的原因,以前的 vipe 调用无法再重新编辑;它们已经被 vipe 重新读取并沿着管道发送。因此,保存前一个 vipe 临时文件就足够了(因为原来的文件已被 vipe 删除),并在下一次从 vipe 调用 Vim 时重新打开该文件。
以下自动命令针对单个先前的管道步骤执行此操作。由于我无法识别 vipe 临时文件中的任何模式,因此这广泛处理在/tmp
;中打开的所有文件。如果将 vipe 重新配置为使用单独的目录或唯一的命名方案会更好(较新的 vipe 版本支持--suffix SUFFIX
,因此您可以变成*
)*.SUFFIX
:
草图
autocmd BufWritePost /tmp/* silent! bdelete ~/.previous-vipe | keepalt write! ~/.previous-vipe
autocmd BufRead /tmp/* pedit ~/.previous-vipe