¿Por qué no tengo resaltado de sintaxis cuando sudo vi <nombre de archivo>?

27

No entiendo cómo permitir el resaltado de sintaxis en los archivos que estoy editando a través de vi cuando uso sudo. Cuando sudo vi <filename>el terminal es solo blanco y negro de mis configuraciones de terminal. En vi si entro :syntax onnada cambia.

Cuando vi <filename>toda la sintaxis está coloreada correctamente. Usando RHEL 5.4, env relevante:

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
fuente
3
vino admite color, por lo que todo lo que muestra color se está ejecutando vimo es similar.
Chris S

Respuestas:

26

La respuesta de Larks es probablemente la más probable. Es posible que no desee cambiar sus cuentas raíz vi a vim de forma permanente, ya que si sus recursos son bajos vi, casi siempre garantiza que funcione, no estoy tan seguro de vim.

Probablemente estés usando (color)

/usr/bin/vim 

bajo su usuario normal y

/bin/vi

bajo sudo o root. Puede verificar usando:

which vi

una vez debajo de su usuario normal y la otra a través de sudo

sudo which vi

Hacer un

man which 

si necesitas mas detalles

usuario63673
fuente
No cambié la cuenta raíz para usar vim, pero solo sabía lo que mostraba que vi tenía un alias de vim cuando mi usuario me dice que use sudo vim <file> en lugar de sudo vi <file>
Scott Lundgren
17

En un sistema RHEL, /bin/vies típicamente una versión mínima de vim, sin ningún soporte de resaltado de sintaxis. /usr/bin/vimes el editor con todas las funciones. Es muy probable que en su entorno de usuario, visea ​​un alias para vim. Prueba esto:

sudo vim /some/file

¿Obtiene resaltado de sintaxis ahora?

larsks
fuente
¡Sí! y parece que la respuesta de sinping fue la que necesitaba para obtener el comportamiento que quería
Scott Lundgren
11

Su vies probablemente /bin/vide paquete vim-minimalque no soporta resaltado de sintaxis. sudo vilanza /bin/vipara ti.

Bash solo hace expansión de alias en la primera palabra en su línea de comando, así que en:

sudo vi

vino se sustituye vimincluso si tiene ese alias definido.

La solución es definir otro alias (para el usuario que invoca sudo):

alias sudo = 'sudo'

Tenga en cuenta el espacio después del segundo sudo.

Usando esto sudo, bash hará una expansión de alias para viin sudo vi. En la aliassección de Bash doc dice:

Si el último carácter del valor de alias está en blanco, entonces la siguiente palabra de comando que sigue al alias también se verifica para la expansión de alias.

Después de introducir el comando, puede pulsar Ctrl+ Alt+ Een bashver el resultado de expansión.

Créditos

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

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


Simplemente aliasing vien /root/.bashrcno funcionará.

También puede notarse que vino tiene alias para root en algunas distribuciones en /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

Cambiar esto tampoco resolverá el problema.

Monitor de pescado
fuente
Truco impresionante para tener alias con sudo!
Corey Henderson
Me encanta esto, simple y elegante !!! Esta es la respuesta correcta.
FilmJ
3

Por defecto en 5.4 vi es por defecto. Olvidé en qué versión comenzó. Esto agregará el alias necesario para ti:

cat <<_EOF >>/root/.bashrc

alias "vi"="/usr/bin/vim"
_EOF
sinping
fuente
2

descubrí que en mi versión de vim (instalar con sudo apt-get install vimdebian 7) el syntax oncomando se define por usuario en ~/.vimrc. sin embargo, de manera predeterminada, la instalación no creó un /root/.vimrcarchivo para sudo vicargar. así que simplemente copié ~/.vimrcen el /root/directorio y esto hizo el truco:sudo cp ~/.vimrc /root/

Mulllhausen
fuente
1

Esto se debe a que su usuario root no tiene el archivo de configuración vim. así que simplemente copie su archivo de configuración vim de usuario estándar en el directorio raíz.

sudo cp -r ~/.vi* /root/ algo como eso.

nb: compruebe si el archivo no corresponde al ~/vi*que no es para vim.

Léo Derbois
fuente
0

1) Verifique si realmente está usando vim y no vi (que desafortunadamente es el predeterminado por lo general en sistemas instalados recientemente)

2) Verifique que /etc/vim/vimrctenga la líneasyntax on

3) No todos los tipos de archivos tienen información de resaltado de sintaxis disponible de forma predeterminada ...

tsg
fuente
No había / etc / vim / vimrc, pero / etc / vimrc tenía resaltado de sintaxis de manera predeterminada: if & t_Co> 2 || tiene sintaxis ("gui_running") en el set hlsearch endif
Scott Lundgren
-1

Para aquellos que todavía buscan ayuda, pruebe estos comandos.

  • sudovi = which sudo vi
  • usrvi = which vi
  • Si estas dos ubicaciones son iguales, entonces no continúe.

De otra manera...

  • mv $sudovi $sudovi.save
  • ln -s $usrvi $sudovi (enlace simbólico)
Keenan Thompson
fuente