Vim 将可视块发送到外部命令

Vim 将可视块发送到外部命令,vim,Vim,如何向外部命令发送可视块 我使用Ctrl-q选择我的块,然后按*程序名*但是Vim发送整行而不是所选的文本块 我在Windows 10上使用gVim。Vim总是将整行命令发送到外部命令,但您可以使用Romaill在这个问题中的回答功能来实现这一点: 将非逐行选择传递给外部程序的操作如下 这: 备份寄存器的内容 在该寄存器中拖动所选内容 将该寄存器的内容传递给system()并输出结果 恢复寄存器 这是一个函数: function! VisualCountWords() range

如何向外部命令发送可视块

我使用Ctrl-q选择我的块,然后按
*程序名*
但是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=…
)。