Ⅰ. 插件描述
Syntax checker for ErlangⅡ. 基本信息
|
Ⅲ. 安装方法
使用Vundle管理器安装
在你的.vimrc下添加:Plugin 'ten0s/syntaxerl'
… 然后在Vim中运行以下命令:
:source %
:PluginInstall
对于Vundle版本 < 0.10.2,请用上面的Bundle替换Plugin。
使用NeoBundle管理器安装
在你的.vimrc下添加:NeoBundle 'ten0s/syntaxerl'
… 然后在Vim中运行以下命令:
:source %
:NeoBundleInstall
使用VimPlug管理器安装
在你的.vimrc下添加:Plug 'ten0s/syntaxerl'
… 然后在Vim中运行以下命令:
:source %
:PlugInstall
使用Pathogen管理器安装
在终端中运行以下命令:cd ~/.vim/bundle
git clone https://github.com/ten0s/syntaxerl
Ⅳ. 文档说明
SyntaxErl
SyntaxErl is a syntax checker tool for Erlang. The syntax checker currently
supports erlang source files (.erl), erlang header files (.hrl), erlang configs
(.config, .rel, .script, .app, .app.src), escript files (.erl, .escript, .es),
leex files (.xrl), and yecc files (.yrl). Its main purpose is to be used by tools
like Emacs's Flymake and Vim's
Syntastic or
ALE.
SyntaxErl uses rebar,
rebar3 or erlang.mk
configs under the hood to determine deps and libs paths. Some common compile options
are hardcoded, while others project specific are read from the config files.
For the syntax checker to work correctly, make sure that your project is compilable
and all the deps are at their places.
Building
Information on building and installing Erlang/OTP
can be found here
(more info).
Dependencies
To build SyntaxErl you will need a working installation of Erlang, git, and GNU make.
Building SyntaxErl
$ git clone git://github.com/ten0s/syntaxerl.git
$ cd syntaxerl
$ makeAfter performing the steps above in the current working directory you now
have a script called `syntaxerl'. Place this script anywhere in your path.
Usage
Command line
$ syntaxerl
Syntax checker for Erlang (0.14.0)
Usage: syntaxerl [-d | --debug] <FILENAME>
syntaxerl <-h | --help>
-d, --debug Enable debug output
-h, --help Show this messageEmacs
Flymake
;;;----------------------------------------
;;; erlang-mode
;;;----------------------------------------
(setq erlang-root-dir "/opt/r16b03-1")
(setq load-path (cons (car (file-expand-wildcards (concat erlang-root-dir "/lib/tools-*/emacs"))) load-path))
(setq erlang-electric-commands nil)
(require 'erlang-start)
(add-hook 'erlang-mode-hook
'(lambda()
(imenu-add-to-menubar "Imenu")))
; define auto erlang mode for these files/extensions.
(add-to-list 'auto-mode-alist '(".*\\.app\\'" . erlang-mode))
(add-to-list 'auto-mode-alist '(".*app\\.src\\'" . erlang-mode))
(add-to-list 'auto-mode-alist '(".*\\.config\\'" . erlang-mode))
(add-to-list 'auto-mode-alist '(".*\\.rel\\'" . erlang-mode))
(add-to-list 'auto-mode-alist '(".*\\.script\\'" . erlang-mode))
(add-to-list 'auto-mode-alist '(".*\\.escript\\'" . erlang-mode))
(add-to-list 'auto-mode-alist '(".*\\.es\\'" . erlang-mode))
(add-to-list 'auto-mode-alist '(".*\\.xrl\\'" . erlang-mode))
(add-to-list 'auto-mode-alist '(".*\\.yrl\\'" . erlang-mode))
; add include directory to default compile path.
(defvar erlang-compile-extra-opts
'(bin_opt_info debug_info (i . "../include") (i . "../deps") (i . "../../") (i . "../../../deps")))
; define where put beam files.
(setq erlang-compile-outdir "../ebin")
;;;----------------------------------------
;;; flymake
;;;----------------------------------------
(require 'flymake)
(require 'flymake-cursor) ; http://www.emacswiki.org/emacs/FlymakeCursor
(setq flymake-log-level 3)
(defun flymake-compile-script-path (path)
(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 path (list local-file))))
(defun flymake-syntaxerl ()
(flymake-compile-script-path "~/bin/syntaxerl"))
(add-hook 'erlang-mode-hook
'(lambda()
(add-to-list 'flymake-allowed-file-name-masks '("\\.erl\\'" flymake-syntaxerl))
(add-to-list 'flymake-allowed-file-name-masks '("\\.hrl\\'" flymake-syntaxerl))
(add-to-list 'flymake-allowed-file-name-masks '("\\.xrl\\'" flymake-syntaxerl))
(add-to-list 'flymake-allowed-file-name-masks '("\\.yrl\\'" flymake-syntaxerl))
(add-to-list 'flymake-allowed-file-name-masks '("\\.app\\'" flymake-syntaxerl))
(add-to-list 'flymake-allowed-file-name-masks '("\\.app.src\\'" flymake-syntaxerl))
(add-to-list 'flymake-allowed-file-name-masks '("\\.config\\'" flymake-syntaxerl))
(add-to-list 'flymake-allowed-file-name-masks '("\\.rel\\'" flymake-syntaxerl))
(add-to-list 'flymake-allowed-file-name-masks '("\\.script\\'" flymake-syntaxerl))
(add-to-list 'flymake-allowed-file-name-masks '("\\.escript\\'" flymake-syntaxerl))
(add-to-list 'flymake-allowed-file-name-masks '("\\.es\\'" flymake-syntaxerl))
;; should be the last.
(flymake-mode 1)
))
; see /usr/local/lib/erlang/lib/tools-<Ver>/emacs/erlang-flymake.erl
(defun erlang-flymake-only-on-save ()
"Trigger flymake only when the buffer is saved (disables syntax
check on newline and when there are no changes)."
(interactive)
;; There doesn't seem to be a way of disabling this; set to the
;; largest int available as a workaround (most-positive-fixnum
;; equates to 8.5 years on my machine, so it ought to be enough ;-) )
(setq flymake-no-changes-timeout most-positive-fixnum)
(setq flymake-start-syntax-check-on-newline nil))
(erlang-flymake-only-on-save)Erlang-flymake
Your help is welcome.
Vim
Syntastic
Setup everything as described here.
Then add
let g:syntastic_erlang_checkers=['syntaxerl']
to your vimrc.
Thanks locojay for that.
ALE
Install ALE plugin for vim 8+ or neovim.
To disable erlc linter please add the following lines to your vimrc:
let g:ale_linters = {
\ 'erlang': ['syntaxerl'],
\}