Perl vimscript复制粘贴变量

Perl vimscript复制粘贴变量,perl,copy-paste,vim,Perl,Copy Paste,Vim,我的.vimrc中有以下命令: nmap gtb texecute“!perl/home/hermann/hi.pl”.shellescape(getline('.')),1) 它执行一个perl脚本,并将光标所在的行发送给它。 如何将复制粘贴缓冲区中的内容发送到脚本?您可以使用“正常”功能粘贴剪贴板内容 function MyPastingFunc() "paste from clipboard normal! "+p "do more stuff

我的.vimrc中有以下命令:

nmap gtb texecute“!perl/home/hermann/hi.pl”.shellescape(getline('.')),1)

它执行一个perl脚本,并将光标所在的行发送给它。

如何将复制粘贴缓冲区中的内容发送到脚本?

您可以使用“正常”功能粘贴剪贴板内容

   function MyPastingFunc()
     "paste from clipboard
     normal! "+p
     "do more stuff 
   endfunction

Vim中没有单一的“复制粘贴”缓冲区,而是一组命名寄存器。您可以使用getreg函数获取寄存器的内容-它只有一个参数,register name。例如,使用此选项可获取默认拉伸/粘贴缓冲区的内容:

getreg('0')

我将行转到:nmap gtb texecute“!perl/home/hermann/hi.pl”.getreg('0'),结果是杂项错误,具体取决于粘贴缓冲区中的内容。知道问题出在哪里吗?nmap gtb:execute“!perl/home/hermann/hi.pl”。getreg('0')对我有效。@hermann Ingjaldson:为什么要放弃
shellescape()
调用?当然你会犯各种各样的错误,因为我不知道有什么更好的。现在更好了,但是perl脚本正在将缓冲区内容打印到终端,在那里,它似乎无法处理各种不同的字母。它适用于只包含普通字母的简单句子。它就像寄存器不仅仅是一个文本字符串,它实际上以某种方式解释缓冲区中的内容。例如,#总是转换成某个句子。有没有办法防止这种情况,只获取缓冲区的文本?:execute启动一个Ex命令,因此需要转义Vim的特殊符号。要避免这种情况,请使用系统函数:
:调用系统('perl/home/hi.pl'.shellescape(getreg('0'))