Проект электроснабжения и электрики Energy systems.

Командная строка tcsh: навигация и редактирование

Встроенный в оболочку tcsh редактор командной строки предоставляет средства навигации внутри неё и функции редактирования с возможностью изменения отдельных знаков и компонентов команд, их опций и аргументов.

Навигация по командной строке и её редактирование могут осуществляться двумя различными методами. Первый -- использование стандартных клавиш управления курсором, таких, как Left и Right, Home и End для навигации, и клавиш Delete и Backspase -- для редактирования.

Достоинство "стандартного" способа -- в его не столько даже простоте, сколько в привычности для многих пользователей: в большинстве случаев стандартные клавиши управления курсором с клавиатуры ведут себя так же, как и в программах для DOS/Windows. Однако -- отнюдь не всегда: на некоторых типах терминалов хотя бы какая-то из этих клавиш (а то и все сразу) обнаруживают аномальные особенности поведения. Да и возможности их ограничены функциями наличествующих на клавиатуре клавиш.

Этого недостатка лишен второй способ навигации и редактирования -- с использованием специальных клавишных комбинаций. Каковые на всех известных мне типах терминалов ведут себя абсолютно идентично. Что и понятно -- ведь их поведение определяется не "клавиатурным железом", а возможностями оболочки и её настройками.

К тому же клавишные комбинации, по сравнению со стандартными "железными" клавишами, предоставляют множество дополнительных возможностей как в отношении навигации по командной строке, так и в плане её редактирования.

Управляющие комбинации клавиш (bindkeys) в большинстве случаев имеют вид Control+литера или Meta+литера.

С первым случаем всё ясно: литерная (точнее, алфавитно-цифровая, в общем случае -- символьная) клавиша нажимается при нажатой управляющей клавише Control.

А вот клавиши Meta мы на клавиатуре PC не найдём: её роль исполняет либо нажатие клавиши Alt (и, для приведения в действие управляющей последовательности, одновременное нажатие символьной клавиши), либо нажатие и отпускание клавиши Escape, после чего сразу нажимается символьная клавиша.

Все управляющие Control-последовательности в tcsh не чувствительны к регистру и, насколько мне известно, также и к раскладке клавиатуры. То есть они работают (и работают одинаково) вне зависимости от переключения, например, с латиницы на кириллицу и обратно. Не влияет на них и тип терминала: действие управляющих последовательностей абсолютно идентично в системной консоли FreeBSD и DragonFlyBSD, в wscons из Net- и OpenBSD, в Linux-консоли и во всех Иксовых программах-эмуляторах терминалов, которые я видел.

С Meta-последовательностями несколько сложнее. Во-первых, во всех интегрированных десктопах многие алфавитные комбинации с клавишей Alt задействованы под внутренние нужды среды; как помнится, в некоторых оконных менеджерах Alt тоже используется для собственных целей. То есть в Иксовых эмуляторах терминалов, вне зависимости от их собственных свойств, выступать как Meta-клавиша она не может: в этой роли безальтернативно выступает только клавиша Escape.

Во-вторых, в средах, основанных на библиотеках Gtk, клавиатурные комбинации подчас отказываются работать при переключении на русскую раскладку клавиатуры. Это не какая-то особая нелюбовь именно к управляющим Meta-последовательностям tcsh, нередко не функционируют при этом обычно и стандартные для Иксовых приложений комбинации типа Control+C и Control+V. Почему чаша сия миновала Control-последовательности tcsh -- остаётся только гадать.

Подчеркну, что оба случая отказа управляющих последовательностей tcsh никак не связаны с самой этой оболочкой, а обусловлены внешними воздействиями среды обитания. Так что с учётом приведённых оговорок эти управляющие последовательности можно считать универсальным механизмом навигации и редактирования командной строки.

Полный список управляющих комбинаций клавиш для tcsh может быть получен командой

$ binkdkey

Одни из них дублируют стандартные клавиши перемещения курсора, такие как:

  • Control+A -- перемещение курсора в начало строки, аналогично клавише Home;
  • Control+E -- перемещение курсора в конец строки, аналогично клавише End;
  • Control+F -- перемещение курсора на один знак вперед (аналог клавиши Right);
  • Control+B -- перемещение курсора на один знак назад (аналог клавиши Left).

Другие же управляющие комбинации дают возможность перемещаться на одно слово вперед или назад (Meta+F и Meta+B соответственно), в предыдущую позицию курсора (Control+X-X), удалять одиночный символ перед курсором (Control+D) или после него (Control+H), и аналогично поступать с целыми словами -- последовательность Meta+D удалит слово после курсора, а Meta-Control+H -- перед ним, перемещать символы в строке (transpose-chars, Control+T) и многое другое.

Как можно видеть из примеров с перемещением курсора и удалением символов и слов, Meta-последовательности часто сходны с Control-последовательностями, но клавиша Meta как бы "усиливает" действие последних. Исключение из этой логичной закономерности -- использование комбинации Meta-Control+H для удаления предшествующего слова вместо ожидаемого по аналогии Meta+H, которая зарезервирована за вызовом контекстной помощи для текущей команды в строке.

А поскольку под все эти операции задействованы только клавиши основой части клавиатуры, скорость их выполнения -- непревзойденная (при наличии некоторого навыка, доведенного, желательно, до рефлекторного уровня).


Содержание

. .