开发工具 vim 对其他脚本语言的支持很不友好嘛

pynix · 2014年03月05日 · 最后由 pynix 回复于 2014年03月05日 · 3701 次阅读
" ============================================================================
" File:        leaderf.vim
" Description: 
" Author:      Yggdroot <[email protected]>
" Website:     https://github.com/Yggdroot
" Note:        
" License:     This script is released under the Vim License.            
" ============================================================================

exec g:Lf_py "import vim, sys"
exec g:Lf_py "cwd = vim.eval('expand(\"<sfile>:p:h\")')"
exec g:Lf_py "sys.path.insert(0, cwd)"
exec g:Lf_py "from leaderf.bufExpl import *"
exec g:Lf_py "from leaderf.fileExpl import *"
exec g:Lf_py "from leaderf.mruExpl import *"


function! g:LfFileExplMaps()
    nmapclear <buffer>
    nnoremap <buffer> <silent> <CR>          :exec g:Lf_py "fileExplManager.accept()"<CR>
    nnoremap <buffer> <silent> o             :exec g:Lf_py "fileExplManager.accept()"<CR>
    nnoremap <buffer> <silent> <2-LeftMouse> :exec g:Lf_py "fileExplManager.accept()"<CR>
    nnoremap <buffer> <silent> x             :exec g:Lf_py "fileExplManager.accept('h')"<CR>
    nnoremap <buffer> <silent> v             :exec g:Lf_py "fileExplManager.accept('v')"<CR>
    nnoremap <buffer> <silent> t             :exec g:Lf_py "fileExplManager.accept('t')"<CR>
    nnoremap <buffer> <silent> q             :exec g:Lf_py "fileExplManager.quit()"<CR>
    nnoremap <buffer> <silent> i             :exec g:Lf_py "fileExplManager.startExplAction()"<CR>
    nnoremap <buffer> <silent> <F1>          :exec g:Lf_py "fileExplManager.toggleHelp()"<CR>
    nnoremap <buffer> <silent> <F5>          :exec g:Lf_py "fileExplManager.refresh()"<CR>
endfunction

function! g:LfBufExplMaps()
    nmapclear <buffer>
    nnoremap <buffer> <silent> <CR>          :exec g:Lf_py "bufExplManager.accept()"<CR>
    nnoremap <buffer> <silent> o             :exec g:Lf_py "bufExplManager.accept()"<CR>
    nnoremap <buffer> <silent> <2-LeftMouse> :exec g:Lf_py "bufExplManager.accept()"<CR>
    nnoremap <buffer> <silent> x             :exec g:Lf_py "bufExplManager.accept('h')"<CR>
    nnoremap <buffer> <silent> v             :exec g:Lf_py "bufExplManager.accept('v')"<CR>
    nnoremap <buffer> <silent> t             :exec g:Lf_py "bufExplManager.accept('t')"<CR>
    nnoremap <buffer> <silent> q             :exec g:Lf_py "bufExplManager.quit()"<CR>
    nnoremap <buffer> <silent> i             :exec g:Lf_py "bufExplManager.startExplAction()"<CR>
    nnoremap <buffer> <silent> <F1>          :exec g:Lf_py "bufExplManager.toggleHelp()"<CR>
    nnoremap <buffer> <silent> d             :exec g:Lf_py "bufExplManager.deleteBuffer(1)"<CR>
    nnoremap <buffer> <silent> D             :exec g:Lf_py "bufExplManager.deleteBuffer()"<CR>
endfunction

function! g:LfMruExplMaps()
    nmapclear <buffer>
    nnoremap <buffer> <silent> <CR>          :exec g:Lf_py "mruExplManager.accept()"<CR>
    nnoremap <buffer> <silent> o             :exec g:Lf_py "mruExplManager.accept()"<CR>
    nnoremap <buffer> <silent> <2-LeftMouse> :exec g:Lf_py "mruExplManager.accept()"<CR>
    nnoremap <buffer> <silent> x             :exec g:Lf_py "mruExplManager.accept('h')"<CR>
    nnoremap <buffer> <silent> v             :exec g:Lf_py "mruExplManager.accept('v')"<CR>
    nnoremap <buffer> <silent> t             :exec g:Lf_py "mruExplManager.accept('t')"<CR>
    nnoremap <buffer> <silent> q             :exec g:Lf_py "mruExplManager.quit()"<CR>
    nnoremap <buffer> <silent> i             :exec g:Lf_py "mruExplManager.startExplAction()"<CR>
    nnoremap <buffer> <silent> <F1>          :exec g:Lf_py "mruExplManager.toggleHelp()"<CR>
    nnoremap <buffer> <silent> d             :exec g:Lf_py "mruExplManager.deleteMru()"<CR>
endfunction

function! leaderf#LfPy(cmd) 
    if v:version > 703
        exec g:Lf_py . a:cmd
    else
        try
            exec g:Lf_py . a:cmd
        catch /^Vim:Interrupt$/ " catch interrupts (CTRL-C)
            set gcr&
            set t_ve&
            let obj = substitute(a:cmd,'\..*', '', '')
            exec g:Lf_py . obj .".quit()"
            call getchar(0)
            redraw
            echo
        catch /^Vim\%((\a\+)\)\=:E/
        endtry
    endif
endfunction

function! leaderf#startFileExpl(...) 
    if a:0 == 0
        call leaderf#LfPy("fileExplManager.startExplorer()")
    else
        let dir = fnamemodify(a:1.'/',":h:gs?\\?/?")
        call leaderf#LfPy("fileExplManager.startExplorer('".dir."')")
    endif
endfunction

function! leaderf#startBufExpl(...) 
    if a:0 == 0
        call leaderf#LfPy("bufExplManager.startExplorer()")
    else
        let arg = a:1 == 0 ? 'False' : 'True'
        call leaderf#LfPy("bufExplManager.startExplorer(".arg.")")
    endif
endfunction

function! leaderf#startMruExpl(...) 
    call leaderf#LfPy("mruExplManager.startExplorer()")
endfunction

来自 https://github.com/Yggdroot/LeaderF/blob/master/autoload/leaderf.vim

  1. 插件不能单独以其他脚本语言的形式存在
  2. vimscript 调用其他脚本看起来真复杂
  3. 混合各种代码很不和谐(我不是处女座)

怎么突然发现 123 都在说统一个问题呢。。。。

这就是我没用 VIM 的原因啊 用一个编辑器之前还要学一门仅仅用于该编辑器的语言 简直是太闲了。。

#2 楼 @iBachue 据说 7.4 要增强其他脚本语言的支持,怎么还是这个样子。。。

#2 楼 @iBachue 现在基本上是 vimscript 和其他脚本语言基于字符串的相互调用。。。

@iBachue 很简单的语言,一看就会。另外一般用户不学也可以的,直接用插件就行。

@pynix 不用那么洁癖。可以用现成的其他语言命令已经不错了。我还想吐槽不是 OOP 呢。

#6 楼 @billy 哈哈哈哈哈。。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号