GNU/Linux >> Tutoriales Linux >  >> Linux

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

Solución 1:

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, casi se garantiza que vi funcione siempre, no estoy tan seguro acerca 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 bajo su usuario normal y la otra vía sudo

sudo which vi

Haz un

man which 

si necesita más detalles

Solución 2:

En un sistema RHEL, /bin/vi suele ser una versión mínima de vim , sin ningún soporte de resaltado de sintaxis. /usr/bin/vim es el editor completo. Es muy probable que en tu entorno de usuario, vi es un alias para vim . Prueba esto:

sudo vim /some/file

¿Obtienes resaltado de sintaxis ahora?

Solución 3:

Tu vi es probablemente /bin/vi del paquete vim-minimal que no admite el resaltado de sintaxis. sudo vi lanza /bin/vi para ti.

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

sudo vi

vi no se sustituye por vim incluso si tiene definido ese alias.

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 este sudo , bash hará una expansión de alias para vi en sudo vi . En el alias sección de Bash doc dice:

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

Después de ingresar su comando, puede presionar Ctrl +Alt +E en bash para ver el resultado de la expansión.

Créditos:

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

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

Simplemente alias vi en /root/.bashrc no funcionará.

También se puede señalar que vi no 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.

Solución 4:

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

cat <<_EOF >>/root/.bashrc

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

Solución 5:

encontré eso en mi versión de vim (instalar con sudo apt-get install vim en debian 7) el syntax on El comando se define por usuario en ~/.vimrc . sin embargo, de forma predeterminada, la instalación no creó un /root/.vimrc archivo para sudo vi cargar. así que copié ~/.vimrc en el /root/ dir y esto hizo el truco:sudo cp ~/.vimrc /root/


Linux
  1. ¿Por qué Signint no se propaga al proceso secundario cuando se envía a su proceso principal?

  2. ¿Por qué Sudo ignora los alias?

  3. .bash_profile no se obtiene cuando se ejecuta Su?

  4. Linux:¿por qué el USB no funciona en Linux cuando funciona en Uefi/bios?

  5. Sudo:Nocorrect:¿Comando no encontrado?

Habilitar resaltado de sintaxis en Vim

¿Por qué no se encuentra el comando sudo:bundle?

comando no encontrado al usar sudo

¿Por qué USB no funciona en Linux cuando funciona en UEFI/BIOS?

¿Por qué Linux/POSIX tiene lchown pero no lchmod?

comando de linux encontrado pero no encontrado al usar sudo