přihlásit 12026/822447

Python a editor Vim

Já osobně nejradši při psaní programů používám editor VIM [1]. Proto mám pár tipů, jak si v něm programování pythoních programů zpříjemnit. U těchto rad předpokládám, že jste dobře obeznámeni s editorem VIM a nemusím vysvětlovat základní věci, jako do jakých souborů psát příslušná konfigurační nastavení a podobně.

Individuální nastavení

Individuální nastavení pro Python je docela dobré, takže si nezapomeňte nastavit jeho automatické načítání volbami:

syntax            on
filetype plugin   on
filetype indent   on

Spouštění/ladění programu

Cílem tohoto nastavení je umožnit spuštění právě editovaného souboru stisknutím klávesy F12. Po ukončení spuštěného programu přejde interpret do interaktivního režimu, takže je umožněno prohlédnout si případná chybová hlášení po pádu programu a/nebo následné interaktivní zkoumání obsahu proměnných, spouštění naprogramovaných funkví a podobně. Po dalším stisknutí klávesy F12 dojde k novému spuštění programu s tím, že předchozí sezení se automaticky ukončí.

Je potřeba si k tomu napsat malý prográmek v Pythonu, který jsem pojmenoval killargs.py a který funguje jenom v Linuxu. Jestli někdo napíše jeho Win variantu, rád ji zveřejním.

killargs.py

#!/bin/env python

import os, re, sys

procesy = os.popen('ps -Af').readlines()
vzor    = re.compile('.*%s.*'%sys.argv[1])
selfpid = os.getpid()

for proc in procesy:
    if  vzor.match(proc):
        pid = int(proc.split()[1])
        if  pid == selfpid:
            continue
        os.kill(int(pid), 15)

Do Vimu pak stačí dát tento příkaz (je to jeden dlouhatanský řádek):

map <F12> :silent !killargs 'xterm .* -e python'<cr>
:silent !xterm -geom 120x20 -e python -i % $PYARGS &<CR>

Otvírání souborů v jedné instanci Vimu

Když zadáte na příkazovém řádku příkaz gvim soubor.py, spustí se nová instance programu Vim a soubor se v ní otevře. Když to uděláte několikrát pro různé soubory, máte Vim spuštěný taky několikrát. Možná byste byli radši, kdyby se nové soubory otvírali v první instanci Vimu, takže by Vim byl spuštěný jen jednou a všechny soubory by byly otevřeny v něm. To lze snadno zařídit.

Každou instanci Vimu lze pojmenovat a za pomocí tohoto jména pak určit, kde se mají otevírat další soubory. Abyste nemuseli vypisovat na příkazovém řádku složité příkazy, je vhodné si na to udělat spouštěcí skript.

Linux

Pojmenujte si jej třeba pvim (python vim), dejte si ho do adresáře ~/home/bin a nastavte mu právo spuštění (chmod a+x pvim). Jeho obsah bude:

#!/bin/sh
gvim --servername PYTHON --remote-silent $@

Jestliže chcete soubor otvírat v nové záložce (funguje od vimu verze 7.0), použijte:

#!/bin/sh
gvim --servername PYTHON --remote-tab-silent $@

Windows

Pojmenujte si jej třeba pvim.bat a dejte si ho do runtime adresáře Vimu. Tedy do adresáře kde se nalézá soubor gvim.exe. Tento adresář musí být uveden v systémové proměnné PATH. Obsah skriptu bude:

@ECHO OFF
gvim.exe --servername PYTHON --remote-silent %*

Jestliže chcete soubor otvírat v nové záložce (funguje od vimu verze 7.0), použijte:

@ECHO OFF
gvim.exe --servername PYTHON --remote-tab-silent %*

Mělo by to fungovat od Windows 2000. Ve starších verzích je potřeba nahradit:
%* za %1 %2 %3 %4 %5 %6 %7 %8 %9 a při spouštění půjde předávat jen devět parametrů.

Nyní už místo příkazu gvim stačí používat příkaz pvim a soubory se budou otevírat v jedné instanci Vimu. Příkaz pvim se samozřejmě nemusí používat jen na příkazovém řádku, můžete si ho asociovat s příponou py, nebo v Midnight (Linux) či Total Commanderu nadefinovat jako editor pro otevírání souborů a podobně.

V Linuxu je možno spouštěcí skript upravit tak, že na každém virtuálním desktopu bude název instance Vimu automaticky originální. To způsobí, že se Vim spustí zvlášť na každém desktopu. V rámci tohoto desktopu ale opět jen jednou. Jak to udělat se blíže dočtete mých stránkách věnovaných Vimu [2]. Jestli vám stačí samotný spouštěcí skript, pak je zde:

#!/bin/sh

# stary zpusob / icewm
DESKTOP=`xprop -root | \
         grep '_WIN_WORKSPACE(CARDINAL) =' | \
         sed  's/\(.* \)\(.*\)/\2/'`

if  [ "$DESKTOP" = "" ]; then

# novy zpusob / gnome
DESKTOP=`xprop -root | \
         grep '_NET_CURRENT_DESKTOP(CARDINAL) =' | \
         sed  's/\(.* = \)\(.*\)/\2/'`

fi

SSN="SRV$DISPLAY.$DESKTOP"
gvim --servername $SSN --remote-tab-silent $@

Seznam funkcí v souboru

Jednou z řady užitečných věcí je, když editor ukazuje seznam funkcí, tříd, metod a podobně, které se nachází v editovaném souboru. Umožňuje to rychlejší orientaci v souboru. Ve Vimu se to dá zařídit pomocí pluginu taglist [3], který ke své činnosti potřebuje program ctags [4]. Tento program je běžnou součástí linuxových distribucí, do Windows se musí doinstalovat. Vypadá to takto:


Seznam URL na stránce:
[1] http://www.vim.org
[2] http://wraith.iglu.cz/odkaz.html?/s_vim/rozsireni-dgvim.html
[3] http://www.vim.org/scripts/script.php?script_id=273
[4] http://ctags.sourceforge.net/

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /web/htdocs2/wraithcz/home/www/python/data/sessions/sessions1.php on line 2