免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1540 | 回复: 0
打印 上一主题 下一主题

vim折叠方便python源代码 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-22 00:14 |只看该作者 |倒序浏览

               



下载python_fold插件,解压后是python_fold.vim文件,
http://vim.sourceforge.net/scripts/script.php?script_id=515
放入plugin目录下。即可实现Python代码的折叠支持。再次打开Python脚本时会发现所有的代码已经折叠了,其中还现了折叠部分拥有的行数。在折叠的行按下zo可以打开折叠,按下zc会折叠上代码。(
在 vimrc
set foldmethod=indent

zo
將游標所在處的折疊打開。open。
zc
將游標所在處已打開的內容再度折疊起來。close。
zr
將全文的所有折疊依層次通通打開。reduce。
zm
將全文已打開的折疊依層次通通再折疊起來。more。
zR
作用和 zr 同,但會打開含巢狀折疊(折疊中又還有折疊)的所有折疊。
zM
作用和 zm 同,但對於巢狀折疊亦有作用。
zi
這是個切換,是折疊與不折疊指令間的切換。
zn
打開全文的所有折疊。fold none。
zN
這是 zn 的相對指令,回復所有的折疊。
               
                " Vim folding file
" Language:    Python
" Author:    Jorrit Wiersma (foldexpr), Max Ischenko (foldtext), Robert
" Ames (line counts)
" Last Change:    2005 Jul 14
" Version:    2.3
" Bug fix:    Drexler Christopher, Tom Schumm, Geoff Gerrietts
setlocal foldmethod=expr
setlocal foldexpr=GetPythonFold(v:lnum)
setlocal foldtext=PythonFoldText()
function! PythonFoldText()
  let line = getline(v:foldstart)
  let nnum = nextnonblank(v:foldstart + 1)
  let nextline = getline(nnum)
  if nextline =~ '^\s\+"""$'
    let line = line . getline(nnum + 1)
  elseif nextline =~ '^\s\+"""'
    let line = line . ' ' . matchstr(nextline, '"""\zs.\{-}\ze\("""\)\?$')
  elseif nextline =~ '^\s\+"[^"]\+"$'
    let line = line . ' ' . matchstr(nextline, '"\zs.*\ze"')
  elseif nextline =~ '^\s\+pass\s*$'
    let line = line . ' pass'
  endif
  let size = 1 + v:foldend - v:foldstart
  if size " . (ind / &sw + 1)
    endif
    let pnum = prevnonblank(a:lnum - 1)
    if pnum == 0
    " Hit start of file
    return 0
    endif
    " If the previous line has foldlevel zero, and we haven't increased
    " it, we should have foldlevel zero also
    if foldlevel(pnum) == 0
    return 0
    endif
    " The end of a fold is determined through a difference in indentation
    " between this line and the next.
    " So first look for next line
    let nnum = nextnonblank(a:lnum + 1)
    if nnum == 0
    return "="
    endif
    " First I check for some common cases where this algorithm would
    " otherwise fail. (This is all a hack)
    let nline = getline(nnum)
    if nline =~ '^\s*\(except\|else\|elif\)'
    return "="
    endif
    " Python programmers love their readable code, so they're usually
    " going to have blank lines at the ends of functions or classes
    " If the next line isn't blank, we probably don't need to end a fold
    if nnum == a:lnum + 1
    return "="
    endif
    " If next line has less indentation we end a fold.
    " This ends folds that aren't there a lot of the time, and this sometimes
    " confuses vim.  Luckily only rarely.
    let nind = indent(nnum)
    if nind

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/8111/showart_503196.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP