Soluzione 1:
La risposta di Larks è probabilmente la più probabile. Potresti non voler cambiare i tuoi account root da vi a vim in modo permanente poiché se le tue risorse sono basse è quasi garantito che vi funzioni sempre, non sono così sicuro di vim.
Probabilmente stai usando (color)
/usr/bin/vim
sotto il tuo utente normale e
/bin/vi
sotto sudo o root. Puoi controllare usando:
which vi
una volta sotto il tuo utente normale e l'altra tramite sudo
sudo which vi
Fai un
man which
se hai bisogno di maggiori dettagli
Soluzione 2:
Su un sistema RHEL, /bin/vi
è tipicamente una versione minima di vim
, senza alcun supporto per l'evidenziazione della sintassi. /usr/bin/vim
è l'editor completo. È molto probabile che nel tuo ambiente utente, vi
è un alias per vim
. Prova questo:
sudo vim /some/file
Ottieni l'evidenziazione della sintassi adesso?
Soluzione 3:
Il tuo vi
è probabilmente /bin/vi
dal pacchetto vim-minimal
che non supporta l'evidenziazione della sintassi. sudo vi
avvia /bin/vi
per te.
Bash esegue l'espansione degli alias solo sulla prima parola nella riga di comando, quindi in:
sudo vi
vi
non è sostituito da vim
anche se hai definito quell'alias.
La soluzione è definire un altro alias (per l'utente che invoca sudo
):
alias sudo='sudo '
Nota lo spazio dopo il secondo sudo
.
Usando questo sudo
, bash eseguirà l'espansione dell'alias per vi
in sudo vi
. Nel alias
sezione del documento Bash dice:
Se l'ultimo carattere del valore dell'alias è uno spazio vuoto, anche la parola di comando successiva che segue l'alias viene verificata per l'espansione dell'alias.
Dopo aver inserito il tuo comando, puoi premere Ctrl +Alt +E in bash
per vedere il risultato dell'espansione.
Riconoscimenti:
https://bbs.archlinux.org/viewtopic.php?id=36796
http://www.shellperson.net/using-sudo-with-an-alias
Semplicemente aliasando vi
in /root/.bashrc
non funzionerà.
Si può anche notare che vi
non è aliasato per root su alcune distribuzioni in /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
Anche la modifica di questo non risolverà il problema.
Soluzione 4:
Per impostazione predefinita in 5.4 vi è l'impostazione predefinita. Non ricordo quale versione è stata avviata. Questo aggiungerà l'alias necessario per te:
cat <<_EOF >>/root/.bashrc
alias "vi"="/usr/bin/vim"
_EOF
Soluzione 5:
ho scoperto che nella mia versione di vim (install with sudo apt-get install vim
su debian 7) il syntax on
Il comando è definito in base all'utente in ~/.vimrc
. tuttavia, per impostazione predefinita, l'installazione non ha creato un /root/.vimrc
file per sudo vi
caricare. quindi ho appena copiato ~/.vimrc
nel /root/
dir e questo ha funzionato:sudo cp ~/.vimrc /root/