Почему у меня нет подсветки синтаксиса, когда я sudo vi <имя файла>?

Я не понимаю, как разрешить подсветку синтаксиса в файлах, которые я редактирую через vi при использовании sudo. Когда я sudo vi <filename> терминал только черно-белый из моих настроек терминала. В vi если я вхожу :syntax on ничего не меняется.

Когда я vi <filename> весь синтаксис правильно раскрашен. Используя RHEL 5.4, соответствующие 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

8 ответов

Решение

Ответ жаворонка, вероятно, наиболее вероятен. Возможно, вы не захотите постоянно менять свои корневые учетные записи vi на vim, так как если у вас мало ресурсов, vi почти гарантированно будет работать всегда, я не уверен в vim.

Вы, вероятно, используете (цвет)

/usr/bin/vim 

под вашим обычным пользователем и

/bin/vi

под sudo или root. Вы можете проверить, используя:

which vi

один раз под обычным пользователем, а другой через sudo

sudo which vi

Сделать

man which 

если вам нужно больше деталей

В системе RHEL, /bin/vi как правило, минимальная версия vim, без какой-либо поддержки подсветки синтаксиса. /usr/bin/vim это полнофункциональный редактор. Весьма вероятно, что в вашей пользовательской среде vi это псевдоним для vim, Попробуй это:

sudo vim /some/file

Вы получаете подсветку синтаксиса сейчас?

Ваш vi возможно /bin/vi из пакета vim-minimal который не поддерживает подсветку синтаксиса. sudo vi катера /bin/vi для тебя.

Bash выполняет расширение псевдонима только для первого слова в командной строке, поэтому:

sudo vi

vi не заменяется vim даже если у вас есть этот псевдоним.

Решение состоит в том, чтобы определить другой псевдоним (для пользователя, вызывающего sudo):

псевдоним sudo='sudo '

Обратите внимание на пробел после второго sudo,

Используя это sudoBash сделает расширение псевдонима для vi в sudo vi, в alias В разделе Bash Doc написано:

Если последний символ значения псевдонима является пустым, то следующее слово команды, следующее за псевдонимом, также проверяется на расширение псевдонима.

После ввода вашей команды, вы можете нажать Ctrl+Alt+E в bash чтобы увидеть результат расширения.

Кредиты:

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

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


Просто псевдоним vi в /root/.bashrc не будет работать.

Также можно отметить, что vi в некоторых дистрибутивах нет псевдонима для root в /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

Изменение этого также не решит проблему.

По умолчанию в 5.4 vi по умолчанию. Я забыл, с какой версии это началось. Это добавит вам необходимый псевдоним:

cat <<_EOF >>/root/.bashrc

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

Я обнаружил, что в моей версии VIM (установить с sudo apt-get install vim на Debian 7) syntax on Команда определяется для каждого пользователя в ~/.vimrc, однако по умолчанию установка не создала /root/.vimrc файл для sudo viзагрузить. так что я просто скопировал ~/.vimrc в /root/ Дир, и это сделал трюк: sudo cp ~/.vimrc /root/

Это потому, что у вашего пользователя root нет файла конфигурации vim. так что просто скопируйте ваш стандартный файл конфигурации vim пользователя в корневой каталог.

sudo cp -r ~/.vi* /root/ что-то вроде того.

NB: проверьте, если у вас нет файла, соответствуют ~/vi*что не для VIM.

1) Проверьте, действительно ли вы используете vim, а не vi (который, к сожалению, часто используется по умолчанию на новых установленных системах)

2) Проверьте, что ваш /etc/vim/vimrc имеет линию syntax on

3) Не все виды файлов имеют информацию о подсветке синтаксиса, доступную по умолчанию....

Для тех, кто все еще ищет помощь, попробуйте эти команды.

  • sudovi = which sudo vi
  • usrvi = which vi
  • Если эти два местоположения совпадают, не продолжайте.

В противном случае...

  • mv $sudovi $sudovi.save
  • ln -s $usrvi $sudovi (символическая ссылка)
Другие вопросы по тегам