Warum wird die Syntax nicht hervorgehoben, wenn ich sudo vi <Dateiname> verwende?

27

Ich verstehe nicht, wie ich Syntax-Hervorhebungen in Dateien zulassen kann, die ich mit sudo über vi bearbeite . Bei mir ist sudo vi <filename>das Terminal nur schwarzweiß von meinen Terminaleinstellungen. In vi :syntax onändert sich nichts, wenn ich etwas eingebe.

Wenn ich vi <filename>alle Syntax richtig gefärbt ist. Unter RHEL 5.4, relevante Umgebung:

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
Scott Lundgren
quelle
3
viunterstützt keine Farben, daher läuft alles, was Farbe anzeigt, vimoder ähnliches.
Chris S

Antworten:

26

Die Antwort von Larks ist wahrscheinlich die wahrscheinlichste. Möglicherweise möchten Sie Ihre Root-Konten vi nicht dauerhaft in vim ändern, da die Funktionsfähigkeit Ihrer Ressourcen fast immer gewährleistet ist. Bei vim bin ich mir nicht sicher.

Sie verwenden wahrscheinlich (Farbe)

/usr/bin/vim 

unter Ihrem normalen Benutzer und

/bin/vi

unter sudo oder root. Sie können Folgendes überprüfen:

which vi

einmal unter deinem normalen benutzer und das andere über sudo

sudo which vi

Mach ein

man which 

Wenn Sie weitere Informationen benötigen

user63673
quelle
Ich habe das Root-Konto nicht auf vim geändert, sondern nur gewusst, dass vi auf vim ausgerichtet ist, da mein Benutzer mir mitteilt, dass ich sudo vim <file> anstelle von sudo vi <file> verwenden soll
Scott Lundgren
17

Auf einem RHEL-System /bin/vihandelt es sich normalerweise um eine Minimalversion vimohne Unterstützung für Syntaxhervorhebungen. /usr/bin/vimist der voll funktionsfähige Editor. Es ist sehr wahrscheinlich, dass in Ihrer Benutzerumgebung viein Alias ​​für vim. Versuche dies:

sudo vim /some/file

Bekommen Sie jetzt Syntax-Hervorhebung?

larsks
quelle
Ja! und es scheint, dass Sinpings Antwort die war, die ich brauchte, um das Verhalten zu erreichen, das ich wollte
Scott Lundgren
11

Sie stammen viwahrscheinlich /bin/viaus einem Paket, vim-minimaldas keine Syntaxhervorhebung unterstützt. sudo vistartet /bin/vifür Sie.

Bash erweitert nur das erste Wort in Ihrer Befehlszeile um einen Alias.

sudo vi

viwird auch dann nicht ersetzt, vimwenn Sie diesen Alias ​​definiert haben.

Die Lösung besteht darin, einen anderen Alias ​​(für den aufrufenden Benutzer sudo) zu definieren:

alias sudo = 'sudo'

Beachten Sie das Leerzeichen nach dem zweiten sudo.

Mit diesem sudoBefehl führt bash eine Alias-Erweiterung für viin durch sudo vi. In der aliasSektion von Bash doc heißt es:

Wenn das letzte Zeichen des Alias-Werts leer ist, wird auch das nächste Befehlswort nach dem Alias ​​auf Alias-Erweiterung überprüft.

Nachdem Sie Ihren Befehl eingeben, können Sie drücken Ctrl+ Alt+ Ein bashden Ausbau Ergebnis zu sehen.

Credits:

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

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


Aliasing einfach viin /root/.bashrcnicht funktionieren.

Es kann auch angemerkt werden, dass viin einigen Distributionen in /etc/profile.d/vim.sh kein Alias ​​für root vorliegt:

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

Wenn Sie dies ändern, wird das Problem ebenfalls nicht behoben.

Fisch Monitor
quelle
Toller Trick, um Aliase mit sudo zu haben!
Corey Henderson
Liebe das - einfach und elegant !!! Dies ist die richtige Antwort.
FilmJ
3

Standardmäßig ist in 5.4 vi Standard. Ich vergesse, in welcher Version das gestartet wurde. Dadurch wird der erforderliche Alias ​​für Sie hinzugefügt:

cat <<_EOF >>/root/.bashrc

alias "vi"="/usr/bin/vim"
_EOF
Sinping
quelle
2

ich habe festgestellt, dass in meiner version von vim (install with sudo apt-get install vimon debian 7) der syntax onbefehl auf benutzerbasis in definiert ist ~/.vimrc. Die Installation hat jedoch standardmäßig keine /root/.vimrcDatei sudo vizum Laden erstellt. Also habe ich einfach ~/.vimrcin das /root/Verzeichnis kopiert und das hat den Trick gemacht:sudo cp ~/.vimrc /root/

mulllhausen
quelle
1

Dies liegt daran, dass Ihr Root-Benutzer keine vim-Konfigurationsdatei hat. Kopieren Sie einfach Ihre Standard-Benutzer-VIM-Konfigurationsdatei in das Stammverzeichnis.

sudo cp -r ~/.vi* /root/ sowas in der Art.

nb: überprüfe, ob du keine datei hast, ~/vi*die nicht für vim ist.

Léo Derbois
quelle
0

1) Überprüfe, ob du wirklich vim und nicht vi verwendest (was leider häufig bei frisch installierten Systemen der Fall ist)

2) Vergewissern Sie sich, dass Sie /etc/vim/vimrcdie Leitung habensyntax on

3) Nicht für alle Arten von Dateien sind standardmäßig Informationen zur Syntaxhervorhebung verfügbar ....

Tsg
quelle
Es gab keine / etc / vim / vimrc, aber / etc / vimrc hatte standardmäßig eine Syntaxhervorhebung: if & t_Co> 2 || hat ("gui_running") Syntax am Set hlsearch endif
Scott Lundgren
-1

Probieren Sie diese Befehle aus, wenn Sie noch Hilfe suchen.

  • sudovi = which sudo vi
  • usrvi = which vi
  • Wenn diese beiden Positionen identisch sind, fahren Sie nicht fort.

Andernfalls...

  • mv $sudovi $sudovi.save
  • ln -s $usrvi $sudovi (symbolischer Link)
Keenan Thompson
quelle