Запустите команду bash в Vim и скопируйте результат в буфер обмена - PullRequest
2 голосов
/ 15 августа 2011

Как создать команду Vim и скопировать ее результаты в буфер обмена?

Я хочу преобразовать Markdown в HTML и скопировать результат в буфер обмена.Пока я получил:

nmap md :%!/bin/markdown/Markdown.pl --html4tags

Но это заменит мой открытый файл в Vim на результат уценки.

Ответы [ 3 ]

4 голосов
/ 15 августа 2011

Вы не сказали, какую систему используете, но обычно сохраняли ее в + Регистрация должна работать. Вы можете позвонить system():

:let @+=system("markdown --html4tags", join(getline(1,line("$")), "\n"))

Функция system() принимает второй параметр (необязательно) в качестве входа для команда, и здесь я использую цепочку других функций для получения содержимого текущего буфера. Не уверен, но должен быть лучший способ сделать это (если кто-нибудь знает, пожалуйста, дайте мне знать).

В качестве альтернативы, вы можете передать markdown имя вашего файла в качестве ввода:

:let @+=system("markdown --html4tags " . shellescape(expand("%:p")))

Но имейте в виду, что вам нужно написать файл перед вызовом этого.

Два важных примечания:

  1. Я не набрал ваш полный путь к уценке. Используйте это.
  2. Я не использовал карты здесь, конечный результат будет примерно таким:
nnoremap md :let @+=system(...)
1 голос
/ 15 августа 2011

получите пакет xsel

и стандартный вывод в xsel --clipboard

Например:

cat /etc/passwd | xsel --clipboard

Это то, что вы ищете?

0 голосов
/ 24 августа 2013

Заполнение недостающей части (на 2+ года позже). С разъяснением, что пользователь был на Mac, и с тех пор, как он спросил «почему это не работает для меня?» на вопрос не ответили.

Чтобы перенаправить вывод команды в системный буфер обмена из MacVim (версия с графическим интерфейсом), вам нужно установить «*» в качестве «регистра буфера обмена», вам нужно изменить настройку буфера обмена на 'безымянный':

set clipboard 'unnamed'   # 'cb' can be substituted for 'clipboard'

Тогда ответ sidyll должен сработать, за исключением того, что указан регистр '*', а не регистр '+':

:let @*=system(...)

Функция буфера обмена, вероятно, не скомпилирована в «терминальную версию» MacVim, и когда она доступна, настройка параметров отличается от «безымянной». Чтобы узнать больше о том, что и где работает, смотрите документацию в MacVim с помощью справочной команды Vim:

 :help 'clipboard'    (include the single quotes since it's a set option!)

(Я пропущу проблему с отображением команд, поскольку она всегда занимает у меня несколько попыток, и мне все равно придется ее искать; найти помощь для команд отображения должно быть проще, чем найти ее для * регистра.)

...