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


27

Non capisco come consentire l'evidenziazione della sintassi nei file che sto modificando tramite vi quando si usa sudo. Quando ho sudo vi <filename>il terminale è solo in bianco e nero delle mie impostazioni del terminale. In vi se inserisco :syntax onnulla cambia.

Quando ho vi <filename>tutta la sintassi è correttamente colorata. Utilizzando RHEL 5.4, ambiente pertinente:

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

3
vinon supporta il colore, quindi tutto ciò che mostra il colore è in esecuzione vimo simile.
Chris S,

Risposte:


26

La risposta di Larks è probabilmente la più probabile. Potresti non voler cambiare i tuoi account di root vi in ​​modo permanente come se le tue risorse fossero scarse vi è quasi garantito che funzioni sempre, non sono così sicuro di vim.

Probabilmente stai utilizzando (colore)

/usr/bin/vim 

sotto il tuo normale utente e

/bin/vi

sotto sudo o root. Puoi verificare usando:

which vi

una volta sotto il tuo normale utente e l'altro via sudo

sudo which vi

Fare un

man which 

se hai bisogno di maggiori dettagli


Non ho cambiato l'account di root per usare vim ma sapevo solo ciò che mostrava che vi era alias di vim mentre il mio utente mi diceva di usare sudo vim <file> invece di sudo vi <file>
Scott Lundgren

17

Su un sistema RHEL, in /bin/vigenere è una versione minima di vim, senza supporto per l'evidenziazione della sintassi. /usr/bin/vimè l'editor completo. È molto probabile che nel tuo ambiente utente visia un alias per vim. Prova questo:

sudo vim /some/file

Ora ricevi l'evidenziazione della sintassi?


Sì! e sembra che la risposta di Sinping sia stata quella di cui avevo bisogno per ottenere il comportamento che volevo
Scott Lundgren,

11

Il vostro viè probabilmente /bin/vidalla confezione vim-minimalche non supporta l'evidenziazione della sintassi. sudo vilancia /bin/viper te.

Bash esegue solo l'espansione dell'alias sulla prima parola nella riga di comando, quindi in:

sudo vi

vinon viene sostituito vimanche se è stato definito tale 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 farà l'espansione dell'alias per viin sudo vi. Nella aliassezione di Bash doc si dice:

Se l'ultimo carattere del valore alias è vuoto, anche la parola di comando successiva che segue l'alias viene verificata per l'espansione dell'alias.

Dopo aver inserito il comando, puoi premere Ctrl+ Alt+ Ein bashper vedere il risultato dell'espansione.

Crediti:

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

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


Semplicemente aliasing viin /root/.bashrcnon funzionerà.

Si può anche notare che vinon è alias per root su alcune distro 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

La modifica di questo non risolverà il problema.


Fantastico trucco per avere alias con sudo!
Corey Henderson,

Adoro questo - semplice ed elegante !!! Questa è la risposta corretta.
FilmJ,

3

Di default in 5.4 vi è l'impostazione predefinita. Ho dimenticato quale versione è iniziata. Questo aggiungerà l'alias necessario per te:

cat <<_EOF >>/root/.bashrc

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

2

ho scoperto che nella mia versione di vim (installa con sudo apt-get install vimsu debian 7) il syntax oncomando è definito in base all'utente per ~/.vimrc. tuttavia, per impostazione predefinita, l'installazione non ha creato un /root/.vimrcfile sudo vida caricare. quindi ho appena copiato ~/.vimrcnella /root/directory e questo ha funzionato:sudo cp ~/.vimrc /root/


1

Questo perché l'utente root non ha un file di configurazione vim. quindi basta copiare il file di configurazione vim dell'utente standard nella directory principale.

sudo cp -r ~/.vi* /root/ qualcosa del genere.

nb: controlla se il file non corrisponde a quello ~/vi*che non è per vim.


0

1) Controlla se stai davvero usando vim e non vi (che sfortunatamente è di default spesso su nuovi sistemi installati)

2) Verifica di /etc/vim/vimrcavere la lineasyntax on

3) Non tutti i tipi di file hanno informazioni di evidenziazione della sintassi disponibili per impostazione predefinita ....


Non esisteva / etc / vim / vimrc, ma / etc / vimrc aveva l'evidenziazione della sintassi per impostazione predefinita: if & t_Co> 2 || ha la sintassi ("gui_running") sul set hlsearch endif
Scott Lundgren,

-1

Per chi cerca ancora aiuto, prova questi comandi.

  • sudovi = which sudo vi
  • usrvi = which vi
  • Se queste due posizioni sono uguali, non continuare.

Altrimenti...

  • mv $sudovi $sudovi.save
  • ln -s $usrvi $sudovi (link simbolico)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.