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/