• Emacs flycheck插件配置中遇到的若干问题


    工欲善其事必先利其器,一个高效的代码检查工具会大大提高我们的开发效率。flycheck是Emacs中常用的一个代码编译检查工具,本文记录配置它的时候遇到的一些问题以及解决方法。

    flycheck的基本原理很简单,就是在需要做检查的时候(时机可能是你保存了某个文件,或者改文件打开后idle了若干时间),使用编译工具把你当前的源文件编译一遍,有问题就显示在当前buffer中。对于C++代码,它的做法就是用gcc或者g++把当前源文件编译一遍。理解了原理,遇到问题后就好解决了。

    1,错误行高亮问题

    我想修改错误行的高亮方式,我的做法是直接修改flycheck.el源文件,对于C++代码,修改下面的地方就可以:

    732(defface flycheck-error
     733  '((((supports :underline (:style wave)))
     734     :underline (:style wave :color "cyan")
     735     :background yellow)  // 这一行是我加的
     736    (t
     737     :underline t :inherit error))
     738
     739  "Flycheck face for errors."
     740  :package-version '(flycheck . "0.13")
     741  :group 'flycheck-faces)
     742

    我这样改的目的是将错误行的背景修改成黄色,这样更醒目一些。

    2,打开cpp文件后,flycheck在include出显示错误,说找不到该头文件

    上面说了flycheck的工作原理,找不到头文件,说明flycheck在用gcc编译源代码时没找到头文件,通过阅读flycheck.el代码可以看出,通过设置变量flycheck-gcc-include-path能指定头文件路径,对于一个大型C++项目来说,头文件可能散落在很多目录下面,这可以通过在项目根目录下面生成一个名叫.dir-locals.el的文件,在它里面指定gcc编译的时候的头文件路径,就像下面这样:

    1((c++-mode . ((flycheck-gcc-include-path . (
     2                                       "/usr/include"
     3                                       "/home/cobbliu/thirdparty/gcc-4.9.2/include"
     4                                       "/home/admin/jinxin/project/include"
     5                                       "/home/admin/jinxin/project/chunkserver/include")))))

    如果头文件目录非常多,可以通过Bear来生成compile_commands.json,然后对compile_commands.json做一些处理拿出所有的头文件路径写到.dir-locals.el中

    3,打开cpp文件后,flycheck并没有起作用

    我打开了一个cpp文件,手动写了一行错误的代码,但是flycheck并没有工作,这个时候需要看一些flycheck在编译当前文件的时候具体出了什么错误,详情见http://www.flycheck.org/en/latest/user/troubleshooting.html。简单地说,就是使用M-x flycheck-compile,然后键入c/c++-gcc让flycheck手动编译一次,它的编译信息会在一个单独的Buffer中显示,flycheck没有工作肯定是编译的时候出了什么问题,根据Buffer中显示的问题去逐一解决。

    4,.h文件没有被flycheck做检查

    .h文件被emacs使用c-mode打开了,可以在.emacs中使用下面的命令让emacs用c++-mode打开.h文件:

    add-to-list 'auto-mode-alist '("\.h\'" . c++-mode))

    5,flycheck-compile发现编译错误太多,比如变量未定义等错误

    这主要是因为flycheck在使用gcc编译源文件的时候,加上了-Wall选项,要想关闭改选项,在.emacs中修改变量flycheck-gcc-warnings的值,像下面这样:

    (add-hook 'c++-mode-hook
              (lambda () (setq flycheck-gcc-warnings nil)))

    不过不推荐这么做。

  • 相关阅读:
    D365 FO操作FTP
    D365 FO凭证信息客制化
    input type = number 去除上下箭头,禁用滚轮事件(默认的自带滚轮加减数字)
    touch事件中的touches、targetTouches和changedTouches详解
    css媒体查询
    JavaScript:闭包
    JavaScript:基本包装类型
    十大模板引擎
    关于模板引擎一
    eval详解
  • 原文地址:https://www.cnblogs.com/cobbliu/p/7468620.html
Copyright © 2020-2023  润新知