Я обычно устанавливаю обе переменные VISUAL
и EDITOR
переменные среды на одно и то же, но в чем разница? Почему бы я установить их по-другому? При разработке приложений, почему я должен смотреть на VISUAL
раньше EDITOR
или наоборот?
Я обычно устанавливаю обе переменные VISUAL
и EDITOR
переменные среды на одно и то же, но в чем разница? Почему бы я установить их по-другому? При разработке приложений, почему я должен смотреть на VISUAL
раньше EDITOR
или наоборот?
Ответы:
EDITOR
Редактор должен быть в состоянии работать без использования «продвинутой» терминал функциональности (например , старого ed
или ex
режим vi
). Он использовался на телетайпных терминалах.
VISUAL
Редактор может быть полным экранным редактором , как vi
или emacs
.
Например, если вы вызываете редактор через bash (используя C-x C-e
), bash попытается сначала VISUAL
редактировать, а затем, если VISUAL
не получится (так как терминал не поддерживает полноэкранный редактор), он попытается EDITOR
.
В настоящее время вы можете оставить EDITOR
неустановленным или установить его vi -e
.
ed
и тому подобное не очень популярны, поэтому я считаю, что это нормально, просто игнорировать VISUAL
и использовать EDITOR
.
C-x C-e
Bash. Очень удобно.
EDITOR
недостаточно, например, для git
Ubuntu 12.04. Без VISUAL
установки git
игнорирует EDITOR
и просто использует nano
(думаю, скомпилированный по умолчанию).
ed
. Когда появились редакторы с графическим интерфейсом - и под GUI я имею в виду GUI CLI (vim, emacs и т. Д. - думаю, ncurses), а не GUI среды рабочего стола - процесс редактирования резко изменился, поэтому возникла необходимость в другой переменной. В этом контексте GUI-редакторы CLI и графического интерфейса рабочего стола более или менее одинаковы, поэтому вы можете установить VISUAL либо; однако РЕДАКТОР предназначен для принципиально другого рабочего процесса. Конечно, это все историческое. Никто не использует Эд в эти дни.
Принятый ответ, вероятно, является хорошим, коротким обращением, но это будет попыткой углубиться, когда различие между VISUAL и EDITOR все еще может иметь значение (основываясь на ответе Адама Каца ).
Спецификация POSIX по-прежнему различает редакторы в визуальном режиме и линейные редакторы. Это действительно имело значение в те времена, когда было трудно позиционировать курсор на последовательных соединениях (особенно из-за скорости последовательного соединения). Статья Википедии для VI дает некоторый полезный фон на различии между VI (визуальный редактор режим) и бывший (строка редактора). Если вы углубитесь в исследование, вы найдете раздел «RATIONALE» спецификации «ex» , который дает причину для различия, которое все еще присутствует в спецификации:
Признано, что части vi было бы трудно, если не невозможно, удовлетворительно реализовать на терминале блочного режима или терминале без какой-либо формы адресации курсора, таким образом, не является обязательным требованием, чтобы такие функции работали на всех терминалах. , Однако предполагается, что реализация vi должна обеспечивать полный набор возможностей на всех терминалах, способных их поддерживать.
Я не нуждался в этом с тех пор, как отказался от своего модема на 300 бод, но я могу себе представить, что люди, которые используют медленные последовательные линии для подключения к встроенным системам (и / или по очень рискованным соединениям), все еще могут оценить возможность использования предпочтительного режима линии редактор отличается от "визуального" редактора, такого как vi. Коды терминалов в стиле VT100 в узких, с потерями, узких соединениях могут быть «раздутыми» в ограниченных приложениях.
Для остальных из нас кажется, что «правильный» ответ «установить их обоих в качестве предпочтительного редактора». Возможно, было бы неплохо использовать это различие для локального / графического редактора (например, Sublime или gvim) против редактора окон терминала (например, vi или emacs), но, скорее всего, существует масса унаследованных причин, почему это, вероятно, не будет работать так, как хотелось бы ,
Некоторые инструменты принимают только EDITOR, например встроенная оболочка fc :
-e ENAME select which editor to use. Default is FCEDIT, then EDITOR, then vi
Я пришел к выводу, что $VISUAL
это графический и $EDITOR
командная строка. Если определено, что - то искание $VISUAL
должно затем попытаться $EDITOR
дальше.
( Требуется цитата: я хотел бы получить надлежащую документацию, возможно, справочную страницу или спецификацию POSIX?)
На данный момент у меня есть такие вещи в моем ~/.bashrc
и ~/.zshrc
:
EDITOR="$(command -v vim)"
# we have gvim, not in an SSH term, and the X11 display number is under 10
if command -v gvim >/dev/null 2>&1 \
&& [ "$SSH_TTY$DISPLAY" = "${DISPLAY#*:[1-9][0-9]}" ]; then
export VISUAL="$(command -v gvim) -f"
SUDO_EDITOR="$VISUAL"
else
SUDO_EDITOR="$EDITOR"
fi
gvim
без -f
не будет работать с программами, которые ожидают от вас изменений. Это определенно включает в себя sudoeditor
( sudo -e
).
Это может сломаться, если у вас есть пробелы на пути к vim. Если это проблема, либо установите ее правильно, либо рассмотрите символические ссылки, такие как/usr/local/bin/gvim
$VISUAL
зависит от того, есть ли у вас терминал, способный позиционировать курсор, а не от того, доступна ли у вас оконная система.
$DISPLAY
, но это полезно знать.
Поскольку, похоже, не существует какой-либо среды, в которой vi или аналогичный код потерпел бы неудачу, я настроил VISUAL на то, что требует X DISPLAY, а EDITOR - ex.
В основном, это просто вызывает у меня проблемы, когда какая-то программа не использует VISUAL.
$VISUAL
как фрагмент оболочки, к которому они добавляют имя файла (в кавычках), но некоторые рассматривают его как имя исполняемого файла, в котором они могут искать или не искать$PATH
. Поэтому лучше установитьVISUAL
(иEDITOR
) полный путь к исполняемому файлу (который может быть сценарием-оберткой, если вы хотите, например, параметры).