it-swarm-ru.tech

VISUAL vs. EDITOR - какая разница?

Обычно я устанавливаю переменные окружения VISUAL и ​​EDITOR на одно и то же, но в чем разница? Почему бы я установить их по-другому? При разработке приложений, почему я должен выбрать VISUAL перед EDITOR или наоборот?

196
xenoterracide

Редактор EDITOR должен иметь возможность работать без использования "продвинутых" функций терминала (например, старого режима ed или ex для vi). Он использовался на телетайпных терминалах.

Редактор VISUAL может быть полноэкранным редактором как vi или emacs.

Например. если вы вызываете редактор через bash (используя C-x C-e), bash сначала попробует VISUAL редактор, а затем, если VISUAL завершится неудачно (так как терминал не поддерживает полноэкранный редактор), он попытается EDITOR.

В настоящее время вы можете оставить EDITOR неустановленным или установить его на vi -e.

157
andcoz

Принятый ответ, вероятно, является хорошим, коротким обращением, но это будет попытка углубиться, когда различие между VISUAL и EDITOR все еще может иметь значение (опираясь на ответ Адама Каца ).

Спецификация POSIX по-прежнему различает редакторы в визуальном режиме и линейные редакторы. Это действительно имело значение в те времена, когда было трудно позиционировать курсор на последовательных соединениях (особенно из-за скорости последовательного соединения). статья в Википедии для vi дает полезную информацию о различии между vi (редактор визуального режима) и ex (редактор строки). Если вы покопаетесь достаточно глубоко в исследовании, вы найдете раздел "RATIONALE" в спецификации "ex" , что дает основание для различия, все еще присутствующего в спецификации:

Признано, что части vi было бы трудно, если не невозможно, удовлетворительно реализовать на терминале блочного режима или на терминале без какой-либо формы адресации курсора, поэтому не является обязательным требованием, чтобы такие функции работали на всех терминалах. , Однако предполагается, что реализация vi должна обеспечивать полный набор возможностей на всех терминалах, способных их поддерживать.

Мне это не нужно с тех пор, как я отказался от своего модема на 300 бод, но я могу себе представить, что люди, которые используют медленные последовательные линии для подключения к встроенным системам (и/или через действительно опасные соединения) , могут по-прежнему ценю возможность иметь предпочтительный редактор линейного режима, отличный от "визуального" редактора, такого как vi. Коды терминалов в стиле VT100 в узких, с потерями, узких соединениях могут быть "раздутыми" в ограниченных приложениях.

Для остальных из нас кажется, что "правильный" ответ "установить их обоих в качестве предпочтительного редактора". Возможно, было бы неплохо использовать это различие для локального/графического редактора (например, Sublime или gvim) по сравнению с редактором окон терминала (например, vi или emacs), но, скорее всего, существует масса унаследованных причин, почему это, вероятно, не будет работать так, как хотелось бы ,.

37
robla

Я пришел к выводу, что $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

3
Adam Katz

Некоторые инструменты принимают только EDITOR, например встроенная оболочка fc:

-e ENAME  select which editor to use.  Default is FCEDIT, then EDITOR, then vi
2
Steven Penny

Поскольку, похоже, не существует какой-либо среды, в которой vi или аналогичный код потерпел бы неудачу, я настроил VISUAL на то, что требует X DISPLAY, а EDITOR - ex.

В основном, это просто вызывает у меня проблемы, когда какая-то программа не использует VISUAL.

0
Mike William Meyer