我需要一个移动到python块结束/开始的动作,并且我需要另一个移动到上一个/下一个方法/类(所有组合)的开始/结束的动作。

我已经尝试过vim-indent-object,python-mode,chapa,vim-python-object等。它们都不支持块结尾,也不支持上述动作的所有组合。

我记得有一次有一段时间,我有一个插件提供了]][[][[]动作来开始/结束上一个/下一个方法/类,但是在插入的目录中找不到它(搜索“] [”和“ [] “”在我插入的目录中,并分析了所有出现的情况,但没有找到定义“] [”或“ []”的任何内容。)

您知道我以前使用的插件吗?您知道提供此功能的任何插件吗?

评论

vim.org/scripts/script.php?script_id=30?

[[和]]由默认的python ftplugin提供。

@romainl感谢您提供信息,我了解[[,]],(,),{和}。 [[和]]在某些情况下很有用,但是我的主要问题是我需要[]和] [或类似的东西,它可以跳转到下一个/上一个方法/类的末尾。

@muru谢谢,它的] e解决了我的大多数问题,但是此插件中的某些映射似乎已损坏,例如] v或]>,我将尝试将其修复在fork中并发布。尽管我仍然想知道提供[]和[]的插件真的有用吗。

#1 楼

随着$VIMRUNTIME/ftplugin/python.vim的最新更新(2017年11月),以下针对ft的动作现在可用于python语言。




[[向后跳转到当前/上一个顶层开始

[]向后跳转到上一个顶层的末尾


][向前跳转到当前顶级的末尾


]]向前跳转到下一个顶层的开始

[m向后跳转到当前/上一个方法/范围的开头
[M向后跳转到上一个方法/范围的结尾
]M向前跳转到当前/结束的位置next方法/范围

]m跳转到next方法/范围的开始

示例python文件

 class previous:             # [[[[

    def method_first:
        pass
    # ...

    def method_last:
        pass                # []

class current:              # [[ or [m...[m[m

    def method_first:       # [[]m or [m...[m
        pass                # [[]M or [M...[M
    # ...

    def method_previous:    # [m[m
        pass                # [M

    def method_current:     # [m
        # CURSOR <---------------------------
        pass                # ]M

    def method_next:        # ]m
        pass                # ]M]M
    # ...

    def method_last:        # ][[m or ]m...]m
        pass                # ][   or ]M...]M

class previous:             # ]]   or ]m...]m]m

    def method_first:
        pass
    # ...

def global_func:            # ]]]]
    pass
 


如果您的vim补丁程序级别至少为8.0.1256,则应包含此更新。

如果您无法更新但想要使用此功能,则可以将最新版本安装到~/.vim目录中:

$ curl https://raw.githubusercontent.com/vim/vim/master/runtime/ftplugin/python.vim --create-dirs -o ~/.vim/ftplugin/python.vim


插件Pythonsense


此插件提供类似的动作,但略有修改:


Vim 8.0的经典动作(“ ]]”,“ [[ ”等),找到从第一列开始的块,无论这些块是类还是功能块,而其方法/功能运动(“ [m”,“ ]m”等)可以找到任何位置的所有块缩进,无论这些是类还是功能块。相反,“ Pythonsense”类动作用于查找所有和唯一的类定义,而不管它们的缩进级别如何,而其方法/函数动作则用于查找所有和唯一的方法/函数定义,而不管它们的缩进级别如何。


所有详细信息和示例都在https://github.com/jeetsukumaran/vim-pythonsense#stock-vim-vs-pythonsense-motions中给出。

评论


我应该等到neovim带来此补丁。

–萨桑
17年7月7日在6:18

我猜暂时你可以手动安装它curl https://raw.githubusercontent.com/vim/vim/master/runtime/ftplugin/python.vim --create-dirs -o〜/ .config / nvim / ftplugin /python.vim。

– Hotschke
17年7月7日在6:28