Почему у меня нет подсветки синтаксиса, когда я 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
,
Используя это 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/
Дир, и это сделал трюк: 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
(символическая ссылка)