从VIM发送电子邮件

时间:2010-10-13 10:08:37

标签: windows email vim

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

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

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

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

1 个答案:

答案 0 :(得分:5)

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

:command! -nargs=* -range=% SendEmail <line1>,<line2>RunView SendEmail -e oneoption -b twooption <args>

然后执行:

:SendEmail -u "subject"

:'<,'>SendEmail -u "subject"

我没有测试过这些,但它应该非常容易。


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


编辑以回复评论:

如果您想将路径作为参数发送到SendEmail,您可以执行类似的操作(我没有对此进行测试,因此可能需要调整litle):

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

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

!SendEmail -e oneoption -b twooption -f /path/to/filename.txt -u "subject"

请参阅:

:help expand()
:help :exe