Très souvent il m’arrive de vouloir mettre un bout de mon code dans un blog try / except
, et il faut couper le bloc de code, ecrire le try/except
, coller le code, puis re-indenter au besoin.
C’est con, on a un éditeur pour faire le taff pour nous et d’ailleurs, PyDev le fait très bien. Soyons fainéant.
On va se rajouter une petit snippet qui permet de faire ça automatiquement. Il faut ouvrir le menu Tools > new snippet et un peu de xeumeuleu dedans :
<snippet> <content><![CDATA[ ${SELECTION/^( *)([^ ].*)/$1/g}try: ${SELECTION/(^ *|\n *)/$1 /g} ${SELECTION/^( *)([^ ].*)/$1/g}except ${1:Exception as e}: ${SELECTION/^( *)([^ ].*)/$1/g}${2:import ipdb; ipdb.set_trace()} ]]></content> <scope>source.python</scope> <description>Wrap in Try/Except</description> </snippet> |
Ca récupère la selection, place le try/except
, replace la sélection et reindente grâce à une regex. Et seulement si le fichier est du code Python. Joie.
On sauvegarde ça sous un nom clair genre “wrap_in_try_except.sublime-snippet”.
Puis on fait un petit tour dans Préférence > Key Bindings – User et on se rajoute un raccourci clavier pour profiter de notre nouveau joujou :
{ "keys": ["ctrl+shift+y"], "command": "insert_snippet", "args": {"name": "Packages/User/wrap_in_try_except.sublime-snippet"} } |
Et voilà :
ligne_qui_pouet |
Devient, après selection et un petit ctrl + shift + y :
try: ligne_qui_pouet except Exception as e: import ipdb; ipdb.set_trace() |
On peut tabuler entre la définition de l’exception à catcher et le contenu du block except
pour les changer au besoin rapidement.
Par contre, ça ne marche que si on indente avec des espaces. Mais ceux qui utilisent des tabs pour indenter ne méritent pas qu’on les aide de toute façon (si c’est votre cas, quittez ce site, tout de suite, houste !).
“Mais ceux qui utilisent des tabs pour indenter ne méritent pas qu’on les aide de toute façon”
Malheureusement, suivant le projet sur lequel on travaille on ne choisi pas les standards de codage a utiliser.
Au cas ou c’était pas clair, actuellement j’indente avec des tabs :p
Pourquoi on indenterait pas avec des tabs ?
@sam: Il n’y aurait pas un en trop dans ton xeumeuleu ?
@clem: Conventions de codage Python. Voir PEP8.
* Il n’y aurait pas un <snippet> en trop dans ton xeumeuleu ?
la tof d’illustration est tout le contraire d’un faineant :) le pov’ mec :D
Et une question pour les utilisateurs de vim, y-a-t-il un moyen de faire pareil sous vim?
Cette question n’est pas un appel à troll, c’est juste que j’utilise pour le moment les deux éditeurs et que je tente d’apprendre à utiliser vim et j’aime bien savoir si c’est possible de faire pareil pour les deux. J’essaie de me forcer un peu plus avec vim, parce que c’est open source et que je commence a maitriser un peu le machin (mais pas facile a apprivoiser). Et du coup, si les commentaires peuvent donner un tip pour vim, c’est tout benef.
PS: Excellent le trombone MS :D
@clem : c’est un sujet de troll vieux comme l’éditeur de code ça.
https://duckduckgo.com/?q=tab+vs+space
@killruana : cette règle ne s’applique donc qu’à python ?
@clem: c’est juste un troll :) Je garde la flamme du blog en vie. Oui le PEP8 s’applique uniquement au Python, c’est la convention de codage internationale du langage. Après il y a des gens qui ne la suivent pas. On les agresse dans les ruelles sombres, mais c’est possible.
@killruana : merci man.
@foxmask: oui mais il try et il wrap.
@Feadurn: on a le droit de parler de VI, c’est pas un crime. Juste de pas lancer l’éternel débat “Vi il est plus mieux”, parce que ça commence à devenir vieux. Moi je tenterai avec une macro pour résoudre ton problème (http://www.thegeekstuff.com/2009/01/vi-and-vim-macro-tutorial-how-to-record-and-play/)
un bout de monde code dans un blog ==> un bout de mon code dans un bloc
@Feadurn et @Sam : dans vim, on peut le faire avec un peu d’huile de coude, une ligne de code bien crade et un vnoremap !
J’ai jamais tenté ceci dit (flemme).
Voilà. Par contre, le mapping est sur ctrl + y.
Je ne suis pas sur que ça marche avec toutes les formes d’indentation.