从VIM发送电子邮件

ako*_*sch 2 windows email vim

我打算通过SendEmail从VIM内部发送电子邮件,但我遇到了一些问题.

  1. 当通过bang(!)运算符将缓冲区的一部分(或整个缓冲区)传递到SendEmail时,缓冲区中的文本将被SendEmail的输出替换.所以我的第一个问题是:如何将范围传递到外部命令并丢弃它的输出(甚至更好:在cmd窗口中显示它)?

  2. 我给SendMail的大多数选项在大多数情况下都没有改变(比如电子邮件服务器或者来自地址),所以每次发送东西时我都不想输入它们:我想要一个命令这些参数是硬编码的,我可以指定任意数量的附加参数(如-u"subject").

这可以通过命令功能(nargs,range)来完成,还是需要编写一个函数?

DrA*_*rAl 5

最简单的选择是从Vim网站下载RunView插件并使用它.如果您let g:runview_filtcmd等于SendEmail命令行,它将获取当前缓冲区的内容,将其传递给SendEmail并在单独的窗口中打印输出.我认为这可以实现您的需求.如果要将RunView用于其他内容,可以省略该g:runview_filtcmd步骤并添加以下命令:

:command! -nargs=* -range=% SendEmail <line1>,<line2>RunView SendEmail -e oneoption -b twooption <args>
Run Code Online (Sandbox Code Playgroud)

然后做:

:SendEmail -u "subject"
Run Code Online (Sandbox Code Playgroud)

要么

:'<,'>SendEmail -u "subject"
Run Code Online (Sandbox Code Playgroud)

我没有测试任何这个,但它应该很容易工作.


如果你想手动完成,你可能需要编写一个函数.RunView的工作方式是将整个缓冲区复制到一个寄存器中,创建一个新窗口,将缓冲区粘贴到该窗口的末尾,然后通过该程序过滤新行.它在开始时添加日期/时间戳以分隔同一程序的多次运行.这不会太难复制,但你可能需要一个功能.


编辑以回应评论:

如果你想把路径作为参数发送到SendEmail,你可以做这样的事情(我没有测试过,所以它可能需要调整一个litle):

command! -nargs=* SendEmailAsAttachment exe '!SendEmail -e oneoption -b twooption -f' expand('%:p') <args>
Run Code Online (Sandbox Code Playgroud)

请注意,:exe将参数与空格连接起来,因此调用SendEmailAsAttachment -u "subject"扩展为:

!SendEmail -e oneoption -b twooption -f /path/to/filename.txt -u "subject"
Run Code Online (Sandbox Code Playgroud)

看到:

:help expand()
:help :exe
Run Code Online (Sandbox Code Playgroud)