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

  • 当通过bang(!)运算符将缓冲区的一部分(或整个缓冲区)通过管道传递到SendEmail时,缓冲区中的文本将替换为SendEmail的输出。所以我的第一个问题是:如何将范围输入外部命令并丢弃它的输出(甚至更好:在cmd窗口中显示它)?
  • 我提供给SendMail的大多数选项在大多数情况下都不会更改(例如电子邮件服务器或发件人地址),因此我不想每次发送邮件时都键入它们:这些参数经过硬编码的命令,我可以在其中指定任意数量的其他参数(例如-u“subject”)。

  • 可以通过命令功能(输入,范围)完成此操作,还是需要编写一个函数?

    最佳答案

    最简单的选择是下载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,则可以执行以下操作(我尚未对此进行测试,因此可能需要调整一下)。
    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
    

    关于windows - 从VIM发送电子邮件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3922561/

    10-12 23:38