Разнообразные команды – ЧАСТЬ 3

Буферы оболочки предоставляют историю ранее введенных  команд.  Чтобы снова использовать команды оболочки, сохраненные в истории, используйте команды редактирования M-p, M-n, M-r и M-s. Они работают так же, как команды истории минибуфера, за тем лишь исключением, что действуют на текст в конце буфера оболочки, где вы вставляли бы текст для отправки оболочке.

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

Команды поиска в истории, M-r и M-s, считывают регулярное выражение и производят поиск совпадающей  команды в истории.  Кроме  предоставления  выбора, какую  именно команду вы хотите извлечь, они работают точно так же, как M-p и M-r.  Если вы введете пустое регулярное выражение, будет использовано то регулярное выражение, которое вы предоставили в последний раз.

Когда  вы нашли желаемый предыдущий ввод, вы можете  снова послать его, нажав

hRETi, или сначала отредактировать и затем послать, если хотите.

Часто бывает полезно заново выполнить несколько последовательных команд оболочки, которые ранее выполнялись  по порядку. Чтобы сделать это, сначала найдите и выполните первую команду в последовательности.  Затем наберите C-c C-x; это извлечет следующую команду — ту,  которая шла за только что повторенной.  Затем нажмите  hRETi,  чтобы заново выполнить эту команду. Вы можете повторить несколько последовательных команд, набирая C-c C-x hRETснова и снова.

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

Некоторые оболочки сохраняют истории их  команд в файлах, чтобы вы могли сослаться на старые команды из предыдущих сеансовx. Emacs считывает файл истории команд для выбранной вами оболочки, чтобы проинициализировать свою собственную историю команд. Этот файл называется ‘~/.bash_history’ в bash, ‘~/.sh_history’ в ksh и

‘~/.history’ в других оболочках.

30.2.4.2  Копирование истории оболочки

C-c C-p      Перемещает точку к предыдущей подсказке (comint-previous-prompt).

C-c C-n      Перемещает точку к следующей подсказке (comint-next-prompt).

C-c hRETi     Копирует команду ввода, в которой находится точка, вставляя  ее копию в конец буфера  (comint-copy-old-input).   Это полезно, если вы  переместили  точку назад к предыдущей команде.   После того, как вы  скопировали эту команду, вы можете послать копию в качестве ввода, нажав hRETi.  Если вы хотите, вы можете отредактировать копию перед отправлением.

Перемещение  к  предыдущему вводу и последующее  его копирование с помощью C-c hRETдает тот же результат — то же содержимое буфера — какой вы получили бы применением M-p достаточное  число раз, чтобы извлечь эту старую команду из списка истории. Однако, C-c hRETкопирует текст из буфера, которые может отличаться от того, что находится в списке истории, если вы редактировали в буфере введенный  текст после того, как он был послан.

30.2.4.3  Ссылки на историю оболочки

Различные оболочки, включая csh и bash, поддерживают ссылки на историю, которые начинаются с ‘!’ и ‘^’.  Режим Shell может понимать такие конструкции и делать для вас подстановку. Если вы вставили ссылку на историю и нажали hTABi, это приведет к поиску совпадающей команды в истории ввода, подстановке, если она необходима, и помещению в буфер  результата на место ссылки.  Например, вы можете  извлечь самую недавнюю команду, начинающуюся на ‘mv’, с помощью ! m v hTABi.  Вы можете отредактировать эту команду, если хотите, и затем послать ее оболочке,  нажав hRETi.

Ссылки на историю действуют только после подсказки оболочки. Переменная shellprompt-pattern указывает, как распознать подсказку. Вообще, режимы Comint используют для определения подсказки  переменную comint-prompt-regexp; режим Shell использует shell-prompt-pattern, чтобы установить локальное значение comint-prompt-regexp.

В режиме Shell есть возможность раскрывать ссылки на историю, когда вы отправляете их оболочке.  Чтобы затребовать это, установите  переменную comint-input-autoexpand равной input.

Вы можете сделать так, чтобы hSPCi  производил раскрытие истории, привязав hSPCi  к команде comint-magic-space.

30.2.5  Параметры режима Shell

Если переменная comint-scroll-to-bottom-on-input не равна nil, команды вставки и восстановления прокручивают выбранное окно книзу перед вставкой.

Если comint-scroll-show-maximum-output не равна nil, то прокрутка из-за поступления вывода старается разместить последнюю строку текста на нижней строке окна, чтобы вы видели как можно больше полезного текста.  (Это имитирует поведение прокрутки  на многих терминалах.) По умолчанию эта переменная равна nil.

Установкой comint-scroll-to-bottom-on-output вы можете сделать так, чтобы точка перескакивала в конец буфера всякий раз при поступлении вывода — независимо от того, где точка была раньше. Если значение равно this, точка перескакивает в выбранном окне. Если значение равно all, точка перескакивает в каждом окне, показывающем этот буфер Comint.   Если значение равно other,   точка  перескакивает  во всех невыбранных окнах, показывающих текущий буфер. По умолчанию это nil, что означает, что точка не должна перемещаться в конец.

Переменная comint-input-ignoredups говорит,  нужно ли сохранять в истории последовательные одинаковые строки ввода. Отличное от nil значение велит опускать ввод, идентичный предыдущему.  По умолчанию эта переменная  равна nil;  это значит, что сохраняется любой ввод, даже если он эквивалентен предыдущему.

Завершение имен файлов управляется тремя  переменными.   Переменная comintcompletion-addsuffix говорит, вставляет ли завершение пробел или косую черту, чтобы обозначить полностью завершенное имя файла или каталога (не-nil велит вставлять пробел или косую черту).  comint-completion-recexact, если не равна nil, указывает hTABi выбирать наименьшее возможное завершение, если обычный алгоритм завершения Emacs не может добавить даже одного знака. comint-completion-autolist, если не равна nil, велит перечислять  все возможные  завершения, когда нельзя найти точное завершение.

Команда comint-dynamic-complete-variable  завершает имя переменной,  используя установки переменных среды внутри Emacs. Переменные, управляющие завершением имен файлов, применяются и к завершению имен переменных. Эта команда обычно доступна через меню.

При завершении команд обычно рассматриваются только исполняемые файлы. Если вы установите shell-command-execonly равной nil, будут рассматриваться также имена и неисполняемых файлов.

Вы можете сконфигурировать поведение ‘pushd’. Есть переменные, которые указывают, ведет ли себя pushd, как cd, если ей не задан аргумент (shell-pushd-tohome), выталкивает ли она каталог, а не прокручивает, если ей задан числовой аргумент (shell-pushddextract), и добавляет ли она каталоги в стек только в том случае, если их еще нет в нем (shell-pushd-dunique). Выбранные вами значения должны, разумеется, соответствовать вашей оболочке.

30.2.6  Оболочка на удаленной машине

Emacs предоставляет две команды для захода на другой компьютер и общения с ним через буфер Emacs.

M-x telnet hRETимямашины hRETi

Устанавливает с компьютером имямашины  соединение по Telnet.

M-x rlogin hRETимямашины hRETi

Устанавливает с компьютером имямашины  соединение по Rlogin.

Используйте  M-x telnet,  чтобы установить соединение по Telnet с другим компьюте-

ром. (Telnet — это стандартный протокол Internet для захода на удаленную систему.) Она

считывает в минибуфере имя другого компьютера в качестве аргумента. Когда соединение установлено, общение с другим компьютером работает похоже на общение с подоболочкой: вы можете редактировать ввод с помощью обычных команд Emacs и посылать его построчно, набирая hRETi. Вывод вставляется в буфер вперемешку  со вводом.

Используйте M-x rlogin для установки соединения по Rlogin. Rlogin — это другой протокол общения с удаленной системой, во многом похожий на Telnet, но не совместимый с ним и поддерживаемый только на некоторых системах. Преимущества Rlogin состоят в том, что вы можете сделать так, чтобы вам необязательно было задавать имя пользователя и пароль при общении между часто используемыми машинами, и что вы можете установить восьмибитное  соединение.  (Чтобы сделать это в Emacs, установите  rloginexplicit-args равной ("-8") перед запуском Rlogin.)

M-x rlogin устанавливает каталог по умолчанию данного буфера Emacs, чтобы получать доступ к удаленной машине через FTP (см.  Раздел 14.1 [Имена файлов], с. 105), и отслеживает команды оболочки, которые изменяют текущий каталог, так же, как режим Shell.

Есть два способа  отслеживания  каталогов в буфере  Rlogin — либо с помощью имен удаленных каталогов ‘/машина:кат/’,  либо с помощью локальных имен (это работает, если “удаленная” машина разделяет файловые системы  с вашей начальной машиной). Вы можете использовать команду rlogin-directory-tracking-mode, чтобы переключать эти режимы.   Отсутствие аргумента обозначает  использование  имен удаленных каталогов, положительный аргумент обозначает  использование локальных имен, а отрицательный выключает отслеживание каталогов.

30.3  Использование Emacs в качестве сервера

Различные программы, такие как mail, могут вызывать выбранный вами редактор для редактирования  определенного текста, например, отправляемого сообщения. По соглашению, большинство этих программ используют переменную среды EDITOR, чтобы определить, какой редактор надо запускать.  Если вы установите  EDITOR  равной ‘emacs’, они вызовут Emacs — но неудобным способом, запуская новый отдельный процесс Emacs. Это неудобно, потому что занимает время и потому что новый процесс Emacs не разделяет буферы с существующим процессом.

Источник: Ричард Столмен, Руководство по GNU Emacs

Похожие посты:

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий