[英]Vim - Pydoc plugin not working with operator mapping
我有一个用于Pydoc插件的小型操作员映射。 它的代码如下:
nnoremap <buffer> <localleader>d :set operatorfunc=<SID>PydocOperator<cr>g@
vnoremap <buffer> <localleader>d :<c-u>call <SID>PydocOperator(visualmode())<cr>
function! s:PydocOperator(type)
let l:orig_register = @@
if a:type ==# 'v'
normal! `<v`>y
elseif a:type ==# 'char'
normal! `[v`]y
else
return
endif
execute 'Pydoc ' . shellescape(@@)
let @@ = l:orig_register
endfunction
但是,vim抛出错误:
E116: Invalid arguments for function <SNR>117_ShowPyDoc
如果我手动复制一些文本并运行以下命令,则会发生相同的错误:
execute 'Pydoc ' . shellescape(@@)
考虑到:Pydoc
应该作为一个普通命令,以一个参数作为输入,这是很奇怪的。 我查看了定义:Pydoc
命令的代码(该行代码在此处 ),发现将参数传递给带引号的:Pydoc
命令可能会引起问题。 因此,我运行:Pydoc 'sys'
来查看它是否会与操作员映射抛出相同的错误。 因此,如果参数周围的引号有问题,如何格式化execute
命令,使其不给出无效的参数?
:Pydoc
命令不需要shellescape()
函数。 shellescape
在返回的字符串中包含引号,这会导致:Pydoc
自毁。 但是,例如,如果命令是:grep
,则需要使用shellescape
。
相关帮助主题:
:help shellescape()
:help 'operatorfunc'
:help :map-operator
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.