Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
Vim: (Alt: clang_complete) Neu: YouCompleteMe
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German)
View previous topic :: View next topic  
Author Message
musv
Advocate
Advocate


Joined: 01 Dec 2002
Posts: 3254
Location: de

PostPosted: Tue May 20, 2014 2:23 pm    Post subject: Vim: (Alt: clang_complete) Neu: YouCompleteMe Reply with quote

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:
  1. clang_complete.vmb runtergeladen.
  2. 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
View user's profile Send private message
musv
Advocate
Advocate


Joined: 01 Dec 2002
Posts: 3254
Location: de

PostPosted: Tue May 20, 2014 3:48 pm    Post subject: Reply with quote

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
View user's profile Send private message
musv
Advocate
Advocate


Joined: 01 Dec 2002
Posts: 3254
Location: de

PostPosted: Thu May 22, 2014 5:53 am    Post subject: Reply with quote

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:
Code:
-I./include


Aufgerufen wird das Ganze mit:
Code:
vim src/test.cpp

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
View user's profile Send private message
musv
Advocate
Advocate


Joined: 01 Dec 2002
Posts: 3254
Location: de

PostPosted: Thu May 22, 2014 6:54 pm    Post subject: Reply with quote

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
View user's profile Send private message
franzf
Advocate
Advocate


Joined: 29 Mar 2005
Posts: 4408

PostPosted: Sun May 25, 2014 11:56 am    Post subject: Reply with quote

Du kannst mal YouCompleteMe probieren. Sollte auch schneller sein als clang_complete, da der kritische Teil in C++ geschrieben ist.
Back to top
View user's profile Send private message
musv
Advocate
Advocate


Joined: 01 Dec 2002
Posts: 3254
Location: de

PostPosted: Mon May 26, 2014 7:21 pm    Post subject: Reply with quote

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
View user's profile Send private message
franzf
Advocate
Advocate


Joined: 29 Mar 2005
Posts: 4408

PostPosted: Mon May 26, 2014 8:04 pm    Post subject: Reply with quote

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
View user's profile Send private message
musv
Advocate
Advocate


Joined: 01 Dec 2002
Posts: 3254
Location: de

PostPosted: Tue May 27, 2014 4:32 am    Post subject: Reply with quote

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
View user's profile Send private message
firefly
Advocate
Advocate


Joined: 31 Oct 2002
Posts: 4459

PostPosted: Tue May 27, 2014 6:39 am    Post subject: Reply with quote

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
View user's profile Send private message
franzf
Advocate
Advocate


Joined: 29 Mar 2005
Posts: 4408

PostPosted: Tue May 27, 2014 7:00 am    Post subject: Reply with quote

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
View user's profile Send private message
musv
Advocate
Advocate


Joined: 01 Dec 2002
Posts: 3254
Location: de

PostPosted: Tue May 27, 2014 9:10 am    Post subject: Reply with quote

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
View user's profile Send private message
franzf
Advocate
Advocate


Joined: 29 Mar 2005
Posts: 4408

PostPosted: Wed May 28, 2014 8:06 am    Post subject: Reply with quote

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
View user's profile Send private message
musv
Advocate
Advocate


Joined: 01 Dec 2002
Posts: 3254
Location: de

PostPosted: Thu May 29, 2014 5:05 am    Post subject: Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum