View previous topic :: View next topic |
Author |
Message |
musv Advocate
![Advocate Advocate](/images/ranks/rank-G-1-advocate.gif)
![](images/avatars/17022956523ec2f01a46f03.jpg)
Joined: 01 Dec 2002 Posts: 3369 Location: de
|
Posted: Tue May 20, 2014 2:23 pm Post subject: Vim: (Alt: clang_complete) Neu: YouCompleteMe |
|
|
Hallo,
schon seit langer Zeit scheiter ich daran, den C/C++-Support über Clang und LLVM im Vim zum Laufen zu kriegen.
Gemacht hab ich folgendes:
- clang_complete.vmb runtergeladen.
- vim clang_complete.vmb -> :so %
Meine Konfigdatei (clang-Teil):
/etc/vim/vimrc.local: | let g:clang_use_library =1
let g:clang_library_path='/usr/lib64/'
let g:clang_complete_copen = 1 |
clang, llvm, Python-2.7 sind installiert.
Versuch ich jetzt: vim test.cpp, bekomm ich folgende Meldung:
Code: | "test.cpp" 6L, 43C 6,1 Alles
Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib64/python2.7/threading.py", line 810, in __bootstrap_inner
self.run()
File "/root/.vim/plugin/libclang.py", line 434, in run
self.timer)
File "/usr/share/vim/vimfiles/plugin/libclang.py", line 35, in getCurrentTranslationUnit
flags = TranslationUnit.PrecompiledPreamble | TranslationUnit.CXXPrecompiledPreamble # | TranslationUnit.CacheCompletionResults
AttributeError: type object 'TranslationUnit' has no attribute 'PrecompiledPreamble'
Betätigen Sie die EINGABETASTE oder geben Sie einen Befehl ein |
Tipp ich im Vim dann:
Code: | #include <iostream>
int main()
{
std:: |
krieg ich:
Code: | -- Benutzerdefinierte Ergänzung (^U^N^P) Muster nicht gefunden |
Mit STRG+P stehen mir dann nur die bereits im Code vorkommenden Literale zur Verfügung, d.h. std, include, iostream, int, main.
Wie kriegt man Clang + LLVM im Vim zum Laufen? Das ist eins der wichtigsten Features für mich. Und nirgendwo sonst bin ich so lange Zeit bisher daran gescheitert.
Last edited by musv on Mon May 26, 2014 7:18 pm; edited 3 times in total |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
musv Advocate
![Advocate Advocate](/images/ranks/rank-G-1-advocate.gif)
![](images/avatars/17022956523ec2f01a46f03.jpg)
Joined: 01 Dec 2002 Posts: 3369 Location: de
|
Posted: Tue May 20, 2014 3:48 pm Post subject: |
|
|
Ok, hab's hinbekommen. Ich hatte noch 'ne alte clang-Installation in /usr/share/vim/vimfiles. Da kamen sich die beiden Plugins wohl ins Gehege. Außerdem dürfte noch Reste vom Omnicomplete vorhanden gewesen sein. |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
musv Advocate
![Advocate Advocate](/images/ranks/rank-G-1-advocate.gif)
![](images/avatars/17022956523ec2f01a46f03.jpg)
Joined: 01 Dec 2002 Posts: 3369 Location: de
|
Posted: Thu May 22, 2014 5:53 am Post subject: |
|
|
Ein paar Probleme gibt's dann doch noch:
Wie jetzt clang_complete die Headerdateien des eigenen Projektes findet, hab ich rausgefunden. Bsp:
Verzeichnisstruktur: | mein_projekt/src/test.cpp
mein_projekt/include/test.h
mein_projekt/.clang_complete
|
Die .clang_complete enthält dann:
Aufgerufen wird das Ganze mit:
D.h. vim befindet sich im Basisverzeichnis. Dann klappt die Vervollständigung.
Was jetzt aber irgendwie nicht geht, sind die Standardbefehle und Datentypen von Libs, die man nicht einbinden muss.
Beispiel:
Code: | touch test.cpp
vim test.cpp
#i[strg+P] <- hier krieg ich "Stichwort-Ergängung (^N^P) Muster nicht gefunden". Da hätte ich gern "#include".
i[strg+P] <- hier sollte eigentlich ein "int" kommen. Stattdessen: "Stichwort-Ergängung (^N^P) Muster nicht gefunden".
|
Wie krieg ich das hin? |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
musv Advocate
![Advocate Advocate](/images/ranks/rank-G-1-advocate.gif)
![](images/avatars/17022956523ec2f01a46f03.jpg)
Joined: 01 Dec 2002 Posts: 3369 Location: de
|
Posted: Thu May 22, 2014 6:54 pm Post subject: |
|
|
Hab wieder schmerzhaft rausgefunden, dass man bei weiteren Vim-Scripten ziemlich vorsichtig sein muss, sonst zerschießt es sofort das clang_complete-Script. Im jetzigen Fall war es taglist, was sich mit clang_complete beißt. |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
franzf Advocate
![Advocate Advocate](/images/ranks/rank-G-1-advocate.gif)
![](images/avatars/13378569704a2d5c2dc51c1.jpg)
Joined: 29 Mar 2005 Posts: 4565
|
Posted: Sun May 25, 2014 11:56 am Post subject: |
|
|
Du kannst mal YouCompleteMe probieren. Sollte auch schneller sein als clang_complete, da der kritische Teil in C++ geschrieben ist. |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
musv Advocate
![Advocate Advocate](/images/ranks/rank-G-1-advocate.gif)
![](images/avatars/17022956523ec2f01a46f03.jpg)
Joined: 01 Dec 2002 Posts: 3369 Location: de
|
Posted: Mon May 26, 2014 7:21 pm Post subject: |
|
|
Hab's probiert. Erst mal bin ich dadurch auf Vundle gestoßen, was ich durchaus genial find.
Dann hab ich versucht YCM zu installieren. Hat auch problemlos geklappt. Nur klappt die Autovervollständigung wieder nicht:
:YcmRestartServer: | HTTPConnectionPool(host='127.0.0.1', port=42829): Max retries exceeded with url: /event_notification (Caused by <class 'socket.error'>:
[Errno 111] Verbindungsaufbau abgelehnt) |
:YcmDebugInfo: | Printing YouCompleteMe debug information...
-- Server crashed, no debug info from server
-- Server running at: http://127.0.0.1:53282
HTTPConnectionPool(host='127.0.0.1', port=53282): Max retries exceeded with url: /event_notification (Caused by <class 'socket.error'>: [Errno 111] V
erbindungsaufbau abgelehnt) |
Tja, 'ne andere Fehlermeldung gibt's nicht. Ins Debugverzeichnis, wo eigentlich das Logfile stehen sollte, schreibt das Vim gar nichts rein. |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
franzf Advocate
![Advocate Advocate](/images/ranks/rank-G-1-advocate.gif)
![](images/avatars/13378569704a2d5c2dc51c1.jpg)
Joined: 29 Mar 2005 Posts: 4565
|
Posted: Mon May 26, 2014 8:04 pm Post subject: |
|
|
Ich hatte anfangs auch leichte Schwierigkeiten, aber mit clang-3.4 waren alle Probleme vorbei (clang_complete wollte noch immer nicht )
Wie sieht dein setup aus:
Welches clang/llvm verwendest du? (Version und system oder "official build", der ja seitens YCM empfohle wird)
Wie hast du den ycmd kompiliert? (das script verwendet oder mit manuellem cmake-Aufruf?)
Ich hab es einfach mit "cmake -DUSE_SYSTEM_LIBCLANG=ON pfad_siehe_ycmdocs" konfiguriert + "make". Ich habs mit clang/llvm-3.4.1 am Laufen. |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
musv Advocate
![Advocate Advocate](/images/ranks/rank-G-1-advocate.gif)
![](images/avatars/17022956523ec2f01a46f03.jpg)
Joined: 01 Dec 2002 Posts: 3369 Location: de
|
Posted: Tue May 27, 2014 4:32 am Post subject: |
|
|
Die Module hab ich installiert mit:
Code: | ./install.sh --clang-completer --system-libclang |
Das Problem war Python. Hat mich schon ein paar Stunden gekostet, das rauszufinden. Klar, es steht überall, dass man Python2 braucht, aber in der vimrc ist dann in den Default-Configs immer nur /usr/bin/python drin, was ja bekanntermaßen auf Python3 zeigt.
Und dass man halt noch eine Option benötigt, damit die temporären Logfiles nicht gelöscht werden, ist auch nicht gerade optimal.
Code: | let g:ycm_path_to_python_interpreter = '/usr/bin/python2'
" let g:ycm_server_keep_logfiles = 1
" let g:ycm_server_log_level = 'debug' |
Damit hat's dann geklappt. |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
firefly Watchman
![Watchman Watchman](/images/ranks/rank-G-2-watchman.gif)
Joined: 31 Oct 2002 Posts: 5329
|
Posted: Tue May 27, 2014 6:39 am Post subject: |
|
|
musv wrote: | Klar, es steht überall, dass man Python2 braucht, aber in der vimrc ist dann in den Default-Configs immer nur /usr/bin/python drin, was ja bekanntermaßen auf Python3 zeigt. |
Der Linkt zeigt aber nur auf Python3, wenn man im system python3 als default python version gesetzt hat also nicht wirklich bekanntermaßen _________________ Ein Ring, sie zu knechten, sie alle zu finden,
Ins Dunkel zu treiben und ewig zu binden
Im Lande Mordor, wo die Schatten drohn. |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
franzf Advocate
![Advocate Advocate](/images/ranks/rank-G-1-advocate.gif)
![](images/avatars/13378569704a2d5c2dc51c1.jpg)
Joined: 29 Mar 2005 Posts: 4565
|
Posted: Tue May 27, 2014 7:00 am Post subject: |
|
|
Schön dass es jetzt klappt!
Ich muss aber sagen, dass trotz global gesetztem python3 als default bei mir ycmd problemlos läuft! Den python path habe ich in meiner vimrc gar nicht gesetzt, evtl. nimmt YCM ohne persönlicher Intervention ja den richtigen...
Ansonsten würde mich interessieren, ob sich YCM bei dir unproblematischer verhält als clang_complete (was ja mit ein Hintergedanke meinerseits bei der Empfehlung war). |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
musv Advocate
![Advocate Advocate](/images/ranks/rank-G-1-advocate.gif)
![](images/avatars/17022956523ec2f01a46f03.jpg)
Joined: 01 Dec 2002 Posts: 3369 Location: de
|
Posted: Tue May 27, 2014 9:10 am Post subject: |
|
|
Ja, läuft richtig gut. Hab heut den ganzen Tag mal damit zugebracht, Vim noch richtig zu konfigurieren (Airline, Nerdtree, Matchit, Syntastic)
Eine Sache stört mich noch bei YouCompleteMe:
Wenn das Popup mit der Funktionsauswahl kommt, dann kann ich mit TAB/Shift+TAB (inzwischen deaktiviert) und Cursor hoch/runter durch die Liste scrollen. Drück ich dann:
- Return: springt er sofort auf die nächste Zeile
- Space: macht er auch ein Leerzeichen, aber ohne die evtl. nötige Klammer zu setzen, z.b. string.empty -> eigentlich string.empty(), YCM macht string.empty *hiergehtsweiter*
- Strg+P: scrollt in der Liste nach oben
- Strg+Space: bleibt in der Liste hängen
Bei Clang_Complete konnte ich das mit Strg+P auswählen. Und da wurden dann auch gleich noch die Parameter der Funktion mit übernommen.
Geht das hier irgendwie auch? |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
franzf Advocate
![Advocate Advocate](/images/ranks/rank-G-1-advocate.gif)
![](images/avatars/13378569704a2d5c2dc51c1.jpg)
Joined: 29 Mar 2005 Posts: 4565
|
Posted: Wed May 28, 2014 8:06 am Post subject: |
|
|
Am einfachsten wird es wohl sein delimitMate zu installieren und nach Auswahl der passenden Vervollständigung "(" zu drücken. (Da muss ich sagen, dass kdevelop die mMn. beste Vervollständigung anbietet... Sollte aber mit nem Feature Request bei YCM evtl. möglich sein )
Zwei kleine allgemeine Tips:
- Wenn du ne deutsche Tastaturbelegung hast ist <leader> mit "\" ziemlich unhandlich. Z.B. auf "," bietet sich an:
let mapleader = ","
- Für besseres C++ Syntax Highlihting:
https://github.com/octol/vim-cpp-enhanced-highlight |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
musv Advocate
![Advocate Advocate](/images/ranks/rank-G-1-advocate.gif)
![](images/avatars/17022956523ec2f01a46f03.jpg)
Joined: 01 Dec 2002 Posts: 3369 Location: de
|
Posted: Thu May 29, 2014 5:05 am Post subject: |
|
|
franzf wrote: | Am einfachsten wird es wohl sein delimitMate zu installieren und nach Auswahl der passenden Vervollständigung "(" zu drücken. |
Danke, werd ich mir ansehen
franzf wrote: | - Wenn du ne deutsche Tastaturbelegung hast ist <leader> mit "\" ziemlich unhandlich. Z.B. auf "," bietet sich an:
let mapleader = "," |
Hab ich schon gelesen. Allerdings ist das Komma ja auch mit 'ner Navigationsfunktion belegt. Ist also nicht so praktisch. Stattdessen sind bei uns die Umlaute noch frei:
vimrc.local: |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Tastatur-Remapping
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Achtung: Keine Kommentare hinter dem Remapping!
"Cursor auch bei Zeilenumbruch: j -> gj / k -> kg
noremap j gj
nnoremap k gk
"Backslashtaste auf ü legen
" Sonderkonfiguration Windows
" ü=CHAR-252 - Escapezeichen \ damit der CHAR akzeptiert wird
"let mapleader="\<CHAR-252>"
let mapleader="ü"
" [] im Normalmodus auf öä legen
" Sonderkonfiguration Windows
" ä=CHAR-228, ö=CHAR-246
"noremap <CHAR-228> ]
noremap ö [
"noremap <CHAR-246> [
noremap ä ]
" {} im Normalmodus auf ÖÄ legen
" Sonderkonfiguration Windows
" Ä=CHAR-196, Ö=CHAR-214
"noremap <CHAR-214> {
noremap Ö {
" noremap <CHAR-196> }
noremap Ä } |
Da ich auf Arbeit Cygwin verwende, ist bei der Windows-Config latin1 als Kodierung eingestellt. Da muss ich statt der Umlaute dann die CHAR-Zeichen verwenden. Vermutlich könnte ich da sogar die Kommentare rausnehmen, da das eh nicht kollidieren wird. Muss ich mal probieren.
Mit dem CPP-Highlighting bin ich eigentlich in der Defaulteinstellung zufrieden. |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
|