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

27

Я не понимаю, как разрешить подсветку синтаксиса в файлах, которые я редактирую через 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
Скотт Лундгрен
источник
3
viне поддерживает цвет, поэтому все, что показывает цвет, работает vimили похоже.
Крис С

Ответы:

26

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

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

/usr/bin/vim 

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

/bin/vi

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

which vi

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

sudo which vi

Сделать

man which 

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

user63673
источник
Я не изменил учетную запись root, чтобы использовать vim, но просто знал, что это означает, что vi связывается с vim, поскольку мой пользователь говорит мне использовать sudo vim <file> вместо sudo vi <file>
Скотт Лундгрен,
17

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

sudo vim /some/file

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

larsks
источник
Да! и, похоже, ответ Синпина был тем, который мне нужен, чтобы получить желаемое поведение
Скотт Лундгрен
11

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

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

sudo vi

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

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

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

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

Используя это sudo, bash сделает расширение псевдонима для viin 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

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

Fish Monitor
источник
Удивительный трюк иметь псевдонимы с sudo!
Кори Хендерсон
Люблю это - просто и элегантно !!! Это правильный ответ.
FilmJ
3

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

cat <<_EOF >>/root/.bashrc

alias "vi"="/usr/bin/vim"
_EOF
sinping
источник
2

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

mulllhausen
источник
1

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

sudo cp -r ~/.vi* /root/ что-то такое.

nb: проверьте, нет ли у вас файла, который соответствует ~/vi*не для vim.

Лео Дербуа
источник
0

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

2) Проверьте, что у вас /etc/vim/vimrcесть линияsyntax on

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

отсчет по радионавигационной системе, полученный при использовании пространственной волны от ведущей станции и поверхностной волны от ведомой станции
источник
Не было / etc / vim / vimrc, но по умолчанию в / etc / vimrc была подсветка синтаксиса: if & t_Co> 2 || имеет ("gui_running") синтаксис для set hlsearch endif
Скотт Лундгрен
-1

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

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

Иначе...

  • mv $sudovi $sudovi.save
  • ln -s $usrvi $sudovi (символическая ссылка)
Кинэн Томпсон
источник