Я пытался быть хорошим маленьким системным администратором и использовать sudoedit вместо sudo vim или sudo -i; vim при внесении изменений в файлы, принадлежащие корню (ex / etc / profile), но моя vim colorscheme не кажется, не отображаются правильно при использовании sudoedit.
Цветовая шкала загружается правильно (проверено с помощью: color). Я подтвердил, что он не тянет цветовую схему для root, поскольку проблема возникает при выполнении sudoedit от root, цвета разные, даже если он показывает ту же схему.
Использование:
Правки:
VIM запущен:
ubuntu@ip-10-0-0-104:~$ ps -f -u ubuntu
UID PID PPID C STIME TTY TIME CMD
ubuntu 4433 4345 0 19:18 ? 00:00:00 sshd: ubuntu@notty
ubuntu 6109 6021 0 20:47 ? 00:00:00 sshd: ubuntu@pts/0
ubuntu 6110 6109 0 20:47 pts/0 00:00:00 -bash
ubuntu 6233 6232 0 20:48 pts/0 00:00:00 /usr/bin/vim /var/tmp/profile.XXQiLoee
ubuntu 6322 6234 0 20:49 ? 00:00:00 sshd: ubuntu@pts/1
ubuntu 6323 6322 0 20:49 pts/1 00:00:00 -bash
ubuntu 6461 6323 0 20:50 pts/1 00:00:00 ps -f -u ubuntu
Вот пример того, о чем я говорю. (другие фонари не работают так же хорошо, но я подумал, что одной картинки будет достаточно)
Разница в ваших скриншотах связана с тем, что Vim использует разные filetype
для двух редактируемых файлов. Причиной этого, скорее всего, является имя временного файла, который sudoedit
создает при редактировании.
При сравнении различий в синтаксисе между двумя экземплярами Vim первое, что нужно искать, это переменная filetype
, которую Vim устанавливает автоматически. Вы можете проверить текущее значение filetype
, выполнив
:set filetype?
в Vim. Вы также можете обратиться к настройке как ft
для краткости. Vim должен показывать результат в строке состояния, например
filetype=sh
Vim имеет большой сценарий эвристики для автоматической установки filetype
на основе имени файла, а иногда и содержимого файла. Например, если имя файла /etc/profile
, Vim автоматически устанавливает для filetype
значение sh
.
Когда вы используете sudoedit
для редактирования /etc/profile
, создается временный файл, как показано в вашем списке ps
. Поскольку имя этого файла не соответствует ни одному из скриптовых правил Vim, он пытается установить filetype
на основе содержимого. Основываясь на скриншоте, я предполагаю, что Vim установил filetype
в conf
, что означает общий файл конфигурации.
Есть несколько способов справиться с этим. Во-первых, вы можете установить filetype
вручную каждый раз, когда редактируете файл. Чтобы принудительно использовать синтаксис sh
, выполните
:set filetype=sh
. Правила подсветки синтаксиса должны быть перезагружены и применены немедленно.
Другой способ - добавить подсказку к Vim в содержимом файлов, которые вы часто редактируете, для установки определенного filetype
. Например, если первой строкой файла является #!/bin/sh
, Vim будет использовать соответствующий синтаксис независимо от имени файла. Обратите внимание, что это делает /etc/profile
похожим на исполняемый скрипт оболочки, даже если это не так, поэтому вы можете или не хотите делать что-то подобное в вашей системе.
Третий способ - заставить Vim установить переменную filetype
, используя то, что Vim называет «modelines». См. :help modeline
для получения дополнительной информации. Это включает добавление комментария к вашему файлу, который содержит строку, которую Vim может анализировать для команд. Возвращаясь к вашему примеру с /etc/profile
, добавление комментария наподобие
# vim: set filetype=sh
будет указывать Vim правильно установить filetype
при редактировании файла независимо от его имени.
Если вы когда-либо всегда сталкивались с разными цветовыми режимами между разными идентификаторами пользователей, всегда сначала набирайте «which vi» и сначала посмотрите, с чем вы имеете дело. А затем посмотрите на ваш .vimrc, предполагая, что это vim. Если нет, убедитесь, что у вас есть это в вашем .bashrc
alias vi='vim'