技巧108-定制外部编译器

  • Vim的:make命令不限于调用外部的make程序,也可以调用任何安装在机器上的编译器。

配置Vim,使其在运行:make时可以调用nodelint,即JSLint的命令接口。

  • nodelint依赖Node.js,可以通过NPM命令进行安装
npm install nodelint -g
  • makeprg 选项运行指定运行:make时调用的程序,帮助:h 'makeparg'
  • 通过以下命令,可以指示Vim运行nodelint
  • 其中%将被扩展成当前文件所在的路径
:setlocal makeprg=NODE_DISABLE_COLORS=1\ nodelint\ %
  • 如果当前正在编辑~/quickfix/cfanzp_test.js,则在Vim中运行:make,等价于在shell中运行以下命令
export NODE_DISABLE_COLORS=1
nodelint ~/quickfix/cfanzp_test.js
  • 在默认情况下,nodelint采用ANSI色标编码把错误信息高亮为红色。
  • 配置NODE_DISABLE_COLORS=1 将会禁用颜色高亮,这样可以更容易地解析出错信息。

用Nodelint的输出结构填充Quickfix列表

  • errorformat选项允许我们指导Vim如何解析由:make产生的输出结果。
  • 参见:h 'errorformat'
  • 查看选项的默认值:
:setglobal errorformat?
  • lua demo:
  • %f 表示文件名
  • %l 表示行号
  • %m 表示错误信息
errorformat=%*[^"]"%f"%*\D%l: %m,"%f"%*\D%l: %m,%-G%f:%l: (Each undeclared identifier is reported only once,%-G%f:%l: for each function it appears in.),%-GIn file included from %f:%l:%c:,%-GIn file included from %f:%l:%c\,,%-GIn file included from %f:%l:%c,%-GIn file included from %f:%l,%-G%*[ ]from %f:%l:%c,%-G%*[ ]from %f:%l:,%-G%*[ ]from %f:%l\,,%-G%*[ ]from %f:%l,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,"%f"\, line %l%*\D%c%*[^ ] %m,%D%*\a[%*\d]: Entering directory %*[`']%f',%X%*\a[%*\d]: Leaving directory %*[`']%f',%D%*\a: Entering directory %*[`']%f',%X%*\a: Leaving directory %*[`']%f',%DMaking %*\a in %f,%f|%l| %m
  • 可以使用setlocal 来设置错误格式的选项

用一条命令设置 makeprg 与 errorformat

  • errorformat的配置太难记了。
  • 可以将其保存到某个文件并使用:compiler命令来激活它。
  • 帮助 :h :compiler
:compiler nodelint
  • 通过运行以下命令,可以对Vim自带的编译器插件了解得更透彻。
:args $VIMRUNTIME/compiler/*.vim
                            ```