Shell 将当前缓冲区作为字符串(!)传输到外部命令

Shell 将当前缓冲区作为字符串(!)传输到外部命令,shell,vim,Shell,Vim,我无法将当前缓冲区连接到外部命令。类似的问题无法解决问题 我想将缓冲区的内容视为字符串,并简单地将其作为如下参数传递,其中%s是我文件的内容: :!thunderbird.exe -compose body=%s 使用%w!的常用方法!{cmd}在这里不起作用,因为thunderbird不读取STDIN,如果这个假设是错误的,请纠正我。() 如何将缓冲区内容作为字符串发送到外部命令?将整个文件的内容复制到ex命令中会很困难,因为您需要转义文本。作为替代方案,我建议创建一个函数,将文件内容复制到

我无法将当前缓冲区连接到外部命令。类似的问题无法解决问题

我想将缓冲区的内容视为字符串,并简单地将其作为如下参数传递,其中%s是我文件的内容:

:!thunderbird.exe -compose body=%s
使用
%w!的常用方法!{cmd}
在这里不起作用,因为thunderbird不读取STDIN,如果这个假设是错误的,请纠正我。()


如何将缓冲区内容作为字符串发送到外部命令?

将整个文件的内容复制到ex命令中会很困难,因为您需要转义文本。作为替代方案,我建议创建一个函数,将文件内容复制到剪贴板,然后打开一封新的电子邮件,只需将内容粘贴到正文中

function! Send()
  :%yank +
  :silent !thunderbird.exe -compose
  :redraw!
endfunction

nnoremap <leader>s :call Send()<cr>
函数!发送()
:%yank+
:安静!thunderbird.exe-编写
:重画!
端功能
nnoremap s:call Send()

我认为:redraw就是你想要的^LI确实尝试过使用
:redraw
,不幸的是它没有与
^L
相同的效果。在这里找到了答案:如果你以Vim不知道的方式弄乱了屏幕,例如使用外部命令,你需要使用“:redraw!”。虽然现在我重读了
:h:redraw
,它也在那里。doh。