Emacs中的语法检查工具--Flymake

1 快速入门

-----------

 * 要想当打开能够进行语法检查的文件时自动开启flymake,需要进行如下配置


(add-hook 'find-file-hook 'flymake-find-file-hook)


 * 当进入flymake-mode后,语法检查会在出现以下情况时自动进行

   * 加载buffer后

   * 回车后

   * 改变buffer内容后过了一定的时间(默认为0.5s)

 * 如果想手工运行语法检查,则执行函数`flymake-start-syntax-check-for-current-buffer`

 * 如果语法检查出错误/警告,则会高亮出错的行,并在mode-line上显示总共的错误和警告的数量

 * 使用`flymake-goto-next-error`和`flymake-goto-prev-error`移动到下一个/下一个错误行

 * 要查看当前行的错误信息,使用命令`flymake-display-err-menu-for-current-line`

 * 语法检查完成后,会在mode-line上显示检查的结果. 说明如下

     Flymake*       Flymake正在运行,暂时没找到错误                                  

     Flymake:E/W*   Flymake正在运行,已经找到E个错误和W个警告                        

     Flymake        Flymake运行结束,没有找到错误                                    

     Flymake:E/W    Flymake运行结束,已经找到E个错误和W个警告                        

     Flymake:!      Flymake无法找到当前buffer的主文件                              

     CFGERR         语法检查进程返回非0值,但是分析不出错误/警告信息,可能是配置错误  

     NOMASTER       不能找到当前buffer的主文件                                      

     NOMK           不能找到当前buffer的构建文件,比如makefile                      

     PROCESS        Flymake无法运行语法检查进程                                    

 * 若Flymake出现错误,可以切换到*Message* buffer查看日志,变量`flymake-log-level`定义了记录日志的级别,-1表示不记录日志


2 配置

-------


2.1 配置变量

=============

  * flymake-log-level

    日志输出的级别

  * flymake-allowed-file-name-masks

    该变量配置语法检查工具,列表的元素格式为(filename-regexp, init-function, cleanup-function

    getfname-function).

  * flymake-buildfile-dirs

    搜寻构建文件(通常为makefile文件)的目录(相对路径)列表

  * flymake-master-file-dirs

    搜索主文件(master file)的目录列表

  * flymake-get-project-include-dirs-function

    该变量的值为一个函数,函数的作用是接收一个basedir参数,返回项目的include目录列表

  * flymake-err-line-patterns

    错误/警告信息的模式匹配,列表元素格式为(regexp file-idx line-idx col-idx err-text-idx)

  * flymake-compilation-prevents-syntax-check

    该值说明了对同一个文件是否可以编译与语法检查同时进行

  * flymake-no-changes-timeout

    设置对buffer修改了多长时间后,开始进行语法检查

  * flymake-start-syntax-check-on-newline

    是否在回车后开始进行语法检查.

  * flymake-errline

    显示出现错误的行的显示方式(face)

  * flymake-warnline

    显示出现警告的行的显示方式(face)


2.2 扩展支持新的语法检查工具

=============================

  通过配置flymake-allowed-file-name-masks变量,可以扩展新的语法检查工具,该列表元素为(regexp file-idx line-idx col-idx err-text-idx),现在对元素中各内容进行一些说明

  * filename-regexp

    Flymake将buffer filename跟filename-regexp作匹配,如果没有匹配,则关闭flymake-mode,否则使用第一个匹配到的信息进行语法检查

  * init-function

    init-function被用来进行语法检查前的初始化动作, 通常通过复制一份buffer内容的临时拷贝来完成.

    该函数必须返回(cmd-name arg-list)这样的格式.

    如果init-function返回null,则不会进行语法检查,而flymake-mode也不会被关闭

  * cleanup-funcition

    cleanup-function被用来进行语法检查后的清理动作,通常会删除init-function创建的临时拷贝.

  * getfname-function

    该函数被用来将语法检查工具所报告的文件名(它只是一个由init-function所创建的临时拷贝)转换成真正的文件名. 大多数时候可以使用函数`flymake-get-real-file-name`


  如果新语法检查工具的输出无法被Flymake识别的话,则需要配置`flymake-err-line-patterns`变量.该列表元素格式为(regexp file-idx line-idx col-idx err-text-idx)

  下面是一个Perl检查的例子


(defun flymake-perl-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 "perl" (list "-wc " local-file))))
  (setq flymake-allowed-file-name-masks
        (cons '(".+\\.pl$"
                flymake-perl-init
                flymake-simple-cleanup
                flymake-get-real-file-name)
              flymake-allowed-file-name-masks))
  (setq flymake-err-line-patterns
        (cons '("\\(.*\\) at \\([^ \n]+\\) line \\([0-9]+\\)[,.\n]"
                2 3 nil 1)
              flymake-err-line-patterns))


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值