Отправка письма от VIM - PullRequest
       10

Отправка письма от VIM

2 голосов
/ 13 октября 2010

Я планирую отправлять электронные письма изнутри VIM через SendEmail , но у меня возникли некоторые проблемы.

  1. При передаче части буфера (или весь буфер) в SendEmail через оператор bang (!), текст в моем буфере заменяется выводом SendEmail.Итак, мой первый вопрос: как передать диапазон во внешнюю команду и отбросить ее вывод (или даже лучше: показать его в окне cmd)?

  2. Большинство параметров, которые яЯ отдаю SendMail, не меняя большую часть времени (например, почтовый сервер или адрес от), поэтому я не хочу вводить их каждый раз, когда я что-то отправляю: мне нужна команда, которая имеет эти параметры труднои где я могу указать любое количество дополнительных параметров (например, -u "subject").

Это можно сделать с помощью функции команды (nargs, range) илинужно написать функцию?

1 Ответ

5 голосов
/ 13 октября 2010

Самый простой вариант для этого - загрузить плагин RunView с веб-сайта Vim и использовать его.Если вы 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...