将视觉块发送到外部命令

use*_*487 5 vim

如何将视觉块发送到外部命令?

我使用 Ctrl-q 选择我的块,然后按,!*program_name*但 Vim 发送整行而不是选定的文本块。

我在 Windows 10 上使用 gVim。

小智 3

Vim 总是将整行发送到外部命令,但是您可以使用本问题中 romainl 的答案功能来做到这一点:

将视觉选择发送到外部程序而不影响缓冲区

将非逐行选择传递给外部程序是这样完成的:

  • 备份寄存器的内容
  • 拉出该寄存器中的选择
  • 将该寄存器的内容传递给 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
Run Code Online (Sandbox Code Playgroud)

您可以在这样的映射中使用:

xnoremap <F6> :call VisualCountWords()<CR>