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)))

不过不推荐这么做。

时间: 2025-01-07 00:33:53

Emacs flycheck插件配置中遇到的若干问题的相关文章

Eclipse中Easy Shell插件配置PowerCmd

1.了解EasyShell.PowerCMD和基本命令 http://sourceforge.net/projects/pluginbox/ http://www.powercmd.com/ 了解基本命令 cmd.start及 PowerCmd命令参数 2.EasyShell插件配置PowerCMD Eclipse -> Window -> Prefernces -> Easy Shell Presets选择"Unkonwn Shell / file browser"

Eclipse中Svn插件配置

1. Svn插件配置教程 http://www.cnblogs.com/ruiati/p/3584120.html 2. Svn插件使用教程 http://wenku.baidu.com/link?url=MrScWbcz1WV5R0ICkT-cesgs9C8Inv2Wscf2HV52aqcwhR9FzBV55q0BJshCaGJJ_PXMVB_BDtd6QRVjauBU00Wx1Xj5nzLLW6S0WOS8G9e

Eclipse中Maven插件配置

1. Maven插件配置 http://www.blogjava.net/fancydeepin/archive/2012/07/13/eclipse_maven3_plugin.html 2. Maven使用教程 http://www.cnblogs.com/sunddenly/p/4195975.html

Gvim各种插件配置(windows环境下)

1.Vundle插件:https://github.com/gmarik/Vundle.vim 用于管理Vim插件,安装此插件需要系统中已安装git,参考链接:Git for Windows安装和基本设置 在Vim/vimfiles路径下新建文件夹bundle,然后在此文件夹下克隆github上的vundel项目: 完成后会在bundle文件夹下看到Vundle.vim文件夹下的内容,开始配置vundle: 在.vimrc文件中添加如下代码: 1 filetype off 2 3 "Vundle

Bolt XML和JQBolt Lua代码自动补全插件配置教程

Bolt没有提供官方IDE,缺少强大的代码提示和自动补全,Notepad++写起界面和脚本来比较费劲. Notepad++有个QuickText插件,支持多语言的自动补全,进行简单的配置就可以支持Bolt XML和JQBolt Lua代码. 配置后的效果,输入关键字,Ctrl+Enter自动补全: 下面介绍一下配置方法: 1.在JQBolt中下载QuickText插件和已经配置好的配置文件:https://github.com/zhenghecn/JQBolt,这两个文件在plugins目录下:

eclipse git插件配置

一.Eclipse上安装GIT插件EGit Eclipse的版本eclipse-java-helios-SR2-win32.zip(在Eclipse3.3版本找不到对应的 EGit插件,无法安装) EGit插件地址:http://download.eclipse.org/egit/updates OK,随后连续下一步默认安装就可以,安装后进行重启Eclipse 二.在Eclipse中配置EGit 准备工作:需要在https://github.com 上注册账号 Preferences > Tea

通过Vim+少量插件配置一个高效简洁的IDE

最近本人在看<TCP/IP Illustrated Volume2:The Implementation>这本书,自然要下载4.4BSD-Lite的源代码配合书本一起研读.以前学习Vim的时候就知道Vim可以通过插件的功能来配置一个功能强大的自定义IDE,这次有这么好的机会为什么不利用一下呢?于是在阅读源代码的过程中根据需要一步一步配置了一个简单完整的IDE环境,通过这几天的使用真心觉得Vim好用,速度那个快呀.以前总听别人说Vim如何如何好,这次真的让我感受到了并爱上了Vim这个工具.在这里

jetty热部署,持久化session,jetty-maven插件配置

持久化session 背景 使用maven管理项目,使用jetty插件启动项目,虽然jetty是热部署的,但是没有配置的jetty并不算真正的热部署.因为在没有配置前每次热部署都会把session丢了.导致测试期间的数据丢失,重来一遍很麻烦. 本人使用的是jetty-maven-plugin,关于这个插件的一些基本配置就不说了,网上很多. 配置代码pom <plugin> <groupId>org.mortbay.jetty</groupId> <artifact

Maven常用插件配置和使用

主要介绍Maven的几个常见第三方插件(cobertura.findbugs.source.assembly.插件开发)配置和使用,接Maven介绍 maven本质上是一个插件框架,它的所有工作都交给插件来做,每个插件可以有多个goal.除了自带的插件之外还有很多比较成熟的第三方插件,我们也很容易上手进行简单的插件开发,下面一一介绍 1 自带插件maven自带的核心插件为Build plugins和Reporting plugins.mvn compile编译源码实际上就利用到了maven-co