本文简单介绍在 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
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 直接跳转到点击的(⌘+鼠标左键)文件,甚至行号也支持。
接下来我们可以使用一个过滤程序把 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 ,任何输出错误文件路径的测试工具都可以通过调整它来支持
1
chemzqm OP 有人可能对实现 iTerm 执行异步操作感兴趣,其实只是用 vimscript 生成一段 applescript ,然后让 osascript 执行,这段 applescript 让 iTerm2 执行了一段 vimscript 生成的 shell 脚本
|
2
congeec 2016-01-04 08:23:10 +08:00 via iPhone
Tmux 大法好,楼主请看 vimux ,跨平台
|
5
chemzqm OP @congeec 那种 vi 模式缺少各种特性,还用的毛线 vim 啊?您别逗我
再者我这里谈的是在 vim 里让 terminal 执行异步测试,并把结果返回给 vim ,这跟 tmux 没有半毛钱的关系好吧 |
6
congeec 2016-01-04 13:04:06 +08:00
@chemzqm 那是 vim 模式,确实缺少 macvim 的一些特性
tmux 配置好也能异步返回执行结果,而且 github 上有现成的代码可以用。 tmux 有个好处是跨平台 你说的异步测试返回结果还真可以脱离 terminal 使用,它可以通过 client/server 或异步回调实现。这种平台无关的项目还真不少, YouCompleteMe 就有。 iTerm2 + MacVim 只是一种实现,我提了另一种实现,卤煮你息怒嘛 |
7
chemzqm OP @congeec 跨平台不就意味着更好啊,很多人确实会需要,但对我来说更需要的是让 macvim 去实现这个功能,终端 vim 对我而言缺少太多必要的特性。
YouCompleteMe 就别提了,反映慢的要死,根本不是适合做开发用,或许它性能比以前好了,反正我肯定不会选的 |
8
congeec 2016-01-04 13:57:41 +08:00
@chemzqm 跨平台你确实没必要用。就是提一下嘛
YCM 对 js 的补全是基于 tern 的,没感觉慢。它没针对 js 提供实时检查测试,可能你觉得慢是因为 syntastic 的锅。不好意思误导你了 |