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

27

Je ne comprends pas comment autoriser la coloration syntaxique dans les fichiers que je modifie via vi lors de l'utilisation de sudo. Lorsque je sudo vi <filename>le terminal est uniquement en noir et blanc de mes paramètres de terminal. Dans vi si j'entre :syntax onrien ne change.

Quand j'ai vi <filename>toute la syntaxe est correctement colorée. En utilisant RHEL 5.4, env pertinent:

LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;
33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;
32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;
32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;
31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;
31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;
35:*.png=01;35:*.tif=01;35:

SHELL=/bin/bash

TERM=xterm-color
Scott Lundgren
la source
3
vine prend pas en charge la couleur, donc tout ce qui montre la couleur est en cours d'exécution vimou similaire.
Chris S

Réponses:

26

La réponse des alouettes est probablement la plus probable. Vous ne souhaiterez peut-être pas changer vos comptes root vi en vim de façon permanente, comme si vos ressources sont faibles vi est presque garanti de toujours fonctionner, je ne suis pas 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

Fait une

man which 

si vous avez besoin de plus de détails

user63673
la source
Je n'ai pas changé le compte root pour utiliser vim mais je savais juste que cela montrait que vi était aliasé à vim alors que mon utilisateur me disait d'utiliser sudo vim <file> au lieu de sudo vi <file>
Scott Lundgren
17

Sur un système RHEL, il /bin/vis'agit généralement d'une version minimale de vim, sans prise en charge de la coloration syntaxique. /usr/bin/vimest l'éditeur complet. Il est très probable que, dans votre environnement utilisateur, visoit un alias pour vim. Essaye ça:

sudo vim /some/file

Obtenez-vous la coloration syntaxique maintenant?

larsks
la source
Oui! et il semble que la réponse de sinping était celle dont j'avais besoin pour obtenir le comportement que je voulais
Scott Lundgren
11

Votre viest probablement /bin/vidu package vim-minimalqui ne prend pas en charge la coloration syntaxique. sudo vise lance /bin/vipour vous.

Bash ne fait que l'extension d'alias sur le premier mot de votre ligne de commande, donc dans:

sudo vi

vin'est pas remplacé vimmê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 la seconde sudo.

En utilisant cela sudo, bash fera une extension d'alias pour viin sudo vi. Dans la aliassection du doc ​​Bash, il est écrit:

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

Après avoir entré votre commande, vous pouvez appuyer sur Ctrl+ Alt+ Een bashpour 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


Aliasing simplement vien /root/.bashrcne fonctionnera pas.

Il peut également être noté qu'il vin'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.

Moniteur de poisson
la source
Super astuce pour avoir des alias avec sudo!
Corey Henderson
J'adore ça - simple et élégant !!! C'EST la bonne réponse.
FilmJ
3

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

cat <<_EOF >>/root/.bashrc

alias "vi"="/usr/bin/vim"
_EOF
pécher
la source
2

j'ai constaté que dans ma version de vim (installer avec sudo apt-get install vimsur debian 7) la syntax oncommande est définie sur une base par utilisateur dans ~/.vimrc. cependant, par défaut, l'installation n'a pas créé de /root/.vimrcfichier sudo vià charger. donc je viens de copier ~/.vimrcdans le /root/répertoire et cela a fait l'affaire:sudo cp ~/.vimrc /root/

Mulllhausen
la source
1

C'est parce que votre utilisateur root n'a pas de fichier de configuration vim. il vous suffit donc de copier votre fichier de configuration standard de l'utilisateur vim dans le répertoire racine.

sudo cp -r ~/.vi* /root/ quelque chose comme ca.

nb: vérifiez si vous n'avez pas de fichier correspondant à ~/vi*ce qui n'est pas pour vim.

Léo Derbois
la source
0

1) Vérifiez si vous utilisez vraiment vim et non vi (qui est malheureusement souvent par défaut sur les nouveaux systèmes installés)

2) Vérifiez que vous avez /etc/vim/vimrcla lignesyntax on

3) Tous les types de fichiers ne disposent pas d'informations de mise en évidence de la syntaxe par défaut ....

tsg
la source
Il n'y avait pas de / etc / vim / vimrc, mais / etc / vimrc avait la coloration syntaxique par défaut: if & t_Co> 2 || a la syntaxe ("gui_running") sur le set hlsearch endif
Scott Lundgren
-1

Pour ceux qui recherchent toujours de l'aide, essayez ces commandes.

  • sudovi = which sudo vi
  • usrvi = which vi
  • Si ces deux emplacements sont identiques, ne continuez pas.

Autrement...

  • mv $sudovi $sudovi.save
  • ln -s $usrvi $sudovi (lien symbolique)
Keenan Thompson
la source