繁体   English   中英

Vim-Pydoc插件不适用于操作员映射

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM