|
МинибуферМинибуфер используется командами Emacs для чтения более сложных, чем простое число, аргументов. Аргументами минибуфера могут быть имена файлов, имена буферов, имена функций Лиспа, имена команд Emacs и много других вещей в зависимости от считывающих аргумент команд. Для редактирования аргументов в минибуфере могут быть использованы обычные команды редактирования Emacs. Когда вы используете минибуфер, он появляется в эхо-области, и туда передвигается курсор терминала. Начало строки минибуфера показывает подсказку, которая говорит, какой ввод вы должны давать, и как он будет применен. Часто подсказка происходит от имени команды, для которой нужен этот аргумент. Подсказка обычно кончается двоеточием. Иногда в круглых скобках после двоеточия появляется аргумент по умолчанию; он тоже является частью подсказки. Значение по умолчанию будет использовано как значение аргумента, если вы вводите пустой аргумент (например, просто наберете RET). К примеру, команды, считывающие имена буферов, всегда показывают значение, принимаемое по умолчанию; оно является именем буфера, который будет использован в дальнейшем, если вы просто наберете RET. Простейший способ дать аргумент минибуферу -- набрать желаемый текст и завершить его RET, клавишей для выхода из минибуфера. Вы можете отменить команду, которая запрашивает аргумент, и выйти из минибуфера, набрав C-g. Минибуфер использует пространство экрана, отведенное под эхо-область, но это может противоречить другим способам использования эхо-области в Emacs. Emacs обрабатывает такие конфликты следующим образом:
Минибуфер для имён файловИногда минибуфер появляется уже с текстом. Например, когда вам предлагается задать имя файла, минибуфер появляется с содержащимся в нем каталогом, заданным по умолчанию, который оканчивается косой чертой. Это делается, чтобы проинформировать вас о том, в каком каталоге будет находиться файл, если вы не зададите каталог. Например, минибуфер может начинаться так: Find File: /u2/emacs/src/ где `Find File: ' -- подсказка. Напечатав buffer.c,
вы задаёте файл Если вам не нужно ничего из каталога по умолчанию, вы можете уничтожить его с
помощью C-a C-k. Но в этом нет необходимости; вы можете просто
проигнорировать его. Вставьте после каталога по умолчанию абсолютное имя файла,
начинающееся с косой черты или тильды. Например, чтобы задать файл
Find File: /u2/emacs/src//etc/termcap GNU Emacs придает
двойной косой черте особое назначение (обычно нет смысла писать две косые черты
подряд): они означают "пропустить все перед второй косой чертой в паре". Таким
образом, `/u2/emacs/src/' в предыдущем примере будет
проигнорировано, и вы получите файл Если вы установите Редактирование в минибуфереМинибуфер -- это буфер Emacs (хотя и своеобразный), и обычные команды Emacs годятся для редактирования текста вводимых вами аргументов. Так как RET в минибуфере определен для выхода, вы не можете использовать его для вставки ограничителя новой строки в минибуфер. Чтобы вставить перевод строки, введите C-o или C-q C-j. (Напомним, что ограничитель новой строки -- это на самом деле знак control-J.) Минибуфер имеет свое собственное окно, которое всегда присутствует на экране, но действует так, как если бы его не было, когда минибуфер не используется. Когда же минибуфер используется, его ничем не отличается от всех остальных окон; вы можете перейти в другое окно с помощью C-x o, отредактировать текст в других окнах и может быть даже обратиться к нескольким файлам перед возвращением в минибуфер для представления аргумента. Вы можете уничтожить текст в другом окне, вернуться в окно минибуфера и затем восстановить этот текст, чтобы использовать его в аргументе. Смотрите раздел Множество окон. Однако существуют некоторые ограничения на использование окна минибуфера. Вы не можете переключить в нем буферы -- минибуфер и его окно связаны вместе. Точно также, вы не можете поделить или уничтожить окно минибуфера. Но вы можете сделать его выше обычным способом с помощью C-x ^. Если вы включите режим Resize-Minibuffer, то окно минибуфера по необходимости увеличивается вертикально, чтобы вместить текст, который вы поместили в минибуфер. Используйте M-x resize-minibuffer-mode, чтобы включить или выключить этот второстепенный режим (смотрите раздел Второстепенные режимы). Прокрутка работает в окне минибуфера особым образом. Когда
высота минибуфера равна только одной строке, и он содержит длинную строку
текста, которая не уместилась бы не экране, с помощью прокрутки автоматически
поддерживается перекрытие одной строки продолжения другой на определённое число
знаков. Переменная Если во время нахождения в минибуфере вы запускаете команду, которая показывает в другом окне справочный текст любого вида, вы можете использовать в минибуфере команду C-M-v для прокрутки этого окна. Это свойство вступает в действие, если попытка получить завершение в минибуфере даёт вам список возможных вариантов. Смотрите раздел Использование других окон. Emacs обычно запрещает большинство команд, использующих
минибуфер, когда минибуфер активен. Это правило было введено, чтобы рекурсивные
минибуферы не запутывали начинающих пользователей. Если вы хотите получить
возможность использования таких команд в минибуфере, установите переменную
ЗавершениеДля ввода значений некоторых видов аргументов вы можете использовать завершение. Завершение означает, что вы набираете часть аргумента, а Emacs явно дополняет остаток полностью или настолько, насколько можно определить по набранной вами части. Когда завершение доступно, определённые клавиши -- TAB, RET и SPC -- перепривязываются для дополнения представленного в минибуфере текста до более длинной строки, которую этот текст представляет, путем сопоставления его с вариантами завершения, которые предоставляются командой, считывающей этот аргумент. Знак ? определен как показывающий список возможных завершений того, что вы уже ввели. Например, когда M-x использует минибуфер для чтения имени команды, она предоставляет для завершения список всех имеющихся имён команд Emacs. Клавиши завершения сопоставляют текст в минибуфере со всеми именами команд, находят какие-то дополнительные знаки имени, которые подразумеваются уже представленными в минибуфере, и добавляют эти знаки к тем, которые вы дали. Поэтому можно напечатать M-x ins SPC b RET вместо M-x insert-buffer RET (например). Регистр обычно имеет значение при завершении, так как он имеет значение в большинстве имен, которые вы можете завершить (имена буферов, файлов, команд). Таким образом, `fo' не завершится до `Foo'. Когда вы завершаете имя, в котором регистр не имеет значения, то при завершении регистр может быть проигнорирован. Пример завершенияЗдесь может помочь конкретный пример.
Если вы наберете M-x au TAB, TAB ищет варианты
(в данном случае имена команд), которые начинаются с `au'. Их
несколько, включая Если вы немедленно снова наберете TAB, то появятся несколько возможностей для следующих знаков -- это может быть любой из `cfilrs', -- поэтому больше ничего не добавляется, но в другом окне показывается список всех возможных завершений. Если вы продолжаете набирать f TAB, то этот
TAB увидит `auto-f'. Единственное имя команды, которое
так начинается, --- это Команды завершенияЗдесь представлен список всех команд завершения, определённых в минибуфере, когда завершение доступно.
SPC завершает очень похоже
на TAB, но никогда не идет дальше следующего дефиса или пробела. Если
в минибуфере есть `auto-f', и вы наберете SPC, он
обнаружит, что завершение --- это `auto-fill-mode', но остановит
завершение после `fill-'. Это даст `auto-fill-'. Еще
один SPC в этом месте завершает полностью до
`auto-fill-mode'. SPC в минибуфере, когда возможно
завершение, запускает функцию Вот несколько команд, которые вы можете использовать для выбора завершения в окне, показывающем перечень вариантов:
Строгое завершениеСуществует три различных варианта работы RET при завершении в минибуфере, зависящие от того, как будет использован аргумент.
Команды завершения показывают в окне список всех возможных вариантов всякий раз, когда возможно более чем одно завершение для следующего знака. Кроме того, набор ? явно запрашивает такой список. Если перечень завершений длинный, вы можете прокрутить его с помощью C-M-v (смотрите раздел Использование других окон). Параметры завершенияПри завершении имён файлов определённые имена обычно
игнорируются. Переменная Обычно команда завершения, которая обнаруживает, что
следующий знак нельзя определить, автоматически показывает список всех возможных
завершений. Если переменная Библиотека Режим Icomplete предоставляет постоянно обновляющуюся информацию, говорящую вам, какие завершения доступны для уже введенного текста. Этот второстепенный режим включается и выключается с помощью команды M-x icomplete-mode. История минибуфераВсе введенные вами в минибуфер аргументы сохраняются в списке истории минибуфера, чтобы вы могли снова использовать их позже в новом аргументе. Текст старых аргументов вставляется в минибуфер особыми командами. Они сбрасывают старое содержимое минибуфера, так что вы можете думать о них как о командах движения по списку предыдущих аргументов.
Простейший способ повторно использовать сохраненные аргументы из
списка истории -- передвигаться по списку истории по одному аргументу. Находясь
в минибуфере, используйте M-p или стрелку вверх
( Предыдущий ввод, который вы извлекаете из истории, полностью замещает содержимое минибуфера. Чтобы использовать его в качестве аргумента, выйдите из минибуфера как обычно, с помощью RET. Вы также можете отредактировать текст перед использованием; это не изменяет элемент истории, к которому вы "перешли", но ваш новый аргумент вставляется в конец списка истории как отдельный элемент. Для многих аргументов минибуфера есть значение "по умолчанию". В некоторых случаях команды истории знают значение по умолчанию. Тогда вы можете вставить это значение в минибуфер в виде текста, используя M-n для перехода "в будущее" по истории. Мы надеемся в конце концов сделать это свойство доступным всегда, когда у минибуфера есть значение по умолчанию. Также есть команды для поиска вперёд или назад по истории; они
производят поиск элементов истории, которые соответствуют задаваемому вами в
минибуфере регулярному выражению. M-r
( Каждое использование минибуфера записывает ваш ввод в список истории, но есть отдельные списки для различных видов аргументов. Например, есть список для имен файлов, используемый всеми командами, считывающими имена файлов. (У него есть особенность: этот список истории записывает абсолютное имя файла, не больше и не меньше, даже если вы ввели его иначе.) Существуют несколько других особенных списков истории, включая список для
имен команд, считываемых командой M-x, список для имён буферов,
список для аргументов команд вроде Переменная Повтор команд минибуфераКаждая команда, которая использует минибуфер по крайней мере один раз, записывается в специальный список истории вместе со значением аргументов минибуфера, так что вы можете легко её повторить. В частности, записывается каждое использование M-x, так как M-x использует минибуфер для чтения имени команды.
C-x ESC ESC используется для повторного выполнения недавней команды, использовавшей минибуфер. Запущенная без аргумента, она повторяет последнюю такую команду. Числовой аргумент определяет, какую команду повторить; единица означает первую от конца, а большие числа определяют более ранние команды. C-x ESC ESC действует при помощи превращения предыдущей команды в выражение Лиспа и последующего входа в минибуфер, инициализированый текстом этого выражения. Если вы набираете просто RET, то команда повторяется как прежде. Вы можете также изменить команду путем редактирования лисповского выражения. То выражение, что вы в конце концов представите, и будет выполнено. Повторенная команда добавляется в начало истории команд, если она не идентична самой последней выполненной команде, которая уже была там. Даже если вы не понимаете синтаксиса Лиспа, вероятнее всего будет очевидно, какая команда отражается для повторения. Если вы не меняли текст, вы можете быть уверены, что он повторится точно так, как прежде. Находясь в минибуфере по команде C-x ESC ESC, вы можете использовать команды истории минибуфера (M-p, M-n, M-r, M-s; смотрите раздел История минибуфера) для продвижения по списку сохраненных полностью команд. После того, как вы найдете желаемую предыдущую команду, вы можете как обычно отредактировать её выражение и затем предоставить его снова, набрав RET. Перечень предыдущих команд, использовавших минибуфер,
хранится как лисповский список в переменной Назад | Вперед | Содержание |
|
Распространение материалов сайта означает, что распространитель принял условия лицензионного соглашения. Идея и реализация: © Владимир Довыденков и Анатолий Камынин, 2004-2024 |
Социальные сети