免费注册 查看新帖 |

Chinaunix

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

[翻译] 好用的vim function(快速定位Perl Module) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-09 21:58 |只看该作者 |倒序浏览
在vim里编辑perl代码时,只要将光标移到模块名上,然后敲入':gm',就能立刻导航至那个模块。

特性:
1 使用@INC变量查找模块;
2 如果找到的模块只有一个,就会立刻跳至那个模块;
3 如果找到的模块不止一个(多个版本),会显示一个可供选择的列表(就像命令补全一样);
4 如果没有找到模块,则会给出高亮提示信息"Module '$module' not found";

函数代码如下:
let g:perl_path_to = {}
function! GotoModule(module)
    let files  = []

    if !has_key(g:perl_path_to, a:module)
        let g:perl_path_to[a:module] = []
        let lib    = split(system("perl -le 'print join $/ => @INC'"), "\n")
        let module = substitute(a:module, '::', '/', 'g') . '.pm'

        for path in lib
            let path = path . '/' . module
            if filereadable(path)
                let g:perl_path_to[a:module] = g:perl_path_to[a:module] + [ path ]
            endif
        endfor
    endif

    let paths = g:perl_path_to[a:module]
    if empty(paths)
        echomsg("Module '".a:module."' not found")
    else
        let file = PickFromList('file', paths)
    endif
    execute "edit " . file
endfunction

function! PickFromList( name, list, ... )
    let forcelist = a:0 && a:1 ? 1 : 0

    if 1 == len(a:list) && !forcelist
        let choice = 0
    else
        let lines = [ 'Choose a '. a:name . ':' ]
            \ + map(range(1, len(a:list)), 'v:val .": ". a:list[v:val - 1]')
        let choice  = inputlist(lines)
        if choice > 0 && choice <= len(a:list)
            let choice = choice - 1
        else
            let choice = choice - 1
        endif
    end

    return a:list[choice]
endfunction


使用方法:
在.vimrc里加入:

" only works for Perl
au! FileType perl :noremap <buffer> :gm  :call GotoModule(expand('<cword>'))<cr>

" make sure we pick up the colon as part of our keyword
autocmd FileType perl setlocal iskeyword+=:

" don't kill 'undo' in other buffers
set hidden

使用此方法可以提高编写较复杂程序时的效率,平常写脚本的时候也可以随时很方便地用它查看核心模块的代码。

原文:http://use.perl.org/~Ovid/journal/36602
(作者Ovid是O‘relly Perl Hacks的主要作者)

[ 本帖最后由 Nosferatu 于 2008-6-9 21:59 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-06-09 23:23 |只看该作者
好东东,先收藏了……

论坛徽章:
0
3 [报告]
发表于 2008-06-10 08:19 |只看该作者
收藏

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2008-06-10 10:41 |只看该作者
我这里原本就可以的呀。
Normal 模式下摁 gf 就行……

论坛徽章:
0
5 [报告]
发表于 2008-06-10 11:58 |只看该作者
老大表打击我。。。。
我刚才在as3里试了下你的gf,提示文件找不到

论坛徽章:
0
6 [报告]
发表于 2008-06-10 14:02 |只看该作者
原帖由 flw 于 2008-6-10 10:41 发表
我这里原本就可以的呀。
Normal 模式下摁 gf 就行……

我这也行
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP