Changer l'éditeur par défaut lorsque sudo visudo

23

Ce faisant sudo visudo, l'éditeur par défaut est nano.
Je veux le changer en viou vim.

J'ai déjà fait viml'éditeur par défaut, et je l'utilise comme substitut pour geditouvrir des fichiers php, .txt, .c et .h, en plaçant un vim.desktopfichier dans ~/.local/share/applications/et en modifiant correctement soit ~/.local/share/applications/mimeapps.listou /etc/gnome/defaults.list. Cependant, cela ne s'applique apparemment pas nano.

Un indice?

Cbhihe
la source
Avez-vous vérifié man visudo?
fkraiem
J'ai découvert plus de choses depuis que je l'ai écrit - j'espère en ajouter plus tard; Les distributions Linux le gèrent différemment.
Volker Siegel
Oui et j'ai défini mon env-var VISUAL sur vim et "exporté" dans .bashrc et dans .bash_profile, puis j'ai obtenu le shell mais en vain. Même déconnecté et reconnecté à la session pour vous en assurer.
Cbhihe
2
J'ai ajouté le sudo -E visudoplus tard dans la réponse, avez-vous essayé cela? Le -E sudone supprime pas tous les vars env. Il fait parce que ubuntu a une ligne Defaults env_reseten/etc/sudoers
Volker Siegel
Avez-vous également essayé le update-alternativesje l' ai également ajouté?
Volker Siegel

Réponses:

19

Le problème n'est pas qu'il ne s'applique pas aux nano , c'est qu'il ne s'applique pas au shell:

Définissez simplement la VISUALvariable d'environnement:

export VISUAL=vim

Ajoutez-le également ~ / .bashrc pour le rendre permanent.

Comme vous semblez utiliser vim en général, définissez les deux VISUALet EDITOR:

export VISUAL="vim"
export EDITOR="$VISUAL"

ou plus POSIX-correct

VISUAL="vim" ; export VISUAL
EDITOR="$VISUAL" ; export EDITOR

je suppose nano c'était la valeur d'une ou des deux variables.

Pour utiliser l'éditeur dans visudo, nous devons gérer cela sudoqui ne conserve pas normalement les variables d'environnement. L'option -Echange cela.

sudo -E visudo

Sans -Eici, vous vous retrouveriez avec un défaut denano nouveau


Les deux variables étaient utilisées bien avant que les fichiers soient nommés *.desktopou mime*même existent.
(Et la chose impressionnante est: ils étaient en fait utilisés comme standard commun .)
Dans Ubuntu, la valeur par défaut du système semble être définie avecsudo update-alternatives --config editor . Il affiche un menu pour modifier l'association actuelle.


Voir la section ENVIRONMENTdans man visudo:

  VISUAL           Invoked by visudo as the editor to use

  EDITOR           Used by visudo if VISUAL is not set
Volker Siegel
la source
1
L'avez-vous essayé? Par défaut, la sudoplupart des variables d'environnement sont supprimées de l'environnement pour la commande qu'il exécute. VISUAL=vim sudo visudo(et les variations que vous suggérez) ne fonctionne pas pour moi et ne devrait pas fonctionner. sudo VISUAL=vim visudofonctionne, cependant. (Je viens d'essayer à nouveau les deux, pour être sûr.) Soit dit en passant, VISUALet ne EDITORsont pas définis par défaut, pas définis sur nano. VISUALet EDITORne sont pas le mécanisme par lequel les visudosélections nanodans la configuration par défaut (sauf dans la mesure où elles les consultent, les trouvent non définies ou vides et continuent).
Eliah Kagan
3
Cela fonctionne avec sudo -E visudo- ce qui devrait certainement être dans la réponse, à droite.
Volker Siegel
+1 et j'accepte votre excellente réponse, Volker. "Besten Dank!" J'ai toujours un message d'erreur avec l'indicateur -E, à propos de ne pas être autorisé à transmettre des variables d'environnement, mais j'ai ensuite intenté une action d'un utilisateur à accès restreint à un utilisateur avec privilèges d'administrateur et bingo! Tout fonctionne bien.
Cbhihe
Oh, je suis heureux d'ajouter une chose qui peut mal tourner / peut aider;) Pourriez-vous vérifier les options (lignes avec Default) dans votre / etc / sudoers? Je pense qu'il existe une option qui l'interdit, mais qui n'était pas dans mon fichier par défaut.
Volker Siegel
@VolkerSiegel: J'imagine que vous faites référence à la valeur par défaut env_reset dans / etc / sudoers . Il en est ainsi dans mon cas.
Cbhihe
8

Comme décrit dans cette réponse , ajoutez

Defaults editor=/path/to/editor

dans le fichier sudoers .

Remarque: cela ne fonctionnera que si le fichier en cours d'édition contient le Defaults editor=/path/to/editor ligne ou inclut un fichier qui la contient.

Par exemple: visudo -f /etc/sudoers.d/my_sudoers_extensionsera par défaut Nano.

Muhamed Huseinbašić
la source
2
+1: Bon, et je ne l'avais pas remarqué lorsque j'ai commencé ce fil, merci.
Cbhihe
4

Si vous ne prévoyez jamais d'utiliser nano, vous pouvez également le supprimer. Ensuite, le système utilisera vi / vim par défaut.

sudo apt-get purge nano

Je sais que ce n'est pas la réponse officielle, mais c'est l'une des premières commandes pour moi après l'installation d'Ubuntu.

Philipp Claßen
la source
Cela peut certainement être qualifié de "nécropostage", mais bon ... Votre réponse est intéressante, dans la mesure où elle concerne Ubuntu. Certaines autres distributions (dont ArchLinux) n'ont que le ou les éditeurs que vous avez installés à la première place, vous n'avez donc ni le pbm que j'ai rencontré avec Ubuntu, ni la nécessité de recourir à la mesure que vous suggérez. Dans le cas présent (ubuntu + nano + vim), je pense que beaucoup peuvent avoir besoin d'options en termes d'éditeurs. Il est vrai que l'on voit rarement les goûts de emacset vimcoexiste activement sur le profil d'un utilisateur. Cependant nanoet vimse produisent ensemble dans la nature ... Gardez nano!
Cbhihe
1
certainement la meilleure réponse
botkop
1
emacset vimcoexistent avec bonheur et sont constamment utilisés. nanoest comme le ravageur, le plus tôt il est retiré du système, mieux c'est. Je comprends que certaines personnes trouvent cela confortable, mais cette réponse est parfaitement valable.
mementum