VIM如何在文件中的其他位置插入shell命令的输出

时间:2011-02-27 08:36:35

标签: vim

我已经提出了一个perl脚本,它输出一个模板来记录函数和结构,给出了我的C代码中函数/结构的定义。

要使用它,我会直观地选择结构的定义,将其粘贴并粘贴在原始定义的正上方,然后在此粘贴的结构上调用脚本。它将其替换为该结构的文档。

现在是否有办法可以避免粘贴?我正在寻找一种方法来调用一个shell命令,但是它的输出应该粘贴到文件中的其他位置,不一定在它上面。

IOW :'a,'b!perl~ / bin / document.pl 替换标记a和标记之间的文本,我想添加标记a上面的document.pl的输出。

3 个答案:

答案 0 :(得分:0)

一种可能的解决方案是修改perl脚本,使其在最后输出其输入。然后你会得到理想的结果。

答案 1 :(得分:0)

如果您将zsh作为shell,则可以使用协同处理:

'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

答案 2 :(得分:0)

尝试这样的事情:

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()