使用Vim折叠进行Python代码的推荐方法是什么

您所在的位置:网站首页 vim折叠函数 使用Vim折叠进行Python代码的推荐方法是什么

使用Vim折叠进行Python代码的推荐方法是什么

2023-04-12 17:41| 来源: 网络整理| 查看: 265

我对在Vim中为Python代码启用代码折叠感兴趣。 我注意到有多种方法可以做到这一点。

有没有人喜欢在Vim中折叠Python代码的首选方法? 即

您是否有喜欢并喜欢的特定Vim插件? 您使用手动折叠还是在标记中放置标记? 还有其他推荐的方式在Vim中为Python进行代码折叠吗?

就我个人而言,我无法说服自己用标记乱丢我的代码。我已经习惯于(高效)使用缩进折叠。连同我的空格键映射(请参见下文)以打开/关闭折叠以及zR和zM命令,我就在家里。非常适合Python!

123set foldmethod=indent nnoremap za vnoremap zf 相关讨论 :set foldmethod =先缩进我只是在谷歌上搜索,偶然发现了你的答案,非常好! :) 我的朋友也喜欢set foldnestmax=2,这样可以将类的方法折叠起来,但是内部语句无法使用。 我不确定为什么第二个映射在zf的答案中。如果使用缩进折叠,则不使用它。但是,如果您要进行手动折叠,则映射非常有意义。但是,za似乎是快速打开/关闭折叠的最佳方法。我还建议使用折叠导航(zk,zj)。 vnoremap适用于手动映射。在您的ftplugin中,为Python添加set foldmethod = indent。然后,在您的.vimrc中,设置foldmethod = manual。现在,您可以使用空格键映射同时折叠Python和非Python

我将此语法文件用于Python。它将折叠方法设置为语法,并折叠所有类和函数,但仅此而已。

相关讨论 展开后如何折叠?我找不到快捷方式! n 尝试了此语法文件,并且在突出显示时效果很好。但这对于冷折叠绝对没有任何作用,当我使用zM时,什么也没有发生,当我在班级中使用za时,我得到了E490(未找到折叠)。怎么了? +1。第一次尝试时,python代码(类,方法)折叠对我而言效果非常好。使用Walters(stackoverflow.com/a/360634/605356)的答案将空格键映射到折叠命令,但是(对我来说)该解决方案效果不佳。感谢@Tomas提供参考。 @DaniGehtdichnixan,也许您需要:AnsiEsc-调查一下,我想您会找到解决方案

另一个用于折叠Python代码的插件。在GitHub上处理docstring相当简单。

SimpylFold

请享用!

相关讨论 这最有效。我从来没有考虑过代码折叠,因为它从未引起任何麻烦。 @iankit有时我希望它也可以折叠if,for和while块,不是吗? 嗯,这可能不是很有帮助,我认为。如果他折叠这些块,则在折叠状态下内容物不是很清楚。但是,对于方法和其他命名块,名称说明了一切。我可以通过查看折叠块的名称来猜测折叠块在做什么。 @iankit我不知道..我想尝试。为什么不尝试? ^^

Python非常适合折叠缩进,有点适合编写我自己的代码,我使用标记,因为它们可以按照您想要的方式压缩文档,并且可以用作目录。当我查看别人的代码时,我在vimrc中有此功能可在两者之间切换。

1234567891011121314151617#Toggle fold methods \\fo let g:FoldMethod = 0 map fo :call ToggleFold() fun! ToggleFold()     if g:FoldMethod == 0         exe 'set foldmethod=indent'         let g:FoldMethod = 1     else         exe 'set foldmethod=marker'         let g:FoldMethod = 0     endif endfun #Add markers (trigger on class Foo line) nnoremap ,f2 ^wywO#0 {{{2 nnoremap ,f3 ^wywO#0 {{{3 nnoremap ,f4 ^wywO#0 {{{4 nnoremap ,f1 ^wywO#0 {{{1

我认为缩进折叠适合python。我正在为vim-config python / django IDE想法制作多分支git repo。叉开!

http://github.com/skyl/vim-config-python-ide

我真的很喜欢python_ifold插件。

相关讨论 不幸的是,此插件使用了比我更喜欢的处理器时间(即使使用a版本),因为我希望保持Vim的快速运行。还有其他建议吗? 这个答案确实需要描述。

试试这个插件:

http://vim.sourceforge.net/scripts/script.php?script_id=515

在您的.vimrc中:

12set foldmethod=indent set shiftwidth=4

然后zM掩盖所有zR以展开所有。我还补充说:

1234567891011nnoremap za vnoremap zf map z1  :set foldlevel=0 map z2  :set foldlevel=1 map z3  :set foldlevel=2 map z4  :set foldlevel=3 map z5  :set foldlevel=4 map z6  :set foldlevel=5 map z7  :set foldlevel=6 map z8  :set foldlevel=7 map z9  :set foldlevel=8

因此,您可以z1和z2一点一点地缩进。

对我来说,理想的折叠方式是仅折叠class和def块,缩进式折叠对于我的口味而言实在太多了。我认为一种优雅的解决方案是使用Tomas提到的语法系统。但是,该脚本旨在替换原始语法文件,并且最终可能会比原始语法文件旧(即该脚本未提及Python 3语法)。

我的解决方案是在~/.vim/syntax文件夹中放置一个名为python.vim的文件,其中仅包含以下几行(取自上述脚本):

1234567syn match   pythonDefStatement  /^\\s*\\%(def\\|class\\)/        \\ nextgroup=pythonFunction skipwhite syn region  pythonFunctionFold  start="^\\z(\\s*\\)\\%(def\\|class\\)\\>"        \\ end="\\ze\\%(\\s*\ \\)\\+\\%(\\z1\\s\\)\\@!." fold transparent hi link pythonDefStatement Statement

然后只需使用:set foldmethod=syntax激活折叠即可。

相关讨论 我喜欢这个解决方案。但是,如果它们位于行首,则不匹配n倍class es和def s。由于几乎无法读取该表达式,因此在尝试对其进行调整以匹配^def和^class时遇到麻烦。尽管这很奇怪,因为\\s*应该可以很好地处理此问题。

我真的很喜欢我为.vimrc编写的这个小vim脚本。它映射alt+1来折叠第一个python缩进级别(类定义和函数),alt+2来折叠第二个python缩进级别(类方法),并且alt+0来展开所有内容。它确保仅折叠一个级别,而不折叠任何嵌套的子级别。您仍然可以使用za切换当前块的折叠。请注意,在^[0中,对于我的终端,^[是alt。对vim脚本没有太多的经验,所以随时可以对函数提出建议:)

12345678910" Python folding nnoremap ^[0 zR nnoremap ^[1 :call Fold(0) nnoremap ^[2 :call Fold(1) function Fold(level)     :let b:max = a:level + 1     :set foldmethod=indent     :execute 'set foldnestmax='.b:max     :execute 'set foldlevel='.a:level endfunction 相关讨论 在Mac上使用alt键:stackoverflow.com/questions/7501092/can-i-map-alt-key-in-vim

Python源代码带有一个vim语法插件以及一个自定义的vim??rc文件。检查vim上的python常见问题

相关讨论 此语法文件也不包含折叠信息。因此,您不能将此语法文件与语法折叠一起使用。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3