Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 20/02/2016, à 16:54

supermathieu

test conditionnel dans le fichier de configuration .vimrc

Bonjour,

Je voudrais personnaliser mon fichier ~/.vimrc de configuration de vi.

Voici ce que je voudrais faire: quand un fichier ouvert avec vi s'appelle titi45.tex, et quand je presse espace en mode normal, je veux que la commande make toto45 soit exécutée. Si c'est c'est le fichier titi65.tex qui est ouvert, alors je veux que ce soit la commande toto65 qui soit exécutée, etc.
Mais si le fichier tutu87.tex est ouvert, alors rien ne doit se produire.

Mon ~/.vimrc possède déjà la commande:
au FileType tex nmap <space> :w<CR>:!make<CR><CR>
qui peut servir de point de départ...

Toute la difficulté est de matcher le nom titixx.tex (et pas un autre), et de récupérer le numéro xx pour passer à make.

Quelqu'un pourrait-il m'aider?

Mathieu

Hors ligne

#2 Le 20/02/2016, à 18:22

MicP

Re : test conditionnel dans le fichier de configuration .vimrc

…Si c'est c'est le fichier titi65.tex qui est ouvert, alors je veux que ce soit la commande toto65 qui soit exécutée, etc.…

Je vais supposer que tu voulais écrire :

Si c'est c'est le fichier titi65.tex qui est ouvert, alors je veux que ce soit la commande make toto65 qui soit exécutée, etc.…

=======
Dans ton fichier ~/.vimrc tu pourrais remplacer :!make par :!monScriptMake

Puis créer le fichier script monScriptMake qui ferait le travail avec le nom du fichier passé en paramètre
et qui lancerait la commande make avec le nom de fichier qui te conviens.

Un exemple de contenu du fichier monScriptMake

#!/bin/bash

[ "${1}" = "tutu87.tex" ] && exit 0   # Si le nom du fichier est "tutu87.tex", ne rien faire.
fichTmp="${1%.*}"                     # Supprimer l'extension du nom de fichier.
make "${fichTmp/titi/toto}"           # Remplacer "titi" par "toto" et lancer "make" avec le nom modifié du fichier.

Il reste à rendre le fichier monScriptMake exécutable
et à indiquer son chemin dans ~/.vimrc si ce chemin n'est pas dans la liste des chemins de la variable $PATH

=======
Sur mon système, j'ai créé un répertoire ~/mesScripts/ et j'ai ajouté ce chemin au PATH en ajoutant 4 lignes à la fin de mon fichier ~/.bashrc avec la ligne de commande suivante :

echo -e "\n# Pour l'accès à mes scripts\nexport PATH=\$HOME/mesScripts:\$PATH\n" >> ~/.bashrc

et du coup, je (depuis le compte "michel") n'ai plus besoin de spécifier le chemin de mes scripts exécutables qui sont dans /home/michel/mesScripts/

Dernière modification par MicP (Le 20/02/2016, à 20:40)

Hors ligne

#3 Le 21/02/2016, à 00:44

supermathieu

Re : test conditionnel dans le fichier de configuration .vimrc

Merci pour cette réponse!
C'est exactement ce qu'il me fallait...
Bien sûr, les histoires de toto n'était qu'un exemple pour expliquer...

Voici le script que je me suis concocté:

#!/bin/bash
echo argument: $1
if [[ $1 =~ source_(enonce|corrige)[0-9]+.tex ]] ; then
        make enonce$(echo $1 | sed "s/source_\(enonce\|corrige\)\([0-9]\+\).tex/\2/")
        exit 0
fi

make plouf ; exit 1

Maladroit sûrement, notamment le sed avec le OU logique... vos remarques sont les bienvenues! toute réécriture sera examinée avec attention!
Sinon, encore merci...

Dernière modification par supermathieu (Le 21/02/2016, à 00:46)

Hors ligne

#4 Le 21/02/2016, à 02:00

MicP

Re : test conditionnel dans le fichier de configuration .vimrc

Je n'ai rien à redire au sujet de la syntaxe de ta ligne sed : Il y a dans ce forum des personnes beaucoup plus compétentes que moi qui pourront peut-être apporter des commentaire à ce sujet et aussi concernant mon code.
On m'avait d'ailleurs conseillé d'utiliser une variable pour la regex

Si ça se trouve, c'est peut-être aussi simple à faire avec le ~/.vimrc
mais je connais trop peu sa syntaxe.

=======
En relisant le premier message et le code que tu as créé, je pense avoir compris ce que tu cherche à faire.

#!/bin/bash
maRegex='source_(enonce|corrige)([0-9]+).tex'
[[ "${1}" =~ $maRegex ]] && make enonce${BASH_REMATCH[2]}

S'il n'y a pas de correspondance avec la regex, la commande make ne sera pas lancée et le code d'erreur de la ligne (et du script) sera à 1

"${1}" c'est une habitude qui me permet de ne jamais plus me faire avoir par un nom de fichier qui comporterait un espace dans son nom,
du coup, même quand ce n’est pas nécessaire (comme ici), je mets quand même la variable entre guillemets.

Dernière modification par MicP (Le 21/02/2016, à 02:40)

Hors ligne

#5 Le 21/02/2016, à 11:58

supermathieu

Re : test conditionnel dans le fichier de configuration .vimrc

Merci beaucoup pour tout!

Très pratique le BASH_REMATCH en effet...

Maintenant j'arrive à faire ce que je veux, grâce à toi :-)

Hors ligne

#6 Le 21/02/2016, à 15:19

MicP

Re : test conditionnel dans le fichier de configuration .vimrc

Ça a été un plaisir de pouvoir t'aider. smile

Hors ligne