GNU/Linux >> Znalost Linux >  >> Linux

Proč nemám zvýraznění syntaxe při sudo vi <název souboru>?

Řešení 1:

Larksova odpověď je pravděpodobně nejpravděpodobnější. Možná nebudete chtít změnit své root účty vi na vim trvale, protože pokud jsou vaše zdroje nízké, vi je téměř zaručeno, že vždy budou fungovat, nejsem si tak jistý vim.

Pravděpodobně používáte (barva)

/usr/bin/vim 

pod vaším normálním uživatelem a

/bin/vi

pod sudo nebo root. Můžete to zkontrolovat pomocí:

which vi

jednou pod vaším běžným uživatelem a podruhé přes sudo

sudo which vi

Proveďte

man which 

pokud potřebujete další podrobnosti

Řešení 2:

V systému RHEL /bin/vi je obvykle minimální verze vim bez podpory zvýrazňování syntaxe. /usr/bin/vim je plně vybavený editor. Je velmi pravděpodobné, že ve vašem uživatelském prostředí vi je alias pro vim . Zkuste toto:

sudo vim /some/file

Dostáváte nyní zvýraznění syntaxe?

Řešení 3:

Vaše vi je pravděpodobně /bin/vi z balíčku vim-minimal který nepodporuje zvýraznění syntaxe. sudo vi spustí /bin/vi pro vás.

Bash pouze rozbalí alias na prvním slově v příkazovém řádku, takže v:

sudo vi

vi není nahrazeno vim i když máte tento alias definovaný.

Řešení je definován jiný alias (pro uživatele volajícího sudo ):

alias sudo='sudo '

Všimněte si mezery za druhým sudo .

Pomocí tohoto sudo , bash provede rozšíření aliasu pro vi v sudo vi . V alias část dokumentu Bash říká:

Pokud je poslední znak hodnoty aliasu prázdný, pak se zkontroluje rozšíření aliasu i slovo nextcommand následující za aliasem.

Po zadání příkazu můžete stisknout Ctrl +Alt +E v bash zobrazíte výsledek rozšíření.

Kredity:

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

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

Jednoduchý aliasing vi v /root/.bashrc nebude fungovat.

Lze také poznamenat, že vi nemá alias pro root v některých distribucích v /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

Změna tohoto problém také nevyřeší.

Řešení 4:

Ve výchozím nastavení v 5.4 vi je výchozí. Zapomněl jsem, ve které verzi to začalo. Tím se přidá potřebný alias:

cat <<_EOF >>/root/.bashrc

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

Řešení 5:

Našel jsem to v mé verzi vim (instalace s sudo apt-get install vim v debianu 7) syntax on příkaz je definován pro jednotlivé uživatele v ~/.vimrc . ve výchozím nastavení však instalace nevytvořila /root/.vimrc soubor pro sudo vi naložit. tak jsem právě zkopíroval ~/.vimrc do /root/ dir a tohle se povedlo:sudo cp ~/.vimrc /root/


Linux
  1. Proč nebyl příkaz sudo:bundle nalezen?

  2. Proč USB nefunguje v Linuxu, když funguje v UEFI/BIOS?

  3. Proč mají Linux/POSIX lchown, ale ne lchmod?

  1. Proč Sudo ignoruje aliasy?

  2. Linux – Proč USB nefunguje v Linuxu, když funguje v Uefi/bios?

  3. Proč neblokovat ICMP?

  1. Sudo:Nocorrect:Příkaz nenalezen?

  2. sudo:příkaz nenalezen

  3. Přidat uživatele do skupiny, ale neprojeví se při spuštění id