【问题标题】:VIM + Python - "gd" command not working properlyVIM + Python - “gd”命令无法正常工作
【发布时间】:2011-01-17 09:07:45
【问题描述】:

我开始使用 VIM 来编写 Python。我遇到了一些问题,希望有人可以帮助我解决这个问题。

“gd”命令应该将您带到当前函数中定义/使用变量的第一个位置。据我了解,这与执行“[[”到函数顶部,然后执行搜索变量名相同。

问题是,当我在 Python 函数中尝试此操作时,vim 会在整个文件中找到该变量的第一次出现。

关于为什么会发生这种情况/我该如何解决这个问题的任何想法?

【问题讨论】:

    标签: python vim ide editor


    【解决方案1】:

    我认为问题在于 Vim 处理函数的方式。来自[[ 的文档:

                                *[[*
    [[          [count] sections backward or to the previous '{' in
                the first column.  |exclusive|
                Note that |exclusive-linewise| often applies.
    

    除非某处以某种方式专门为 python 文件定义了一个部分(我不相信这是可能的,因为它们应该是两个字母的 nroff 部分),这将假定在第一列,与 python 文件无关。

    我建议在 Vim 邮件列表中询问是否有任何插件或解决方法。或者,您可以定义如下映射:

    nmap gd :let varname = '\<<C-R><C-W>\>'<CR>?\<def\><CR>/<C-R>=varname<CR><CR>
    

    这可以通过一个函数更优雅地完成,但这只是一个应该有效的快速破解。它将gd 映射到一个函数,该函数将变量“varname”设置为保存光标所在的单词,向后搜索def,然后向前搜索变量:

        :let varname =             " Variable setting
        '\<                        " String start and word boundary
        <C-R><C-W>                 " Ctrl-R, Ctrl-W: pull in the word under the cursor
        \>'                        " Word boundary and string end
        <CR>                       " Enter - finish this command
        ?                          " Search backwards for...
        \<def\>                    " def but not undefined etc (using word boundaries)
        <CR>                       " Enter - Perform search
        /                          " Now search forward
        <C-R>=                     " Pull in something from an expression
        varname<CR>                " The expression is 'varname', so pull in the contents of varname
        <CR>                       " Enter - perform search
    

    【讨论】:

    • "[[" 是否在 Python 文件中用于搜索以前的 def/class。据我所知,它在 ftplugin 的“python.vim”文件中重新定义,以执行“Python_jump”。一个(相关的?)问题是,虽然“[[”在正常模式下工作正常,但在视觉模式下效果不佳。我猜那里只是一个错误,但我仍然希望我只是错过了一些东西并且很愚蠢。
    • 我猜[[ 在 Python 文件中工作是由于自定义映射,但 gd 是基于 [[ 的内置实现。
    【解决方案2】:

    我没有在我的 Vim 配置中重新定义 varname,它工作得很好,但是我用 python 编译了 vim。 也许这就是问题所在?

    您是否安装了 VIM 版本 7.x,并使用 Python 支持编译?要检查这一点,请输入 :python print “hello, world” 进入VIM。如果您看到类似的错误消息 E319: Sorry, the command is not available in this version, 那么是时候买一个新的了。

    【讨论】:

    • 这太棒了,我不知道你可以从命令行调用任何解释器!谢谢你的提示!您还可以通过键入 :version 来检查 vim 中编译的内容并检查 python 标志是否存在。
    • 我没有 Python 支持。我在 Windows 上,我只是使用了在 vim 下载页面上找到的普通旧安装程序。如何获得支持 Python 的版本?
    • 我认为最简单的方法是预先配置并与 cream 中的各种增强 vim 捆绑在一起。有“没有 Cream 的 Windows Vim 安装程序”(我不喜欢 cream 布局,而且都是 gui 的东西——它让我慢下来,但与之配套的 vim 版本很好)。 cream.sourceforge.net/download.html
    猜你喜欢
    • 2022-10-16
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多