GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi n'ai-je pas de coloration syntaxique lorsque je sudo vi <filename> ?

Solution 1 :

La réponse de Larks est probablement la plus probable. Vous ne souhaiterez peut-être pas changer vos comptes root vi en vim de manière permanente, car si vos ressources sont faibles, vi est presque garanti de toujours fonctionner, je ne suis pas si sûr de vim.

Vous utilisez probablement (couleur)

/usr/bin/vim 

sous votre utilisateur normal et

/bin/vi

sous sudo ou root. Vous pouvez vérifier en utilisant :

which vi

une fois sous votre utilisateur normal et l'autre via sudo

sudo which vi

Faites un

man which 

si vous avez besoin de plus de détails

Solution 2 :

Sur un système RHEL, /bin/vi est généralement une version minimale de vim , sans prise en charge de la coloration syntaxique. /usr/bin/vim est l'éditeur complet. Il est très probable que dans votre environnement utilisateur, vi est un alias pour vim . Essayez ceci :

sudo vim /some/file

Avez-vous maintenant la coloration syntaxique ?

Solution 3 :

Votre vi est probablement /bin/vi du paquet vim-minimal qui ne prend pas en charge la coloration syntaxique. sudo vi lance /bin/vi pour vous.

Bash ne développe les alias que sur le premier mot de votre ligne de commande, donc dans :

sudo vi

vi n'est pas remplacé par vim même si vous avez défini cet alias.

La solution est de définir un autre alias (pour l'utilisateur invoquant sudo ):

alias sudo='sudo '

Notez l'espace après le deuxième sudo .

En utilisant ce sudo , bash fera l'expansion d'alias pour vi en sudo vi . Dans le alias section de Bash doc, il dit :

Si le dernier caractère de la valeur de l'alias est un espace, le mot de commande suivant suivant l'alias est également vérifié pour l'expansion de l'alias.

Après avoir entré votre commande, vous pouvez appuyer sur Ctrl +Alt +E en bash pour voir le résultat de l'expansion.

Crédits :

https://bbs.archlinux.org/viewtopic.php?id=36796

http://www.shellperson.net/using-sudo-with-an-alias

En aliasant simplement vi en /root/.bashrc ne fonctionnera pas.

On peut également noter que vi n'est pas alias pour root sur certaines distributions dans /etc/profile.d/vim.sh :

if [ -n "$BASH_VERSION" -o -n "$KSH_VERSION" -o -n "$ZSH_VERSION" ]; then
  [ -x /usr/bin/id ] || return
  ID=`/usr/bin/id -u`
  [ -n "$ID" -a "$ID" -le 200 ] && return
  # for bash and zsh, only if no alias is already set
  alias vi >/dev/null 2>&1 || alias vi=vim
fi

Changer cela ne résoudra pas non plus le problème.

Solution 4 :

Par défaut dans 5.4 vi est la valeur par défaut. J'ai oublié dans quelle version cela a commencé. Cela ajoutera l'alias nécessaire pour vous :

cat <<_EOF >>/root/.bashrc

alias "vi"="/usr/bin/vim"
_EOF

Solution 5 :

j'ai trouvé cela dans ma version de vim (installer avec sudo apt-get install vim sur debian 7) le syntax on la commande est définie pour chaque utilisateur dans ~/.vimrc . cependant, par défaut, l'installation n'a pas créé de /root/.vimrc fichier pour sudo vi charger. donc j'ai juste copié ~/.vimrc dans le /root/ dir et ceci a fait l'affaire :sudo cp ~/.vimrc /root/


Linux
  1. Ajouter un utilisateur au groupe mais pas reflété lors de l'exécution de l'ID

  2. Pourquoi la commande sudo:bundle est-elle introuvable ?

  3. commande introuvable lors de l'utilisation de sudo

  4. Pourquoi l'USB ne fonctionne-t-il pas sous Linux alors qu'il fonctionne dans UEFI/BIOS ?

  5. Pourquoi Linux/POSIX a-t-il lchown mais pas lchmod ?

Pourquoi Sigint n'est-il pas propagé au processus enfant lorsqu'il est envoyé à son processus parent ?

Pourquoi Sudo ignore-t-il les alias ?

Linux - Pourquoi USB ne fonctionne-t-il pas sous Linux alors qu'il fonctionne sous Uefi/bios ?

Sudo :Nocorrect :Commande introuvable ?

Activer la coloration syntaxique dans Vim

Pourquoi ne pas bloquer ICMP ?