HINWEIS: Dieses Projekt ist archiviert und wurde durch LSP-basierte Hervorhebung ersetzt, die weniger umständlich und weniger ressourcenintensiv ist. color_coded hat in diesem Bereich zweifellos Pionierarbeit geleistet und ich bin dankbar für alle Token, die seitdem in unseren Editoren eingefärbt wurden.
color_coded ist ein VIM-Plugin, das mithilfe von libclang Echtzeit-Code-Hervorhebung (schnell) ohne Tags für C++, C und Objective C ermöglicht.
Vor color_coded | Nach color_coded |
---|---|
Bevor Sie color_coded unter OS X installieren, lesen Sie bitte Folgendes. Das vim, das mit (selbst dem neuesten) OS X geliefert wird, ist nicht neu genug, um color_coded zu unterstützen. Darüber hinaus ist Lua im Standard-Macvim von Homebrew nicht aktiviert. Um sicherzustellen, dass Sie über eine gültige Macvim-Installation unter OS X verfügen, gehen Sie bitte wie folgt vor:
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
Für eine ordnungsgemäße Hervorhebung benötigen Sie außerdem die Xcode-Befehlszeilentools, die Ihnen die entsprechenden Systemheader liefern:
xcode-select --install
Installieren Sie zunächst alle erforderlichen Abhängigkeiten.
[sudo] apt-get install build-essential libclang-3.9-dev libncurses-dev libz-dev cmake xz-utils libpthread-workqueue-dev libtinfo-5
Für Lua müssen Sie die Version installieren, für die Ihre VIM-Version kompiliert wurde.
vim --version | grep lua
Finden Sie Ihre Versionsnummer -llua5.x
und verwenden Sie diese, um die richtige Version zu installieren.
[sudo] apt-get install liblua5.x-dev lua5.x
Sie müssen außerdem sicherstellen, dass Sie über GCC 4.9 (oder höher) verfügen. Wenn nicht, können Sie Folgendes versuchen (getestet unter 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
(Getestet in 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
Die Installation wurde mit Vundle getestet, sollte aber auch mit dem Krankheitserreger kompatibel sein. Zur Installation mit vundle (fügen Sie die Zeile zu Ihrem ~/.vimrc
hinzu, starten Sie vim neu und führen Sie :PluginInstall
aus):
Plugin ' jeaye/color_coded '
Die Installation mit NeoBundle unterstützt das automatische Erstellen und verzögerte Laden des Plugins:
NeoBundleLazy ' jeaye/color_coded ' , {
' build ' : {
' unix ' : ' rm -f CMakeCache.txt && cmake . && make && make install ' ,
},
' autoload ' : { ' filetypes ' : [ ' c ' , ' cpp ' , ' objc ' , ' objcpp ' ] },
' build_commands ' : [ ' cmake ' , ' make ' ]
}
Da color_coded über eine kompilierte Komponente verfügt, müssen Sie diese bei der Installation und Aktualisierung manuell kompilieren (es sei denn, Ihr VIM-Paketmanager übernimmt dies für Sie). Die Kompilierung funktioniert wie folgt, vorausgesetzt, dass Vundle verwendet wird (sehen Sie sich den Abschnitt „Abhängigkeiten“ an, um sicherzustellen, dass Sie die Kompilierung ordnungsgemäß make
können):
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
Aus verschiedenen Kompatibilitätsgründen wird color_coded versuchen, eine bekannte Version von clang herunterzuladen. Dies kann Ihren Konfigurationsprozess zwar zeitaufwändiger machen, bietet aber mehr Stabilität auf mehreren Plattformen. Dies zu vermeiden wird nicht offiziell unterstützt, ist aber hier dokumentiert.
EIN WEITERER HINWEIS: color_coded unterstützt Luajit nicht zuverlässig. Noch informativer ist, dass Luajit die Einbettung in gemeinsam genutzte Bibliotheken nicht zuverlässig unterstützt.
Sobald color_coded installiert und kompiliert ist, funktioniert es automatisch, wenn Sie vim das nächste Mal starten. Damit color_coded weiß, wie Ihr Code kompiliert werden muss, müssen Sie möglicherweise eine Datei erstellen, die die erforderlichen Compileroptionen beschreibt. Beachten Sie, dass color_coded vernünftige Standardeinstellungen voraussetzt und versucht, eine sofortige Verwendung zu ermöglichen.
Allerdings müssen Sie in jedem nicht trivialen Fall eine .color_coded
Datei für Ihr Projekt bereitstellen. Für jede Datei durchsucht color_coded das Dateiverzeichnis bis zum Stammverzeichnis des Dateisystems und sucht nach einer .color_coded
Datei oder einer .color_coded_foo
-Datei (wobei foo
der Dateityp ist; d. h. c
, cpp
usw.). Dies ermöglicht es Ihnen, beispielsweise eines in Ihrem Home-Verzeichnis und dann in jedem Ihrer Projektverzeichnisse zu haben. Wenn Sie in einem Projektverzeichnis keins angeben, wird das in Ihrem Home-Verzeichnis verwendet. Außerdem ist es möglich, unterschiedliche Flags für unterschiedliche Dateitypen (C, C++ usw.) bereitzustellen und auch in Unterprojekten mit unterschiedlichen Flags zu arbeiten. Auch hier gilt: Wenn keine solchen Dateien gefunden werden, werden vernünftige Standardeinstellungen angewendet.
color_coded wird sein Möglichstes tun, um Ihren Code für Sie hervorzuheben, auch wenn es Fehler in der Übersetzungseinheit gibt. Dies ermöglicht eine bessere Hervorhebung während der Eingabe und die Hervorhebung von gültigem Code, wenn color_coded nicht alles über Ihr Projekt weiß.
Der Inhalt einer .color_coded
oder .color_coded_foo
Datei ist einfach eine zeilengetrennte Liste von Compiler-Optionen. Die .color_coded
Datei für color_coded lautet beispielsweise (color_coded fügt den Rest standardmäßig ein, wenn C- oder C++-Dateien erkannt werden):
-Iinclude
-Ilib/jest/include
Die .color_coded
Datei kann mit dem YCM-Generator automatisch generiert werden.
HINWEIS: Der Einfachheit halber sind in der .color_coded
Datei keine anderen Daten zulässig. Das heißt, Kommentare werden nicht unterstützt.
g:color_coded_enabled
Diese Option steuert, ob color_coded funktioniert oder nicht. Durch Aufrufen des Befehls :CCtoggle
wird diese Option geändert, um die entsprechenden Ergebnisse zu erzielen. Sie können es auch als 0
in Ihrer ~/.vimrc
angeben, um color_coded global zu deaktivieren.
Standard:
let g: color_coded_enabled = 1
g:color_coded_filetypes
Diese Option steuert die Dateitypen, die color_coded zu kompilieren versucht.
Standard:
let g: color_coded_filetypes = [ ' c ' , ' cpp ' , ' objc ' ]
Es gibt viele neue Hervorhebungsgruppen, die color_coded hinzufügt. Sie sind so konzipiert, dass sie den Interna von libclang so genau wie möglich folgen. Um die Dinge zusammenzufassen, wurden einige Wrapper-Gruppen erstellt, die weitreichendere Änderungen ermöglichen. Die Clang-Gruppen sind standardmäßig so zugeordnet, dass sie diese zusammen mit den normalen Gruppen von vim ( Function
, Macro
, Number
usw.) verwenden.
" 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 wird mit einem Beispielfarbschema geliefert, das die Unterstützung für die erweiterten Gruppen demonstriert. Um es zu verwenden, rufen Sie :colorscheme twilighted
auf. Wie der Name vermuten lässt, stammt das Farbschema aus vims eigenem Twilight-Theme und wurde passend in das eingefügt, was Sie im Repo sehen werden. Um die Implementierung zu untersuchen, besuchen Sie colors/twilighted.vim
. Beachten Sie, dass color_coded mit jedem Farbschema funktionieren kann; Dies ist nur ein Beispiel.
Weitere Informationen zu allen unterstützten Gruppen finden Sie after/syntax/color_coded.vim
und in der Clang-Dokumentation.
:CCerror
Dieser Befehl gibt die letzte Kompilierungsfehlermeldung von libclang aus. Wenn Ihre Hervorhebung nicht richtig funktioniert, liegt möglicherweise eine falsch konfigurierte .color_coded
Datei vor oder es liegen Syntaxfehler in Ihrer Quelle vor. Im Zweifelsfall schauen Sie zuerst hier nach.
:CCtoggle
Dieser Befehl aktiviert color_coded, wenn es derzeit deaktiviert ist, oder deaktiviert es, wenn es derzeit aktiviert ist. Dieses Aktivieren/Deaktivieren erfolgt über die Option g:color_coded_enabled
.
Die Kompilierung von color_coded erfordert:
Die Verwendung von color_coded erfordert vim:
color_coded versucht, Ihren Code zu kompilieren, während Sie ihn eingeben. Aufgrund der Funktionsweise von vim kann color_coded die Hervorhebung nur aktualisieren, wenn Sie etwas tun (den Cursor bewegen, eine Änderung vornehmen usw.). Wenn Sie mit der Eingabe fertig sind und die Aktualisierung der Hervorhebung noch nicht abgeschlossen ist, können Sie, sofern Ihre .color_coded
Datei ausreichend ist, durch Bewegen des Cursors (oder das Auslösen von Ereignissen auf andere Weise) den Abschluss von color_coded ermöglichen.
Beachten Sie, dass es in vim ein Hold-Ereignis gibt, das ausgelöst wird, nachdem Sie mit der Eingabe aufhören und nach einer gewissen Verzögerung. color_coded bindet sich auch hier ein und verwendet es, wenn möglich, zum Hervorheben.
Jawohl. Ob Sie es glauben oder nicht, es handelt sich mit ziemlicher Sicherheit um Libclang-Fehler. Ich habe ein paar davon aussortiert und pflege meinen eigenen libclang-Fork. Wenn Sie ein solches Problem melden möchten, schauen Sie sich dieses Ticket an.
Das ist Absicht. Wenn Sie einen Puffer zum ersten Mal öffnen, weiß color_coded nicht, ob er ordnungsgemäß kompiliert werden wird, und möchte nicht, dass Sie warten, während er versucht, dies herauszufinden. color_coded wird immer im Hintergrund kompiliert und bei Ereignissen wie dem Bewegen des Cursors oder dem Ändern von Text werden Aktualisierungen abgefragt. Beachten Sie jedoch, dass, sobald ein Puffer eine Hervorhebung aufweist, beim Verlassen dieses Puffers und beim Zurückkehren zu ihm synchron die vorherige Hervorhebung angewendet wird.
Wenn Sie color_coded installieren, müssen Sie es manuell kompilieren, bevor Sie es erfolgreich verwenden können. Anweisungen finden Sie unter Installation.
Angenommen, Sie haben eine funktionierende Installation von color_coded aktualisiert, erhalten Sie diese Fehlermeldung, wenn das Update eine Neukompilierung von color_coded erfordert (d. h. es wurden Änderungen an der nativen API vorgenommen). Befolgen Sie zum erneuten Kompilieren genau dieselben Schritte, die Sie beim ursprünglichen Kompilieren ausgeführt haben.
Zumindest im Moment unterstützt color_coded neovim nicht. Es gibt jedoch chromatica.vim, das speziell für Neovim eine ähnliche Hervorhebung bieten soll.
Dies geschieht auf bestimmten Betriebssystemen, die zusätzliche Include-Pfade erfordern; Die Lösung besteht darin, einfach sicherzustellen, dass sich diese Pfade in Ihrer .color_coded
Datei mit dem Präfix -isystem
befinden. Um diese Pfade herauszufinden, führen Sie Folgendes aus:
echo | clang -v -E -x c++ -
Weitere Informationen finden Sie in diesem Problemkommentar. color_coded versucht zu helfen, indem es einige davon annimmt, wie hier in post_constants()
gezeigt.
Sie verwenden wahrscheinlich Luajit, das sich nicht gut in gemeinsam genutzte Bibliotheken einbetten lässt. Wenn Sie sich nicht sicher sind, schauen Sie, ob dies etwas ergibt:
vim --version | grep jit
Weitere Informationen finden Sie hier.
Sie können dies in Ihrer .vimrc
verwenden:
" Disable color_coded in diff mode
if & diff
let g: color_coded_enabled = 0
endif
Sie können DOWNLOAD_CLANG=0
für cmake
angeben. Abhängig von Ihrer Plattform müssen Sie möglicherweise auch den Pfad zu Ihrer llvm-config-Binärdatei mit LLVM_CONFIG=
angeben. Dadurch können Sie auch verschiedene Versionen von Clang/LLVM verwenden.
Beispiel:
cmake . -DDOWNLOAD_CLANG=0
Dies kann auf Debian-basierten Systemen auftreten. Die Lösung bestand darin liblua-5.x-0-dbg
zu installieren.
Dies wird durch einen Fehler in vim verursacht; Sie können das Problem umgehen, indem Sie ein VIM mit mindestens Patch 1691 verwenden. Weitere Informationen finden Sie in diesem Problem.
Fühlen Sie sich frei, ein Problem auf Github zu stellen, mir eine E-Mail zu senden oder mich im IRC zu erreichen: Freenode @ #color_coded
color_coded steht unter der MIT-Open-Source-Lizenz.
Siehe die LICENSE
Datei oder http://opensource.org/licenses/MIT