VIM Как вставить вывод команды оболочки в другом месте файла - PullRequest
0 голосов
/ 27 февраля 2011

Я придумал Perl-скрипт, который выводит шаблон для документирования функций и структур с учетом определения функции / структуры из моего кода C.

Чтобы использовать его, я визуально выбираю определение структуры, дергаю и вставляю его прямо над исходным определением и вызываю скрипт для этой вставленной структуры. Он заменяет его документом для этой структуры.

Теперь есть ли способ, чтобы избежать этой пасты? Я ищу способ вызова команды оболочки, но вывод этой команды должен быть вставлен в другое место файла, а не обязательно поверх него.

IOW : 'a,' b! perl ~ / bin / document.pl заменяет текст между mark a и markb, я хочу добавить вывод document.pl выше mark a.

Ответы [ 3 ]

0 голосов
/ 27 февраля 2011

Если в качестве оболочки используется zsh, вы можете использовать совместный процесс:

'a,'b!coproc perl ~/bin/document.pl ; tee >&p | cat <&p

Чтобы получить вывод перед вашим текстом (эта команда помещает его после), вы должны использовать немного более сложную команду:

'a,'b!coproc perl ~/bin/document.pl ; tee >&p | cat <(<&p) -

Независимое от системы решение с использованием vim и временного буфера:

'a,'byank a | new | 0put a | $d | execute "%!perl ~/bin/document.pl" | %d a | bw! | 'a-1put a
0 голосов
/ 27 февраля 2011

Попробуйте что-то вроде этого:

function! MyFunc() range
  " Preserve the register.
  let old_reg = @a
  exec a:firstline.','.a:lastline.'yank a'
  " Change to do what you need with register a.
  " Insert output before a:firstline
  exec (a:firstline - 1).'read !your magic with '.@a
  " Restore the register
  let @a = old_reg
endfunction

" :2,5MyOwn  will process lines from 2 to 5 and insert the output before line 2
command! -bar -range -nargs=? MyOwn <line1>,<line2>call MyFunc()
0 голосов
/ 27 февраля 2011

Одним из возможных решений было бы изменение сценария perl таким образом, чтобы он также выводил свой ввод в конце. Тогда вы получите желаемый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...