V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
chemzqm
V2EX  ›  Vim

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

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

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

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

    http://video.weibo.com/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   ·   实用小工具   ·   2814 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 06:47 · PVG 14:47 · LAX 22:47 · JFK 01:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.