我打算通过SendEmail从VIM内部发送电子邮件,但我遇到了一些问题。
当通过bang(!)运算符将缓冲区的一部分(或整个缓冲区)传递到SendEmail时,缓冲区中的文本将被SendEmail的输出替换。所以我的第一个问题是:如何将范围传递到外部命令并丢弃它的输出(甚至更好:在cmd窗口中显示它)?
我给SendMail的大多数选项在大多数情况下都没有改变(比如电子邮件服务器或者来自地址),所以每次发送东西时我都不想输入它们:我想要一个硬编码参数的命令,我可以指定任意数量的附加参数(如-u“subject”)。
可以通过命令功能(nargs,range)完成,还是需要编写函数?
答案 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