使用 MaVim 配合 iTerm2 异步测试 node 代码 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
chemzqm
V2EX    Vim

使用 MaVim 配合 iTerm2 异步测试 node 代码

  •  2
     
  •   chemzqm 2016-01-04 01:31:50 +08:00 2938 次点击
    这是一个创建于 3598 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本文简单介绍在 MacVim 异步进行 node 代码测试,并将测试结果返回到 MacVim quickfix 列表的一种方法。

    这里有段特别不清晰的视频:

    http://video.weibocom/player/1034:02c9053642a0d4b1bf462a0c45b99f42/v.swf

    背景介绍

    vim-dispatch 支持异步执行 shell 命令,但是并不支持 beta 版的 iTerm2, 因为 iTerm2 2.9 以后的 applescript 语法完全不同了,然后我就我做了一个简单版本的异步执行插件:vim-iterm2-start, 它暂时只支持我现在用的 MacVim, iTerm2 和 fish shell 。

    配合 vim-test

    配合使用 vim-test 我们可以一键异步执行当前鼠标下的测试代码,只需要以下设置:
    vim
    nmap <silent> <leader>t :TestNearest<CR>
    function! StartTest(cmd)
    execute 'ItermStartTab! ' . a:cmd
    endfunction
    let g:test#custom_strategies = {'start': function('StartTest')}
    let g:test#strategy = 'start'

    使用<leader>t 一键测试

    测试版的 iTerm2 修复了文件路径获取的 bug ,你可以直接点击错误信息里的文件路径,通过 profile 里设置 MacVim 为默认编辑器,它可以让你的 MacVim 直接跳转到点击的(+鼠标左键)文件,甚至行号也支持。

    支援 quickfix

    接下来我们可以使用一个过滤程序把 mocha 的错误信息发回到 macvim ,这样我们就可以直接在 macvim 里面使用 quickfix 列表快速跳转到错误处了,代码实现在这里: https://gist.github.com/chemzqm/fd1313206c182884efbc

    把 error-parse.js 添加可执行权限并连接 path 目录下,我们就可以让它把错误信息通过 MacVim 的 clientserver 特性发回到 MacVim ,在 MacVim 下只需要把配置改成:

    execute 'ItermStartTab! ' . a:cmd . '| error-parse.js'

    即可,然后我们就可以愉快的让 iTerm2 帮我们执行测试,然后需要看错误的时候 MacVim 下 :copen 打开 quickfix 列表就可以了

    error-parse 的代码实现并不完善,请根据个人喜好进行修改。
    它并不局限与 nodejs ,任何输出错误文件路径的测试工具都可以通过调整它来支持

    10 条回复    2016-01-04 15:31:35 +08:00
    chemzqm
        1
    chemzqm  
    OP
       2016-01-04 01:34:49 +08:00
    有人可能对实现 iTerm 执行异步操作感兴趣,其实只是用 vimscript 生成一段 applescript ,然后让 osascript 执行,这段 applescript 让 iTerm2 执行了一段 vimscript 生成的 shell 脚本
    congeec
        2
    congeec  
       2016-01-04 08:23:10 +08:00 via iPhone
    Tmux 大法好,楼主请看 vimux ,跨平台
    chemzqm
        3
    chemzqm  
    OP
       2016-01-04 10:39:45 +08:00
    @congeec Tmux vimux 里面用不了 macvim 吧?
    congeec
        4
    congeec  
       2016-01-04 10:53:02 +08:00
    @chemzqm mvim -v
    chemzqm
        5
    chemzqm  
    OP
       2016-01-04 12:40:09 +08:00
    @congeec 那种 vi 模式缺少各种特性,还用的毛线 vim 啊?您别逗我
    再者我这里谈的是在 vim 里让 terminal 执行异步测试,并把结果返回给 vim ,这跟 tmux 没有半毛钱的关系好吧
    congeec
        6
    congeec  
       2016-01-04 13:04:06 +08:00
    @chemzqm 那是 vim 模式,确实缺少 macvim 的一些特性
    tmux 配置好也能异步返回执行结果,而且 github 上有现成的代码可以用。 tmux 有个好处是跨平台
    你说的异步测试返回结果还真可以脱离 terminal 使用,它可以通过 client/server 或异步回调实现。这种平台无关的项目还真不少, YouCompleteMe 就有。 iTerm2 + MacVim 只是一种实现,我提了另一种实现,卤煮你息怒嘛
    chemzqm
        7
    chemzqm  
    OP
       2016-01-04 13:15:36 +08:00
    @congeec 跨平台不就意味着更好啊,很多人确实会需要,但对我来说更需要的是让 macvim 去实现这个功能,终端 vim 对我而言缺少太多必要的特性。
    YouCompleteMe 就别提了,反映慢的要死,根本不是适合做开发用,或许它性能比以前好了,反正我肯定不会选的
    congeec
        8
    congeec  
       2016-01-04 13:57:41 +08:00
    @chemzqm 跨平台你确实没必要用。就是提一下嘛
    YCM 对 js 的补全是基于 tern 的,没感觉慢。它没针对 js 提供实时检查测试,可能你觉得慢是因为 syntastic 的锅。不好意思误导你了
    chemzqm
        9
    chemzqm  
    OP
       2016-01-04 14:21:47 +08:00
    @congeec 是当时的 tern 很慢,并不是 syntastic 的问题,不过现在 tern 真的比以前快多了。
    YCM 这种全能补全开始感觉挺方便,用多了就觉得补全时各种无关干扰选项太多,还不如使用原生的 <c-x><c-o> <c-x><c-l> <c-x><c-f> <c-x><c-u> 更有利于思维的连贯性,功能也更多,配置也更灵活
    congeec
        10
    congeec  
       2016-01-04 15:31:35 +08:00
    @chemzqm YCM 只用<C-X><C-O>可以关掉实时补全,我就关了。其他补全方式依然可以用,和 vim 不冲突。 YCM 作为一个补充也挺好的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1050 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 17:54 PVG 01:54 LAX 09:54 JFK 12:54
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86