Назад | Перейти на главную страницу

Why do I not have syntax highlighting when I sudo vi <filename>?</filename>

Я не понимаю, как разрешить подсветку синтаксиса в файлах, которые я редактирую через 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

Ответ жаворонков, вероятно, наиболее вероятен. Возможно, вы не захотите постоянно менять свои корневые учетные записи 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.

Используя это sudo, bash расширит псевдоним для 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/ dir, и это помогло: sudo cp ~/.vimrc /root/

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 (символическая ссылка)