注意:該項目已存檔,並已被基於 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