jsLint for VimMarch 10, 2009

我们在编写 Javascript 时,Debug 是很痛苦的过程,而且有些语法问题虽使用 Firebug 能很快定位,但毕竟影响效率。

这里有个 Vim 插件,能使用 jsLint 帮助检查 Javascript 脚本中常见的语法错误,所以这篇文章可以帮助延长 F5 的寿命。

http://files.gracecode.com/2009_11_05/394547197918.jpg

首先, 下载 jsLint ,解压缩到某个目录,然后将这个目录加入到 PATH 环境变量中。然后, 下载 Vim 的 jsLint 插件 ,将它扔到 Vim 的 plugin 目录中即可。

当保存编辑好的 Javascript 文件时,插件就会调用 jsLint 检查文件是否存在语法错误。当然可以配置相应的配置选项(更多的选项可以参考其 Vim 插件脚本内容),例如

" 指定 jsLint 调用路径,通常不用更改
let g:jslint_command = 'jsl'
" 指定 jsLint 的启动参数,可以指定相应的配置文件
let g:jslint_command_options = '-nofilelisting -nocontext -nosummary -nologo -process'
" 插件的主要调用方式
autocmd BufWritePost,FileWritePost *.js call JsonLint()

其实核心函数是 JsonLint() ,所以可以绑定快捷键,用于在任何时候检查错误。例如

map <C-s><C-j> :call JsonLint()<cr>

这样同时按 Ctrl + SCtrl + J 就可以检查 Javascript 语法有无问题了。

-- 更新 --

发现个不大不小的问题。就是在 Windows 环境中如果 Vim 本身设置了 utf-8 编码,由于与控制台编码不一致(控制台为 gbk 编码)造成 Javascript 文件在中文目录下不能正确启动 jsLint。

这里有个不完全的解决方案,更改对应的代码(从 34 行开始,加入判断)

  let jsl_command = g:jslint_command . ' ' . g:jslint_command_options . ' ' . current_file

  if has("win32") && v:lang == 'zh_CN.utf-8'
    let jsl_command = iconv(jsl_command, 'utf-8', 'gbk')
  endif

  let cmd_output = system(jsl_command)
  
  if has("win32") && v:lang == 'zh_CN.utf-8'
    let cmd_output = iconv(cmd_output, 'gbk', 'utf-8')
  endif

如果自行修改觉得麻烦, 就用我的修改后的插件吧

§ 15 条评论

  1. 顶。。。。

  2. 我在textmate里也加了一个,每次保存的时候检查错误,避免了不少问题

  3. 已经好久没有用Vim了..自从UEStudio新版解决了启动速度傻慢后一直用UE了

  4. 谢谢推荐

  5. 夜猫子 夜猫子

    的确很过瘾啊,不过我把我的vim热键也绑定到了F5……

    补充一点点,用
    jsl -help:conf > /usr/local/etc/jsl.conf
    然后修改.vimrc
    let g:jslint_command_options = '-conf /usr/local/etc/jsl.conf -nofilelisting -nocontext -nosummary -nologo -process'
    这样就可以通过修改jsl.conf文件来关闭某些特性
    比如我在js里用for (var i = 0; ...)的写法,就出现了很多redeclared var warning,干脆关闭了事

  6. pan pan

    呵呵,ubuntu下的配置可以参考我的:)
    http://panweizeng.com/archives/359

  7. 顶楼上的,推荐 pan 的整理

  8. 修改path不是个好办法

    将jsl-0.3.0解压缩到vim目录下的的vimfile\etc(随意),
    然后将
    let g:jslint_command = 'jsl'
    修改为
    let g:jslint_command = $VIM . '\vimfiles\etc\vimfiles\etc\jsl-0.3.0\jsl.exe'

    这样就够绿色了,考到哪里都可以运行

  9. 粗心了,应该是这样

    let g:jslint_command = $VIM . '\vimfiles\etc\jsl-0.3.0\jsl.exe'

  10. @llinzzi 嗯,这个主意不错,顺便可以把 conf 文件也做个类似的处理。PS,我更喜欢用 $HOME :^)

  11. 好厉害,越来越爱上vim了。
    p.s. 我是新手,开始测试桌面上的js文件一直不没反应,原来是不支持中文目录,中文文件名也不行。不知道怎么解决?

  12. 公司电脑上把vim装到c盘默认路径下了,好像是因为Program Files带有空格,导致jslint运行不正常,请问除重装外有其他解决办法不?

  13. [...]这个已有单机应用程序版本,更多资料可以参考 jsLint for Vim 和 javaScriptLint.vim (script#2578),另外,还是很期待 X/HTML 和 CSS 也有类似的版本的。[...]

  14. map :call JsonLint()

    这是个笔误吗?还是老版本,新版本的函数是javascriptLint

  15. 请问博主,这个在html里面 嵌套的js是不是不可以用的 ?

添加评论




* Required (but your email address will never be published)

Yahoo 统计