我正在尝试让JSHint与Flymake合作。
jshint
确实安装在/opt/bin
中并且有效。 /opt/bin
位于Emacs'exec-path
。
我已关注the directions on the EmacsWiki,并在我的init.el
(defun flymake-jshint-init ()
(let* ((temp-file (flymake-init-create-temp-buffer-copy
'flymake-create-temp-inplace))
(local-file (file-relative-name
temp-file
(file-name-directory buffer-file-name))))
(list "jshint" (list local-file))))
(setq flymake-err-line-patterns
(cons '("^ [[:digit:]]+ \\([[:digit:]]+\\),\\([[:digit:]]+\\): \\(.+\\)$"
nil 1 2 3)
flymake-err-line-patterns))
(add-to-list 'flymake-allowed-file-name-masks
'("\\.js\\'" flymake-jshint-init))
当我打开JavaScript文件时,我的模式显示为:
[(Javascript Flymake* AC)]
这很奇怪,因为当我使用Flymake与C ++或Python时,*
通常不会出现。根据Flymake文档,Flymake*
表示“Flymake目前正在运行”。但是,Flymake没有显示任何错误。
我已经检查了*Messages*
缓冲区,但它只列出了几行Fontifying foo.js... (regexps...................)
。没有错误。
其他建议?
答案 0 :(得分:1)
尝试使用M-:
执行(setq flymake-log-level 3)
,这会导致flymake将调试信息打印到*Messages*
。
Here's how I use flymake with jslint,对我来说效果很好 - 代码可能会给你一些关于你出错的线索。
您可能还会考虑js2-mode
,它提供了一些类似语言的类似lint的警告,而不需要运行外部进程。
答案 1 :(得分:0)
我找到了一个名为jshint-mode的项目并尝试过。它创建了一个名为*jshint-mode*
的缓冲区,它显示了错误:JSHint无法找到强大的模块。
我在Emacs中运行 M-x setenv 来设置NODE_PATH
,以便jshint
可以找到强大的库。我还在NODE_PATH
中设置了/etc/profile
。
答案 2 :(得分:0)
jshint-mode对我不起作用(我使用的是Linux Mint 14' Nadia') - 我在#fly; flymake的配置中遇到错误"当它运行curl
与运行jshint脚本的Node.js实例通信时。这很令人困惑,我不熟悉ELisp来处理.el
文件。
我解决了这个问题,而是直接转到github上的Emacs flymake project fork,它现在支持jshint内置(它需要安装为npm -g install jshint
,而这需要你安装{ {1}}和node.js(如果您还没有)。这使得事情有效。
还有一点需要注意:在我的Linux机器上,npm
是node
中已存在的可执行文件,我必须在/usr/sbin
中创建一个名为node
的符号链接来覆盖前者。这是必要的,因为Linux Mint的Node.js二进制文件(可能是Ubuntu,我还没有检查过)被命名为/usr/local/bin
,并且会导致编写许多脚本,假设二进制名称为nodejs
失败。您可以通过键入node
来测试它:如果它是预先存在的二进制文件,它通常会以静默方式返回到提示符,但如果它是Node.js,它会提示您node
(您可以按Ctrl- D退出那里)