gpt4 book ai didi

vim - 用命令输出替换视觉选择

转载 作者:行者123 更新时间:2023-12-04 19:38:50 26 4
gpt4 key购买 nike

我想用管道传输到命令中的选择结果替换一行的部分内容。

例如:

echo "hello $(echo "world" | base64)" | vim -

这将打开一个缓冲区 hello d29ybGQK在里面。现在按 wvw视觉选择 d29ybGQK .

然后我尝试了 :!base64 -d我希望缓冲区包含 hello world ,这没有发生。确实,整行都通过管道传输到命令中,并替换了整行。

是否可以仅替换视觉选择,并且仅将该选择通过管道传输到命令中?

我也尝试过 c<c-r>=system('base64 -d')但这并没有将视觉选择发送到命令的标准输入。

最佳答案

使用 ! 过滤总是按行。您的解决方案 c
表达式寄存器是解决这个问题的好方法。你只是忘记了
将输入传递给 system() ,这是它的第二个可选参数。

由于您刚刚更改了选定的文本,因此它进入了 "登记
自动地。你需要做的就是把它拿回来并传递给
系统与 getreg() :

c<C-R>=system('base64 -D', getreg('"'))

请注意 base64可能会在末尾回显换行符。如果你想删除
它,要么将整个内容包裹在 trim() 中,Vim 8 中的新函数,或
使用 [:-2] :
c<C-R>=trim(system('base64 -D', getreg('"')))
c<C-R>=system('base64 -D', getreg('"'))[:-2]

这是 [0:-2] 的简写, 意思是从角色中获取一切
0 到结果字符串中的倒数第二个。

如果您经常使用它,请考虑创建一个可视化 map :
vnoremap <leader>d c<C-R>=system('base64 -D', getreg('"'))[:-2]<CR>

关于vim - 用命令输出替换视觉选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52474689/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com