Vim 将可视块发送到外部命令
如何向外部命令发送可视块 我使用Ctrl-q选择我的块,然后按Vim 将可视块发送到外部命令,vim,Vim,如何向外部命令发送可视块 我使用Ctrl-q选择我的块,然后按*程序名*但是Vim发送整行而不是所选的文本块 我在Windows 10上使用gVim。Vim总是将整行命令发送到外部命令,但您可以使用Romaill在这个问题中的回答功能来实现这一点: 将非逐行选择传递给外部程序的操作如下 这: 备份寄存器的内容 在该寄存器中拖动所选内容 将该寄存器的内容传递给system()并输出结果 恢复寄存器 这是一个函数: function! VisualCountWords() range
*程序名*
但是Vim发送整行而不是所选的文本块
我在Windows 10上使用gVim。Vim总是将整行命令发送到外部命令,但您可以使用Romaill在这个问题中的回答功能来实现这一点: 将非逐行选择传递给外部程序的操作如下 这:
- 备份寄存器的内容
- 在该寄存器中拖动所选内容
- 将该寄存器的内容传递给system()并输出结果
- 恢复寄存器
function! VisualCountWords() range
let n = @n
silent! normal gv"ny
echo "Word count:" . system("echo '" . @n . "' | wc -w")
let @n = n
" bonus: restores the visual selection
normal! gv
endfunction
可以在以下映射中使用:
:'<,'>B !tr 'a-z' 'A-Z'
xnoremap:调用VisualCountWords()
Ex命令是基于行的,而块视觉模式是Vim扩展。这就解释了功能不匹配的原因 提供了一个
:B
命令,允许您将实际选定的块发送到Ex命令。它也适用于:代码>,因此您可以执行以下操作:
:'<,'>B !tr 'a-z' 'A-Z'
:“谢谢。不幸的是,由于设计原因,我不能做我想做的事情。我需要的能力,森与外部命令或脚本的灵活性文本块。哦,好吧,请看上面的评论。我说得太快了。这个插件更接近我想要的,但是我想对块选择中的所有行进行排序。我使用的外部排序命令允许我按版本号(sort-V)排序。与Vissort类似,但更具灵活性。如果您只想对所选文本进行排序(并保留每行前后的内容),vis.vim就是解决方案。如果要根据所选列对整行进行排序,只需使用:!排序…
,但指定字段(通过--key=…
)。