Portál AbcLinuxu, 20. dubna 2024 01:15

Code completion ve VIMu II.

24.5.2005 19:43 | Přečteno: 1987× | takruzne

Po tom, co jsem zkousel pracovat s programem IComplete, jsem dosel k zaveru, ze je to asi nejvydarenejsi doplnovani, co se tyka C, C++. Ja jsem osobne zkousel jen C++ zdrojaky, takze s C a Javou se muzou objevit jine zaludnosti, nebo taky ne. Tenhle zapis navazuje volne na tento blog Martina Fialy.

Aktualni verzi icomplete bych pochvalil pro jeji rychlost a prehlednost nastaveni i vubec vzhledu. V podstate se da rici, ze je to prijemny doplnek Vimu, a az na male drobnosti je to pouzitelna verze.

V souboru /etc/icomplete.conf nebo pripadne v ~/.icompleterc muzete urcit prohledavane cesty. Cesty se neprohledavaji rekurzivne. Takze kdyz nastavite jednu cestu na /usr/include/, pak jeste musite dodat napriklad pro STL /usr/include/c++/3.4/. Lze take urcit cestu k headrum napr. takto: #include <boost/regex.hpp> s tim, ze nedefinujete /usr/include/boost v konfigurakach, ale vystacite si s /usr/include/.

Jak psal Martin, pro aktualizaci cache je urcena serie klaves Ctrl-X, Ctrl-X, Ctrl-U a pro vyvolani napovedy za operatory ::, . a -> Ctrl-X,Ctrl-U. Pokud je trida/struktura/template deklaravana primo v souboru, kde je zaroven i pouzita, pak je nutne pouzit zmineny update cache, a nebo, pokud to nezabere, i zmenit/premazat/umazat nejaky #include <...>, aby se tak donutil icomplete aktualizovat cache. V jinych pripadech mi to spolehlive za temito operatory doplnovalo.

Operatory . a -> v kombinaci s *, tj. ->* a .* v pripade ukazatelu na clensky funkce se nedoplnuji. Pristupovat pomoci :: ke globalnimu cokoliv nelze. Jedine bez ::.

V pripade sablon to take neni 100%. Nastavaji v podstate dva problemy: Pokud napr. mame sablonu trid pro manipulaci objektu v poli, tj. mame definovany operator [], ktery vraci const T& nebo T&, pak IComplete nedoplnuje metody, cleny tridy(class, typename) T. To same plati i pro operator ().

...
....

Array strArray;
strArray[0].capacity(); //nedoplni
Druhy problem je doplneni typu:
template 
struct GetEasyType
{
public:
  typedef T value_type;
  typedef T& reference;
  typedef const T& const_reference;
};

typedef GetEasyType<std::string>::const_reference const_reference;
//opet za >:: icomplete nedoplni

Jmenny prostory. Pracuji pekne s tim, ze obsahuji podmnozinu uvedenych problemu, krome updatu cache pomoci zmeny #includu. Po zadani std:: okamzite (mam 900Mhz) na vas vyskoci nabidka vsech moznosti. Nabidka je doplnovana dynamicky s tim, jak pridavate/ubirate #includy. Takze po zadani #include <exception> se std:: pekne a okamzite doplni o tridu std::exception.

Vykreslovani se mi taky libi. Je poteseni pro oko videt, jak se vam snazi Vim poradit, i kdyz nekomu to mozna nebude prijemny, tak ja sem ocenil, jak se snazi za kazdym operatorem pristupu reagovat. Nekdy se nabidka scvrkne do jednoho zahybu, takze pro ty, kdo z vas pouzivate folding, nez bude dalsi verze, tak muzete misto set foldmethod=marker pouzit setlocal foldmethod=marker a misto napr. set foldmarker={,} pouzit setlocal foldmarker={,}

       

Hodnocení: -

zatím nehodnoceno
        špatnédobré        

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

Komentáře

Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

elviin avatar 24.5.2005 19:48 elviin | skóre: 29 | blog: elviin | Plzeň-Praha
Rozbalit Rozbalit vše oprava
Odpovědět | Sbalit | Link | Blokovat | Admin
K doplnovani metod sablon trid:
Array <std::string> strArray;
strArray[0].capacity(); //nedoplni

24.5.2005 20:25 iZaak | skóre: 2 | blog: ECHO_Echo_echo_cho
Rozbalit Rozbalit vše Jiné jazyky
Odpovědět | Sbalit | Link | Blokovat | Admin
Hmm, nice. Jen mě napadlo, jestli existuje i něco podobného pro php. Popřípadě nějaká osobní zkušenost.. ;)
Vím, že nic nevím... Ale pracuju na tom.
25.5.2005 08:50 Martin Lebeda | skóre: 22 | blog: Martinuv_blog | Plzeň
Rozbalit Rozbalit vše Re: Jiné jazyky
Mě by se zase nejvce hodilo PL/SQL a Perl, nejlepší by asi byl obecný interface nad externí generátor seznamu proměnných, funkcí, tříd atd (nejlépe seznamu vč. specifikace očekávaných parametrů).
Ku8aZ avatar 26.5.2005 11:47 Ku8aZ | skóre: 17
Rozbalit Rozbalit vše Tags soubor
Odpovědět | Sbalit | Link | Blokovat | Admin
Zajimalo by me, jestli jde nejak nastavit soubor tags, ktery se vytvari, aby se vytvarel pouze na jedno misto a ne do . adresare...
Čeho se vlastně člověk bojí, když se bojí tmy...? jabber: ku8az AT jabbim.cz
elviin avatar 20.6.2005 16:18 elviin | skóre: 29 | blog: elviin | Plzeň-Praha
Rozbalit Rozbalit vše Icomplete 0.2.1
Odpovědět | Sbalit | Link | Blokovat | Admin
Stahuj icomplete-0.2.1.ebuild, icomplete-0.2.1.tar.bz2

Založit nové vláknoNahoru

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