Portál AbcLinuxu, 10. prosince 2025 02:59
V dnešnom blogu si ukážeme možnosti modulu python-mode pre editor VIM. Jeho pomocou pridáme do editoru VIM možnosti automatickej kontroly zdrojových kódov, lepšiu navigáciu v kóde a dopĺňanie kódu.
Požiadavky pluginu sú relatívne štandardné. Je potrebné mať VIM vo verzii >= 7.0 s podporou pythonu. Okrem skutočne minimalistických inštalácii VIMu by mal fungovať prakticky všade.
Zdrojové kódy modulu sú dostupné github-e. Inštalovať modul je možné buď pomocou pathogenu, alebo manuálne. Používateľom pathogenu hádam nemusím vysvetľovať spôsob inštalácie, pre tých ostatných krátky návod ako pomerne bezbolestne pridať plugin do VIMu bez neporiadku v adresári ~/.vim
.
Zásuvný modul stiahneme príkazom git clone git://github.com/klen/python-mode.git. Následne stačí adresár python-mode presunúť do podadresára ~/.vim/bundle/ (ak neexistuje musí sa vytvoriť) a pridať riadok set runtimepath+=$HOME/.vim/bundle/python-mode/ do ~/.vimrc. Týmto je inštalácia prakticky hotová a pripravená na prípadnú migráciu na pathogen
.
Pri prvom spustení je vhodné vygenerovať tagy z dokumentácie aby VIM vedel korektne vyhľadávať pri zadaní príkazu :help. Tagy sa vygenerujú príkazom :helptags ~/.vim/bundle/python-mode/doc/.
Pri používaní pluginu som narazil na pomerne nepríjemný problém, kvôli ktorému nie je možné do editoru vkladať unicode znaky. Problém sa týka len konzolového editoru (GVIM teda funguje správne). V prípade použitia konzolového VIMu sa dá tento problém odstrániť nahradením riadku locale.setlocale(locale.LC_CTYPE, "C") riadkom locale.setlocale(locale.LC_CTYPE, "en_US.UTF-8") v ~/.vim/bundle/python-mode/pylibs/pymode/lint.py.
Pre dopĺňanie kódu nie je potrebné väčšinou nič nastavovať. Podpora virtuálneho prostredia (virtualenvwrapper) je štandardne zapnutá, stačí len spustiť VIM vo virtuálnom prostredí. Kód sa dopĺňa skratkou <Ctrl-Space>. Plugin nepoužíva štandardné omnicomplete (<Ctrl-x>o resp. <Ctrl-x>u). Medzi nasledujúcim a predchádzajúcim výsledkom sa dá prechádzať štandardnými skratkami <Ctrl-n> a <Ctrl+p>.
Dopĺňanie kódu má na starosti knižnica rope. Nastavenia rope je možné upraviť v adresári .ropeproject/config.py, ktorý sa automaticky vytvoril v podadresári s projektom.
Kontrola kódu prebieha štandardne pri uložení. Kód kontrolujú nástroje pyflakes, pep8, mccabe, pylint a code-checkers. V štandardnom nastavení sa používa len prvá trojica. Nástroje, ktoré kontrolujú kód sa dajú zapnúť / vypnúť nastavením premennej g:pymode_lint_checker v .vimrc. Pomocou nej je možné napríklad úplne vyradiť niektorý z nástrojov na kontrolu kódu (minimálne pep8 je dosť ukecaný a občas vyhadzuje nezmyselné chyby). Nasledujúci kód vo .vimrc vyradí z činnosti pep8:
let g:pymode_lint_checker = "pyflakes,mccabe"
Jednotlivé hlásenia je možné vypínať aj individuálne a to nastavením premennej g:pymode_lint_ignore. Nasledujúci kód potlačí chybu E302 (2 voľné riadky zo definíciou funkcie / triedy) a všetky varovania:
let g:pymode_lint_ignore = "E302,W"
Dokumentácia sa prezerá klávesovou skratkou <Ctrl-c>d. Po jej stlačení sa zobrazí dokumentácia k aktuálnemu symbolu pod kurzorom. Pre dokumentáciu knižníc je stále možné použiť klávesovu skratku <Shift-k>. Krátky popis funkcií sa zobrazuje aj automaticky pri používaní dopĺňania kódu.
Navigácia v kóde nie je o nič zložitejšia než prezeranie dokumentácie. Opäť stačí presunúť kurzor na symbol a klávesovou skratkou <Ctrl-c>g sa presunieme na jeho definíciu. Vyhľadať použitia symbolu je možné klávesovou skratkou <Ctrl-c>f <Enter>.
Hlavným zdrojom informácií o tomto plugine je súbor README.rst. Dokumentácia integrovaná do VIMu bola v čase písania blogu neaktuálna. Ďalšie príkazy sa dajú zistiť príkazom :help ropevim.txt.
Python-mode síce nie je najlepším pluginom na dopĺňanie kódu, prezeranie dokumentácie, kontrolu kódu a mnoho ďalšieho, ale patrí medzi najkompletnejšie moduly (riešenie všetko v jednom). V súčasnosti nie je repozitár na github-e aktívny. V kóde je pomerne veľké množstvo neopravených chýb (týkajú sa hlavne neaktualizovaných knižníc rope a ropevim).
Tiskni
Sdílej:
V podstate doplňovanie je detailnejšie, ale zároveň je u väčších projektov znateľne pomalšie. Rope síce mám tiež menej rád, ale beží pekelne rýchlo. Teoreticky by sa možno dali vybrať črevá zo snaked a napchať do rope pre lepší type hinting.
Pod win som plugin neskúšal, teoreticky tam môže nastať mnoho problémov od nenájdenia cesty ku knižniciam pythonu až po nekompatibilné volania dlopen. V konfigurácii som nič zlé nenašiel, možno niečo rozumné vypíše nasledujúci príkaz:
:call pymode#troubleshooting#Test()
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.