Dlaczego nie mam podświetlania składni, gdy sudo vi <nazwa pliku>?

27

Nie rozumiem, jak zezwolić na wyróżnianie składni w plikach edytowanych przez vi podczas korzystania z sudo. Kiedy ja sudo vi <filename>terminal jest tylko czarno-biały z ustawieniami mojego terminalu. W vi, jeśli wejdę, :syntax onnic się nie zmieni.

Kiedy vi <filename>cała składnia jest odpowiednio pokolorowana. Za pomocą RHEL 5.4, odpowiednia env:

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
źródło
3
vinie obsługuje koloru, więc wszystko, co pokazuje kolor, działa vimlub jest podobne.
Chris S

Odpowiedzi:

26

Odpowiedź Larka jest prawdopodobnie najbardziej prawdopodobna. Możesz nie chcieć zmieniać konta root vi na stałe vim, ponieważ jeśli twoje zasoby są niskie vi prawie zawsze gwarantuje, że zawsze będzie działać, nie jestem pewien co do vim.

Prawdopodobnie używasz (kolor)

/usr/bin/vim 

pod twoim normalnym użytkownikiem i

/bin/vi

pod sudo lub rootem. Możesz to sprawdzić za pomocą:

which vi

raz pod twoim normalnym użytkownikiem, a drugi przez sudo

sudo which vi

Zrób

man which 

jeśli potrzebujesz więcej szczegółów

użytkownik63673
źródło
Nie zmieniłem konta roota, aby korzystać z vima, ale tylko wiedząc, że to pokazuje, że vi został aliasowany do vima, ponieważ mój użytkownik mówi mi, żebym używał sudo vim <plik> zamiast sudo vi <plik>
Scott Lundgren
17

W systemie RHEL /bin/vijest zazwyczaj minimalną wersją vimbez obsługi wyróżniania składni. /usr/bin/vimjest w pełni funkcjonalnym edytorem. Jest bardzo prawdopodobne, że w środowisku użytkownika vijest to alias vim. Spróbuj tego:

sudo vim /some/file

Czy widzisz teraz podświetlanie składni?

Larsks
źródło
Tak! i wydaje się, że odpowiedź grzesznika była tym, którego potrzebowałem, aby uzyskać pożądane zachowanie
Scott Lundgren
11

Twój viprawdopodobnie pochodzi /bin/viz pakietu, vim-minimalktóry nie obsługuje podświetlania składni. sudo viuruchamia się /bin/vidla Ciebie.

Bash rozwija alias tylko dla pierwszego słowa w linii poleceń, więc w:

sudo vi

vinie jest zastępowane, vimnawet jeśli masz zdefiniowany ten alias.

Rozwiązaniem jest zdefiniowanie innego aliasu (dla wywołującego użytkownika sudo):

alias sudo = 'sudo'

Zwróć uwagę na spację po drugim sudo.

Korzystając z tego sudo, bash wykona rozszerzenie aliasu dla viin sudo vi. W aliasczęści dokumentu Bash napisano:

Jeśli ostatni znak wartości aliasu jest pusty, to następne słowo polecenia następujące po aliasie jest również sprawdzane pod kątem rozszerzenia aliasu.

Po wprowadzeniu polecenia możesz nacisnąć Ctrl+ Alt+ Ew, bashaby zobaczyć wynik rozwinięcia.

Kredyty:

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

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


Wystarczy aliasing viw /root/.bashrcnie zadziała.

Można również zauważyć, że vinie jest aliasowany dla roota w niektórych dystrybucjach w /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

Zmiana tego również nie rozwiąże problemu.

Monitor ryb
źródło
Niesamowita sztuczka, aby mieć aliasy z sudo!
Corey Henderson
Uwielbiam to - proste i eleganckie !!! To jest poprawna odpowiedź.
FilmJ
3

Domyślnie w 5.4 vi jest domyślnie. Zapomniałem, która wersja się rozpoczęła. Spowoduje to dodanie niezbędnego aliasu:

cat <<_EOF >>/root/.bashrc

alias "vi"="/usr/bin/vim"
_EOF
grzeszący
źródło
2

odkryłem, że w mojej wersji vima (instalacja z sudo apt-get install vimdebianem 7) syntax onpolecenie jest zdefiniowane dla poszczególnych użytkowników w ~/.vimrc. jednak domyślnie instalacja nie utworzyła /root/.vimrcpliku sudo vido załadowania. więc właśnie skopiowałem ~/.vimrcdo katalogu /root/i to załatwiło sprawę:sudo cp ~/.vimrc /root/

Mulllhausen
źródło
1

Wynika to z faktu, że użytkownik root nie ma pliku konfiguracyjnego vim. więc po prostu skopiuj standardowy plik konfiguracyjny vim użytkownika do katalogu głównego.

sudo cp -r ~/.vi* /root/ coś w tym stylu.

Uwaga: sprawdź, czy nie masz pliku odpowiadającego, ~/vi*który nie jest dla Vima.

Léo Derbois
źródło
0

1) Sprawdź, czy naprawdę używasz vima, a nie vi (co niestety często jest domyślne w świeżo zainstalowanych systemach)

2) Sprawdź, czy masz /etc/vim/vimrclinięsyntax on

3) Nie wszystkie rodzaje plików mają domyślnie dostępne informacje o podświetlaniu składni ....

tsg
źródło
Nie było / etc / vim / vimrc, ale / etc / vimrc miał domyślnie podświetlanie składni: if & t_Co> 2 || ma składnię („gui_running”) na zestawie hlsearch endif
Scott Lundgren
-1

Dla tych, którzy nadal szukają pomocy, wypróbuj te polecenia.

  • sudovi = which sudo vi
  • usrvi = which vi
  • Jeśli te dwie lokalizacje są takie same, nie kontynuuj.

Inaczej...

  • mv $sudovi $sudovi.save
  • ln -s $usrvi $sudovi (link symboliczny)
Keenan Thompson
źródło