GNU/Linux >> Linux Esercitazione >  >> Linux

Perché non ho l'evidenziazione della sintassi quando sudo vi <filename>?

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/


Linux
  1. Perché Cd non è un programma?

  2. Perché le variabili di percorso sono diverse durante l'esecuzione tramite Sudo e Su?

  3. Perché Sigint non viene propagato al processo figlio quando viene inviato al processo padre?

  4. Perché Nullglob non è predefinito?

  5. Linux – Perché Usb non funziona in Linux quando funziona in Uefi/bios?

.bash_profile non originato durante l'esecuzione di Su?

Abilita l'evidenziazione della sintassi in Vim

sudo:comando non trovato

Aggiungi utente al gruppo ma non riflesso quando esegui id

comando non trovato quando si utilizza sudo

Perché non bloccare l'ICMP?