Portál AbcLinuxu, 7. května 2025 22:26

Dotaz: Vim - auto. dopln. kodu

29.12.2011 22:28 Jirka
Vim - auto. dopln. kodu
Přečteno: 805×
Odpovědět | Admin
Presel jsem z Netbeansu na GVim, programuji v Jave, C/C++ a chybi mi ve vimu poradne automaticke doplnovani kodu. Na netu jsem si vybral dva adepty: Omni-completion a Eclim.

U Omni se mi nelibi, ze pro kazdy jazyk musim neco doinstalovavat a zaroven musim pouzivat ctags (tady bych se chtel zeptat, jak se to dela s automatickou aktualizaci souboru generovanym ctags, rucne, vlastnim skriptem nebo nejak jinak?).

U Eclim zase moc nechapu princip jeho funkce. Vím ze se spusti jakysi server eclise, ale moc nechapu jeho funkci, co presne prohledava a jakym zpusobem, ci je nutno dodoefinovavat soubory k prohledani atd...?

Jaky byste mi doporucili z vlastni zkusenosti? Diky.
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

30.12.2011 15:43 dementko
Rozbalit Rozbalit vše Re: Vim - auto. dopln. kodu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Prečo ten prechod od kalkulačky späť k počítadlu?
30.12.2011 21:38 Jirka
Rozbalit Rozbalit vše Re: Vim - auto. dopln. kodu
Protoze i pocitadlo muze byt rychlejsi nez kalkulacka kdyz se to s ni umi, dale chci rict ze mi komentar prijde bezpredmetny:(
Gilhad avatar 30.12.2011 23:42 Gilhad | skóre: 20 | blog: gilhadoviny
Rozbalit Rozbalit vše Re: Vim - auto. dopln. kodu
Vsak ho taky napsal nejaky dement(ko) :)

Jinak vim pouzivam zcela bez napoved, ale pokud by slo o nejake generovani neceho ze zdrojoveho kodu, tak bych asi pouzil make (nebo neco podobneho), kde bych jako cil dal ty generovane soubory a jako zdrojak ty zdrojove - neco jako:

%.tag:%.java
     generate_tags.sh --input=$< --output=$@
31.12.2011 16:41 l4m4
Rozbalit Rozbalit vše Re: Vim - auto. dopln. kodu
Doplňování používám, ale v podstatě pouze slova/řádky z téhož resp. dalších otevřených souborů (^P, ^X^L a pod.), protože to se využije ve všech možných jazycích, včetně lidských.

Ultrachytré doplňování, dovozující z identifikátoru třídu, z ní potom, co lze doplnit, a podobně, tak to má nějaký smysl akorát v jazycích, které jsou současně (a) počítačové (b) rozvleklé (c) staticky typované (d) založené na substantivech (tj. sinus se nepíše sin(x), ale x.sin()). Při nesplnění kterékoli podmínky je nemožné nebo na houby. Přijde mi, že je zbytečné se o ně snažit v čemkoli jiném, než specializovaném vývojovém prostředí pro jeden z těch 4 jazyků, které splňují všechny uvedené pomínky.
pavlix avatar 1.1.2012 23:02 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Vim - auto. dopln. kodu
Přijde mi, že je zbytečné se o ně snažit v čemkoli jiném, než specializovaném vývojovém prostředí pro jeden z těch 4 jazyků, které splňují všechny uvedené pomínky.
Se vším souhlasím, až na toto nesmyslné tvrzení. Klíčové slovo je plugin. Obecný nástroj se specializovanými doplňky. A nezáleží na tom, jeslti je to v pravém smyslu doinstaovávaný doplněk nebo třeba specifický kód pro tu skupinu čtyř statických objektových jazyků. I když si umím stejně dobře představit doplňování, kdy z některé z tvých podmínek jen částečně slevíš.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
31.12.2011 10:41 bodo
Rozbalit Rozbalit vše Re: Vim - auto. dopln. kodu
Odpovědět | | Sbalit | Link | Blokovat | Admin
To nemam to z vlastnej hlavy, ale dalo by sa to zariatit automatickym pregenerovanim suboru s tagmi pri otvoreni a ulozeni suboru. Nieco na tento sposob:
function! GenerateTagsFile()
  if (!filereadable("tags"))
    exec ":!start /min ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --sort=foldcase ."
  endif
endfunction

" Always change to directory of the buffer currently in focus.
autocmd! bufenter *.* :cd %:p:h
autocmd! bufread  *.* :cd %:p:h

" Generate tags on opening an existing file.
autocmd! bufreadpost *.cpp :call GenerateTagsFile()
autocmd! bufreadpost *.c   :call GenerateTagsFile()
autocmd! bufreadpost *.h   :call GenerateTagsFile()

" Generate tags on save. Note that this regenerates tags for all files in current folder.
autocmd! bufwritepost *.cpp :call GenerateTagsFile()
autocmd! bufwritepost *.c   :call GenerateTagsFile()
autocmd! bufwritepost *.h   :call GenerateTagsFile() 
stativ avatar 31.12.2011 17:03 stativ | skóre: 54 | blog: SlaNé roury
Rozbalit Rozbalit vše Re: Vim - auto. dopln. kodu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pro C/C++ je výborný plugin clang_complete. Troufl bych si říct, že bude mnohem lepší než oba zmiňované pluginy, protože používá parser reálného kompilátoru. Sice jsem nikdy Omnicomplete ani Eclip nepoužíval, ale používal jsem Eclipse CDT i exuberant ctags a jejich kvalita co se týče domplňování C++ nebyla nijak skvělá.
Ať sežeru elfa i s chlupama!!! ljirkovsky.wordpress.com stativ.tk
mirec avatar 3.1.2012 18:59 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: Vim - auto. dopln. kodu
Súhlas, clang_complete je vynikajúci, ale vim musí byť skompilovaný a nastavené
g:clang_use_library=1
inak je doplňovanie pomerne pomalé.
LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
1.1.2012 17:39 Greene
Rozbalit Rozbalit vše Re: Vim - auto. dopln. kodu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Co to zkusit naopak - použít v Netbeans nějaký plugin umožňující vimovské ovládání?
3.1.2012 22:17 Tom
Rozbalit Rozbalit vše Re: Vim - auto. dopln. kodu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ctags jsem používal poměrně dlouho, nikdy jsem nepřišel na vhodné automatické generování, namapoval jsem si to na klávesu a prováděl při nějaké významnější změně. Oproti eclimu je to o něco rychlejší, ale vyžaduje to aktualizaci. Někde se dá najít návod, jak vygenerovat taky pro STL.

Z eclimu jsem měl pocit, že je o něco pomalejší, což je spolu s náročností jeho nastavení největší nevýhoda. Funguje to tak, že se na pozadí spustí eclipse (buď celé prostředí nebo jen daemon), které on-the-fly parsuje editovaný soubor a při vyžádání doplnění navrhne to, co by na to místě navrhl eclipse. Není potřeba generovat nějaké indexy - jen je potřeba spouštět daemona.

Třetí možností je zkusit opačný postup - simulovat vim v IDE. V netbeans je jVi, v eclipse tuším vimplugin, oba jsou dobré, pokud stačí základní příkazy. Poměrně krátkou, ale zato nejlepší zkušenost jsem měl s intelijidea, název pluginu už si nevybavuju. A kdosi tvrdil, že pro Visual Studio je dobrý, komerční plugin.

Doplňování ve vimu je důvod, proč stále zvažuju přechod na nějaké IDE. Momentálně používám vim s doplňováním slov, pro rozsáhlejší C/C++ projekty ctags, pro Javu eclim.
9.1.2012 00:27 Jirka
Rozbalit Rozbalit vše Re: Vim - auto. dopln. kodu
Ke generaci ctags: Napadlo me si udelat jednoduchy skript, ktery by generoval ctags soubor a pak by byl uspan po jednu sekundu a pak zase od zacatku. V tomhle pristupu by snad nemelo byt nejake uskali...
Josef Kufner avatar 5.1.2012 19:37 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Vim - auto. dopln. kodu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Na Rootu byl seriál o propojení Vimu a Eclipse. Asi to pro tebe bude nejlepší, protože programování v Javě v podstatě znamená hraní si s poloautomatickým generátorem kódu a to není zrovna silná stránka Vimu.
Hello world ! Segmentation fault (core dumped)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.