Mon travail consiste généralement à utiliser SSH pour me connecter à différentes machines, puis à utiliser vim pour modifier des fichiers sur ces machines. Le problème est que je dois constamment copier mon fichier .vimrc partout. C'est très ennuyeux d'ouvrir vim et de ne pas avoir de paramètres. Est-il possible de transporter mes paramètres vim avec moi de machine en machine sans les copier manuellement partout?
Réponses
Trop de publicités?Au lieu d'apporter votre fichier .vimrc à chaque serveur sur lequel vous devez travailler, pourquoi ne pas éditer les fichiers distants depuis votre vim local :
Dans vim/gvim, exécutez :
:e scp://remoteuser@server.tld//chemin/du/document
ou lancez vim de cette manière :
vim scp://remoteuser@server.tld//chemin/du/document
Cela ouvre le fichier en place (il le copie en réalité localement), et lorsque vous enregistrez, il envoie le fichier édité de retour sur le serveur pour vous.
Il demande un mot de passe ssh, mais cela peut être simplifié via des clés ssh.
Comme d'autres l'ont mentionné, le seul inconvénient de cette méthode est que vous n'obtenez pas de complétion de chemin/fichier comme vous le feriez en travaillant directement sur la machine.
Pour plus d'informations, consultez le tutoriel suivant.
Je ressens ta douleur. J'ai tous mes fichiers ~/.*rc sous contrôle de version (Subversion), cela fonctionne très bien depuis que j'ai commencé en 1998, en utilisant CVS. Une manière de le faire est de vérifier tous vos fichiers rc de cette manière lorsque vous vous trouvez dans votre répertoire personnel :
svn co svn+ssh://utilisateur@hôte/chemin/vers/dépôt/trunk/home/utilisateur .
A .signature
A .vimrc
A .bashrc
A .screenrc
A .psqlrc
[...]
Révision vérifiée 7645.
De cette façon, les fichiers de configuration seront également synchronisés et mis à jour sur les différents ordinateurs lorsque vous exécutez svn update.
Vous pourriez créer un script bash pour le copier automatiquement à chaque fois que vous vous connectez, comme ceci :
#!/usr/bin/env bash
scp ~/.vimrc $1:
ssh $1
Vous pouvez l'appeler ssh_vim, par exemple. Ce n'est pas une solution idéale mais cela résoudra votre problème.
Vous pouvez l'améliorer pour vérifier d'abord s'il existe déjà. Si vous n'exécutez pas toujours ssh depuis la même machine, vous pourriez modifier le script pour obtenir le fichier via scp depuis une autre machine.
EDIT1
À ce propos, vous pourriez également monter le système de fichiers de la machine distante avec sshfs. De cette façon, vous bénéficiez de votre environnement et de vos outils (pas seulement .vimrc) et vous avez la complétion de ligne de commande (que vous n'avez pas en utilisant scp://).
EDIT2
Je viens de découvrir que vous pouvez sourcer votre fichier .vimrc en utilisant scp://, comme ceci :
:source scp://you@your_computer//yourpath/.vimrc
Cela fonctionne à partir de la ligne de commande vim mais pour le moment je ne sais pas comment l'automatiser. Ça ne semble pas non plus fonctionner avec l'option '-u' ni dans le .vimrc ni avec $VIMINIT.
EDIT3
Je l'ai trouvé ! Vous pouvez faire ceci pour démarrer vim avec un .vimrc pris de votre hôte de référence :
vim -c ':source scp://you@your_computer//yourpath/.vimrc'
L'option '-c' exécute la commande juste après le lancement de vim.
Vous pouvez créer un alias dans votre shell préféré pour éviter de taper. Dans bash, cela ressemblerait à ceci :
alias vim="vim -c ':source scp://you@your_computer//yourpath/.vimrc'"
Si vous utilisez l'authentification par clé publique, vous pouvez utiliser ceci dans votre ~/.ssh/config
:
Hôte *
PermitLocalCommand yes
LocalCommand bash -c 'scp -P %p %d/.vimrc %u@%n: &>/dev/null &'
Je préfère cette méthode à l'astuce de script suggérée ci-dessus car elle ne perturbe pas l'invocation de la commande ssh
(lors de la spécification de paramètres supplémentaires, etc.)
Quelques solutions :
1) Créez un partage NFS pour votre dossier personnel et mappez-le dans plusieurs emplacements.
2) Créez un petit script pour pousser votre fichier .vimrc vers le serveur auquel vous vous connectez avec un fichier d'identité/clé. Ça pourrait ressembler à quelque chose comme ceci (pseudocode) :
connectString = arg0 #username@ipaddress
scp -i ~/.ssh/indentity connectString:~/ ~/.vimrc
ssh -i ~/.ssh/indentity connectString
- Réponses précédentes
- Plus de réponses