vim: subvenir à la flemme avec import vim

Tout bon développeur est un gros flemmard, pour ne pas dire une loutre, et c'est bien évidemment mon cas.

Alors, j'ai cherché un moyen de me faciliter la vie avec mon éditeur favori vim lorsque je développe en langage Python.

Implémenter une interface / classe abstraite c'est chiant car rébarbatif et complètement trivial. J'ai donc pense à un moyen d'automatiser cela vu que c'est effectivement possible de l'automatiser.

Pour cela, nous devons connaître les méthodes publiques de la classe mère que l'on implémente. TEH SOLUTION IZ import vim et de la magie au pays des lutins.

On va donc se faire une petite macro vim pour faire le boulot tout seul à titre d'exemple à placer dans le .vimrc.

python <<EOF                                                 
def loutrage(module="paramiko", clazz="SFTPServerInterface"):
    import vim                           
    p = __import__(module)
    i = getattr(p, clazz)
 
    buffer = vim.current.buffer
 
    buffer.append('class %s (%s.%s):' % ('MyClass', p.__name__, i.__name__))
    buffer.append('\tdef __init__(%s ):' % ", ".join(         
        getattr(i, '__init__').im_func.func_code.co_varnames))
    buffer.append('\t\tpass')
    buffer.append('\n')
 
    for m in dir(i):                                           
        if '__' not in m and hasattr(getattr(i, m), 'im_func'):
            buffer.append('\tdef %s(%s):' % (m, ", ".join(    
                getattr(i, m).im_func.func_code.co_varnames)))
            buffer.append('\t\traise NotImplementedError()')
            buffer.append('\n')
EOF

Ici on prend l'exemple de la classe SFTPServerInterface du module paramiko.

Et voilà pour l'utilisation il n'y a plus qu'à faire pendant l'édition

:python loutrage() ou :python loutrage("monmodule", "maclassemere")

Par exemple pour redéfinir la classe BaseHTTPRequestHandler du module BaseHTTPServer:

:python loutrage("BaseHTTPServer", "BaseHTTPRequestHandler")

Ou un map pour un raccourci clavier:

map L :python loutrage()^M

Et puis on s'aperçoit que du coup nos méthodes sont dans l'ordre alphabétique comme quoi y'a du bon à loutrer !

Note:
Utilisation avec Debian, Ubuntu: sudo aptitude install vim-python
Utilisation avec FreeBSD : sudo make -DWITH_PYTHON -C /usr/ports/editors/vim (knob PYTHON)

Enjoy lutinos \o/

python/vim.txt · Last modified: 2010/07/05 00:42 by newacct
www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0