GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum habe ich keine Syntaxhervorhebung, wenn ich sudo vi <Dateiname> drücke?

Lösung 1:

Larks Antwort ist wahrscheinlich die wahrscheinlichste. Vielleicht möchten Sie Ihre Root-Konten nicht dauerhaft von vi zu vim ändern, da Ihre Ressourcen niedrig sind. vi funktioniert fast garantiert immer, bei vim bin ich mir nicht so sicher.

Sie verwenden wahrscheinlich (Farbe)

/usr/bin/vim 

unter Ihrem normalen Benutzer und

/bin/vi

unter sudo oder root. Sie können dies überprüfen, indem Sie Folgendes verwenden:

which vi

einmal unter Ihrem normalen Benutzer und das andere über sudo

sudo which vi

Mach ein

man which 

wenn Sie weitere Details benötigen

Lösung 2:

Auf einem RHEL-System /bin/vi ist normalerweise eine minimale Version von vim , ohne Syntaxhervorhebungsunterstützung. /usr/bin/vim ist der voll funktionsfähige Editor. Es ist sehr wahrscheinlich, dass in Ihrer Benutzerumgebung vi ist ein Alias ​​für vim . Versuchen Sie Folgendes:

sudo vim /some/file

Bekommst du jetzt Syntax-Highlighting?

Lösung 3:

Ihr vi ist wahrscheinlich /bin/vi aus Paket vim-minimal die keine Syntaxhervorhebung unterstützt. sudo vi startet /bin/vi für dich.

Bash führt die Alias-Erweiterung nur beim ersten Wort in Ihrer Befehlszeile durch, also in:

sudo vi

vi wird nicht durch vim ersetzt auch wenn Sie diesen Alias ​​definiert haben.

Die Lösung wird ein weiterer Alias ​​definiert (für den Benutzer, der sudo aufruft ):

alias sudo='sudo '

Beachten Sie das Leerzeichen nach dem zweiten sudo .

Verwenden Sie diesen sudo , führt bash eine Aliaserweiterung für vi durch in sudo vi . Im alias Abschnitt des Bash-Dokuments heißt es:

Wenn das letzte Zeichen des Alias-Wertes ein Leerzeichen ist, dann wird auch das nextcommand-Wort nach dem Alias ​​auf Alias-Expansion geprüft.

Nachdem Sie Ihren Befehl eingegeben haben, können Sie Strg drücken +Alt +E in bash um das Ergebnis der Erweiterung zu sehen.

Danksagungen:

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

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

Aliasing einfach vi in /root/.bashrc wird nicht funktionieren.

Es kann auch darauf hingewiesen werden, dass vi wird auf einigen Distributionen in /etc/profile.d/vim.sh nicht als Root bezeichnet:

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

Auch eine Änderung wird das Problem nicht lösen.

Lösung 4:

Standardmäßig in 5.4 ist vi default. Ich habe vergessen, in welcher Version das gestartet wurde. Dies fügt den erforderlichen Alias ​​für Sie hinzu:

cat <<_EOF >>/root/.bashrc

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

Lösung 5:

Ich habe das in meiner Version von vim gefunden (mit sudo apt-get install vim installieren auf debian 7) der syntax on Der Befehl wird auf Benutzerbasis in ~/.vimrc definiert . jedoch hat die Installation standardmäßig keinen /root/.vimrc erstellt Datei für sudo vi Laden. also habe ich einfach ~/.vimrc kopiert in den /root/ dir und das hat es geschafft:sudo cp ~/.vimrc /root/


Linux
  1. Warum wird der Befehl sudo:bundle nicht gefunden?

  2. Befehl bei Verwendung von sudo nicht gefunden

  3. Warum zeigt mein System nur 3,2 GiB RAM an, wenn ich definitiv 4,0 GiB habe

  4. Warum funktioniert USB unter Linux nicht, wenn es unter UEFI/BIOS funktioniert?

  5. Warum nicht ICMP blockieren?

Warum wird Sigint nicht an den untergeordneten Prozess weitergegeben, wenn er an den übergeordneten Prozess gesendet wird?

Warum ignoriert Sudo Aliasse?

.bash_profile nicht bezogen, wenn Su ausgeführt wird?

Linux – Warum funktioniert USB nicht in Linux, wenn es in Uefi/Bios funktioniert?

Aktivieren Sie die Syntaxhervorhebung in Vim

Linux-Befehl gefunden, aber bei Verwendung von sudo nicht gefunden