注意:该项目已存档,并已被基于 LSP 的突出显示所取代,该突出显示不太笨重且资源密集度较低。 color_coded 无疑开创了这个领域,我很感谢从那时起我们的编辑器中所有被着色的标记。
color_coded 是一个 vim 插件,它使用 libclang 为 C++、C 和 Objective C 提供实时(快速)、无标记代码突出显示。
颜色编码之前 | 颜色编码后 |
---|---|
在 OS X 上安装 color_coded 之前,请阅读以下内容。随(即使是最新的)OS X 附带的 vim 还不够新,无法支持 color_coded。此外,homebrew 中的默认 macvim 没有启用 lua。为了确保您在 OS X 上安装了有效的 macvim,请执行以下操作:
brew update
brew install macvim --with-lua --with-override-system-vim
brew linkapps macvim
brew install xz cmake
# Spawn a new shell to use the new system vim
为了获得正确的突出显示,您还需要 Xcode 命令行工具,它将为您提供适当的系统标头:
xcode-select --install
首先,安装所有必需的依赖项。
[sudo] apt-get install build-essential libclang-3.9-dev libncurses-dev libz-dev cmake xz-utils libpthread-workqueue-dev libtinfo-5
对于 lua,您必须安装您的 vim 版本所编译的版本。
vim --version | grep lua
找到您的版本号-llua5.x
并使用它来安装正确的版本。
[sudo] apt-get install liblua5.x-dev lua5.x
您还需要确保您拥有 GCC 4.9(或更高版本)。如果没有,您可以尝试以下操作(在 Ubuntu 14.04 上测试)。
# Install GCC 4.9
[sudo] add-apt-repository ppa:ubuntu-toolchain-r/test
[sudo] apt-get update
[sudo] apt-get install g++-4.9
# Prefer 4.9 to other versions
[sudo] update-alternatives --remove-all g++
[sudo] update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 50
(在 FreeBSD 11.1 中测试)
$ [sudo] pkg install llvm40 cmake
$ cd ~ /.vim/bundle/color_coded
$ mkdir build && cd build
$ cmake -DCUSTOM_CLANG=1 -DLLVM_ROOT_DIR=/usr/local/llvm40 ..
$ make && make install
安装已使用 vundle 进行了测试,但也应与病原体兼容。要使用 vundle 安装(将行添加到~/.vimrc
,重新启动 vim,运行:PluginInstall
):
Plugin ' jeaye/color_coded '
使用 NeoBundle 安装支持自动构建和延迟加载插件:
NeoBundleLazy ' jeaye/color_coded ' , {
' build ' : {
' unix ' : ' rm -f CMakeCache.txt && cmake . && make && make install ' ,
},
' autoload ' : { ' filetypes ' : [ ' c ' , ' cpp ' , ' objc ' , ' objcpp ' ] },
' build_commands ' : [ ' cmake ' , ' make ' ]
}
由于 color_coded 有一个已编译的组件,因此在安装和更新时您需要手动编译(除非您的 vim 包管理器为您做这件事)。编译工作如下,假设使用 vundle (请参阅依赖项部分以确保您可以正确make
):
cd ~ /.vim/bundle/color_coded
rm -f CMakeCache.txt
mkdir build && cd build
cmake ..
make && make install # Compiling with GCC is preferred, ironically
# Clang works on OS X, but has mixed success on Linux and the BSDs
# Cleanup afterward; frees several hundred megabytes
make clean && make clean_clang
出于各种兼容性原因,color_coded 将尝试下载已知版本的 clang。这可能会增加配置过程的时间,但它可以在多个平台上提供更高的稳定性。避免这种情况并未得到官方支持,但在此处记录。
另一个注意事项: color_coded 不能可靠地支持 luajit。更详细地说,luajit 并不可靠地支持嵌入到共享库中。
一旦 color_coded 安装并编译完成,它就会在你下次启动 vim 时自动开始工作。为了让 color_coded 知道必须如何编译代码,您可能需要创建一个描述所需编译器选项的文件。请注意,color_coded 假定合理的默认值并尝试允许立即使用。
也就是说,在任何重要的情况下,您都会发现自己需要为您的项目提供.color_coded
文件。对于每个文件, color_coded 将从文件目录一直搜索到文件系统的根目录,查找.color_coded
文件或.color_coded_foo
文件(其中foo
是文件类型;即c
、 cpp
等)。例如,这使得您可以在主目录中拥有一个,然后在每个项目的目录中拥有一个。如果您未在项目目录中指定,则使用主目录中的目录。它还可以为不同的文件类型(C、C++ 等)提供不同的标志,并且还可以在具有不同标志的子项目中工作。同样,如果没有找到这样的文件,将应用合理的默认值。
color_coded 将尽最大努力为您突出显示您的代码,即使翻译单元中存在错误。当 color_coded 不了解有关项目的所有信息时,这可以在键入时更好地突出显示并突出显示有效代码。
.color_coded
或.color_coded_foo
文件的内容只是一个以行分隔的编译器选项列表。例如,color_coded 的.color_coded
文件为(color_coded 在检测到 C 或 C++ 文件时默认将其余部分放入):
-Iinclude
-Ilib/jest/include
.color_coded
文件可以使用 YCM-Generator 自动生成。
注意:为了简单起见, .color_coded
文件中不允许有其他数据。也就是说不支持评论。
g:color_coded_enabled
此选项控制 color_coded 是否起作用。调用:CCtoggle
命令将修改此选项以实现其结果。您还可以在~/.vimrc
中将其指定为0
以全局禁用 color_coded。
默认:
let g: color_coded_enabled = 1
g:color_coded_filetypes
此选项控制 color_coded 将尝试编译的文件类型。
默认:
let g: color_coded_filetypes = [ ' c ' , ' cpp ' , ' objc ' ]
color_coded 添加了许多新的突出显示组。它们被设计为尽可能紧密地遵循 libclang 的内部结构。为了将事物联系在一起,创建了一些包装器组,这些包装器组将允许进行更彻底的更改。默认情况下,clang 组被映射为使用这些组以及 vim 的普通组( Function
、 Macro
、 Number
等)。
" To get full highlighting, specify these in your colorscheme.
" See colors/twilighted.vim for example usage
hi Member " Any non-static member variable
hi Variable " Any non-member variable
hi Namespace
hi EnumConstant
hi link StructDecl Type
hi link UnionDecl Type
hi link ClassDecl Type
hi link EnumDecl Type
color_coded 附带了一个示例配色方案,演示了对扩展组的支持。要使用它,请调用:colorscheme twilighted
。顾名思义,颜色方案是从 vim 自己的暮光主题中分叉出来的,并已被适当地双关为您将在存储库中看到的内容。要检查实现,请访问colors/twilighted.vim
。请注意,color_coded 可以与任何颜色方案一起使用;这只是一个示例。
有关所有受支持组的更多信息,请参阅after/syntax/color_coded.vim
和 clang 文档。
:CCerror
该命令输出 libclang 的最后一个编译错误消息。如果您的突出显示无法正常工作,则可能是您的.color_coded
文件配置错误,或者源代码中可能存在语法错误。如有疑问,请先检查此处。
:CCtoggle
此命令启用 color_coded(如果当前已禁用)或禁用它(如果当前已启用)。此启用/禁用是通过g:color_coded_enabled
选项完成的。
color_coded 的编译需要:
使用 color_coded 需要 vim:
color_coded 尝试在您键入时编译您的编码。由于 vim 的工作原理,color_coded 只能在您执行某些操作(移动光标、进行更改等)后更新突出显示。当您完成输入并且突出显示尚未完成更新时,假设您的.color_coded
文件足够,移动光标(或以其他方式引发事件)将允许 color_coded 完成。
请注意,vim 中有一个保持事件,该事件会在您停止输入并延迟一段时间后触发。 color_coded 也与此挂钩,并在可能的情况下使用它来应用突出显示。
是的。不管你相信与否,这些几乎肯定是 libclang 错误。我已经整理了其中的一些,并且正在维护我自己的 libclang 分支。如果您想报告此类问题,请查看此票证。
这是故意的。第一次打开缓冲区时,color_coded 不知道它是否会正确编译,并且它不希望您在尝试弄清楚这一点时等待。 color_coded 将始终在后台编译,移动光标或更改文本等事件将轮询更新。但请注意,一旦缓冲区突出显示,离开该缓冲区并返回该缓冲区将同步应用先前的突出显示。
安装color_coded时,需要手动编译才可以成功使用。请参阅安装以获取说明。
假设您已经更新了 color_coded 的工作安装,如果更新要求您重新编译 color_coded(即本机 API 已发生更改),您将收到此错误。要重新编译,请按照与最初编译相同的步骤进行操作。
至少目前,color_coded 不支持 neovim。然而,chromatica.vim 旨在提供类似的突出显示,特别是针对 neovim。
这种情况发生在某些需要额外包含路径的操作系统上;解决方案是确保这些路径位于您的.color_coded
文件中,并以-isystem
为前缀。要找出这些路径,请运行以下命令:
echo | clang -v -E -x c++ -
有关详细信息,请参阅此问题评论。 color_coded 尝试通过假设其中一些来提供帮助,如这里的post_constants()
所示。
您可能正在使用 luajit,它不能很好地嵌入共享库中。如果您不确定,请看看这是否会出现任何问题:
vim --version | grep jit
更多信息请参见此处。
您可以在.vimrc
中使用它:
" Disable color_coded in diff mode
if & diff
let g: color_coded_enabled = 0
endif
您可以向cmake
指定DOWNLOAD_CLANG=0
。根据您的平台,您可能还需要使用LLVM_CONFIG=
指定 llvm-config 二进制文件的路径。这还可以允许您使用不同版本的 Clang/LLVM。
例子:
cmake . -DDOWNLOAD_CLANG=0
您可能会在基于 Debian 的系统上遇到此问题。解决方案是安装liblua-5.x-0-dbg
。
这是由 vim 的 bug 引起的;您可以使用至少带有补丁 1691 的 vim 来解决此问题。有关详细信息,请参阅此问题。
欢迎在 Github 上提出问题或给我发电子邮件或在 IRC 上联系我:Freenode @ #color_coded
color_coded 遵循 MIT 开源许可证。
请参阅LICENSE
文件或 http://opensource.org/licenses/MIT