Отладка с помощью GDB - 21. Редактирование командной строки

[Содержание]   [Назад]   [Пред]   [Вверх]   [След]   [Вперед]  


21. Редактирование командной строки

Эта глава описывает основные возможности интерфейса редактирования командной строки GNU.

21.1 Введение в редактирование строк

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

Текст C-k читается как `Control-K' и описывает знак, полученный нажатием клавиши k при нажатой клавише Control.

Текст M-k читается как `Meta-K' и описывает знак, введенный нажатием клавиши k при нажатой клавише Meta (если у вас она имеется). На многих клавиатурах клавиша Meta отмечается с помощью ALT. На клавиатурах с двумя клавишами, отмеченными ALT (обычно по разные стороны от пробела), ALT на левой стороне обычно устанавливается для работы клавишей Meta. Правый ALT также может быть сконфигурирован для работы Meta, или он может быть сконфигурирован как другой модификатор, например как клавиша Compose для ввода символов с акцентами.

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

Текст M-C-k читается как `Meta-Control-k' и описывает знак, полученный посредством метафикации C-k.

Кроме того, некоторые клавиши имеют собственные имена. Именно, DEL, ESC, LFD, SPC, RET и TAB в этом тексте или в файле инициализации обозначают сами себя (см. раздел 21.3 Файл инициализации Readline). Если на вашей клавиатуре нет клавиши LFD, нажатие C-j приведет к вводу желаемого символа. Клавиша RET на некоторых клавиатурах может быть отмечена как Return или Enter.

21.2 Взаимодействие с Readline

Часто во время интерактивного сеанса вы вводите длинную строку текста только для того, чтобы заметить, что первое слово набрано неправильно. Библиотека Readline дает вам набор команд для управления текстом во время ввода, позволяя вам лишь исправить опечатку, а не набирать заново большую часть строки. С помощью этих команд редактирования, вы перемещаете курсор в место, требующее исправления, и удаляете или вставляете текст для коррекции. Затем, когда строка полностью исправлена, вы просто нажимаете RET. Чтобы нажать RET вам не обязательно находиться в конце строки; вся строка вводится независимо от расположения в ней курсора.

21.2.1 Сведения первой необходимости

Для того, чтобы ввести знак в строку, просто нажмите его. Введенный знак появляется там, где был курсор, и затем курсор перемещается на одну позицию вправо. Если вы неверно набрали знак, вы можете использовать ваш знак уничтожения, чтобы вернуться и удалить неверный знак.

Иногда вы можете набрать символ ошибочно, и не заметить ошибки, пока не напечатаете несколько других знаков. В этом случае, вы можете набрать C-b, чтобы переместить курсор влево, и затем исправить вашу ошибку. После этого, вы можете переместить курсор вправо нажатием C-f.

Когда вы добавляете текст в середину строки, символы справа от курсора `сдвигаются вперед', чтобы освободить место для вставляемого текста. Аналогично, когда вы удаляете текст за курсором, символы справа от него `сдвигаются назад', занимая пустое пространство, созданное в результате удаления текста. Ниже следует список команд первой необходимости для редактирования вводимого текста.

C-b
Переместиться назад на одну позицию.
C-f
Переместиться вперед на одну позицию.
DEL или Backspace
Удалить символ слева от курсора.
C-d
Удалить символ под курсором.
Ввод символов
Вставить символ в строку в позицию курсора.
C-_ или C-x C-u
Отменить последнюю команду редактирования. Вы можете отменить все, вернувшись назад к пустой строке.

(В зависимости от вашей конфигурации, клавиша Backspace может быть настроена удалять знак слева от курсора, а DEL удалять знак под курсором, как C-d, вместо символа, расположенного от курсора слева.)

21.2.2 Команды перемещения Readline

Приведенная выше таблица описывает только самые базовые последовательности клавиш, которые могут вам понадобиться для редактирования строки ввода. Для удобства, в дополнение к C-b, C-f, C-d и DEL были добавлены многие другие команды. Вот некоторые из них, предназначенные для более быстрого перемещения по строке.

C-a
Переместиться в начало строки.
C-e
Переместиться в конец строки.
M-f
Переместиться вперед на слово. Слово состоит из букв и цифр.
M-b
Переместиться назад на слово.
C-l
Очистить экран, напечатав текущую строку заново вверху экрана.

Заметьте, что C-f перемещает курсор вперед на символ, в то время как M-f перемещает вперед на слово. Это своего рода соглашение, что при нажатии клавиши Сontrol производятся действия над символами, при нажатии клавиши Meta--над словами.

21.2.3 Команды уничтожения Readline

Уничтожение текста означает уничтожение текста из строки, но сохранение его для дальнейшего использования, обычно для восстановления (повторной вставки) обратно в строку. (`Вырезать' и `вставить' являются более свежими жаргонными синонимами для `уничтожить' и `восстановить'.)

Если в описании команды сказано, что она `уничтожает' текст, то вы можете быть уверены, что позже его можно будет получить обратно в другом (или том же самом) месте.

Когда вы используете команду уничтожения, текст сохраняется в кольцевом списке уничтожений. Любое число последовательных уничтожений сохраняет весь уничтоженный текст вместе, так что когда вы восстанавливаете его назад, вы получите все. Список уничтожений не имеет привязки к строкам; текст, уничтоженный вами в предыдущей строке ввода, доступен для восстановления позже, когда вы вводите другую строку.

Вот список команд для уничтожения текста.

C-k
Уничтожить текст от текущей позиции курсора до конца строки.
M-d
Уничтожить от курсора до конца текущего слова, или, если курсор находится между словами, до конца следующего слова. Границы слов такие же, как и используемые M-f.
M-DEL
Уничтожить от курсора до начала текущего слова, или, если курсор находится между словами, до начала предыдущего слова. Границы слов такие же, как и используемые M-b.
C-w
Уничтожить от курсора до предыдущего пробельного символа. Это отличается от M-DEL, так как границы слова различаются.

Вот как можно восстановить текст обратно в строку. Восстановление означает копирование последнего уничтоженного текста из буфера уничтожений.

C-y
Восстановить последний уничтоженный текст в буфер перед курсором.
M-y
Циклический сдвиг по кольцевому списку уничтожений, и восстановление новой вершины. Вы можете использовать это, только если предыдущая команда была C-y или M-y.

21.2.4 Параметры команд Readline

Вы можете передавать числовые параметры командам Readline. Иногда параметр действует как счетчик повторений, иногда он является знаком, если аргумент имеет знак. Если вы передаете отрицательный параметр команде, которая обычно действует в прямом направлении, то она будет действовать в обратном направлении. Например, чтобы уничтожить текст до начала строки, вы можете набрать `M-- C-k'.

Общий способ передачи числовых параметров команде состоит в наборе Meta-цифр перед командой. Если первая набранная `цифра' есть знак минус (`-'), тогда знак аргумента будет отрицательным. Если вы набрали одну мета-цифру для начала параметра, вы можете набрать оставшиеся цифры, и потом команду. Например, чтобы передать команде C-d параметр 10, вы можете набрать `M-1 0 C-d'.

21.2.5 Поиск команд в истории

Readline предоставляет команды для поиска в истории команд строк, содержащих указанную подстроку. Существует два режима поиска: наращиваемый и ненаращиваемый.

Наращиваемый поиск начинается до того, как пользователь закончит ввод строки поиска. По мере ввода очередных символов строки поиска, Readline отображает следующий элемент из истории, соответствующий строке, введенной на данный момент. Наращиваемый поиск требует ровно столько символов, сколько требуется для нахождения желаемого элемента истории. Для поиска определенной строки в истории в обратном направлении, введите C-r. Ввод C-s производит поиск в прямом направлении. Символы, присутствующие в значении переменной isearch-terminators, используются для завершения наращиваемого поиска. Если этой переменной не было присвоено значение, знаки ESC и C-J будут завершать наращиваемый поиск. C-g прерывает наращиваемый поиск и восстанавливает исходную строку. Когда поиск завершается, элемент истории, содержащий искомую строку, становится текущей строкой.

Для нахождения других подходящих элементов списка истории, введите соответственно C-r или C-s. Это произведет поиск вперед или назад в истории до следующего элемента, соответствующего введенной строке поиска. Любая другая последовательность клавиш, привязанная к команде Readline, завершит поиск и выполнит эту команду. Например, RET завершит поиск и примет эту строку, таким образом выполняя команду из списка истории.

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

21.3 Файл инициализации Readline

Хотя библиотека Readline поставляется с установленным по умолчанию набором привязок клавиш, аналогичному Emacs, возможно использование другого набора привязок. Любой пользователь может настраивать программы, которые используют Readline, помещая команды в файл inputrc, обычно в своем домашнем каталоге. Имя этого файла берется из переменной среды INPUTRC. Если эта переменная не установлена, по умолчанию берется файл `~/.inputrc'.

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

Кроме того, команда C-x C-r считывает файл инициализации заново, так что изменения, которые вы могли cделать к этому времени, вступают в силу.

21.3.1 Синтаксис файла инициализации Readline

Существуют всего несколько конструкций, которые допускаются в файле инициализации Readline. Пустые строки игнорируются. Строки, начинающиеся с `#', являются комментариями. Строки, начинающиеся с `$', обозначают условные конструкции (см. раздел 21.3.2 Условные конструкции инициализации). Другие строки обозначают установку переменных и привязки клавиш.

Установка переменных
Вы можете изменять поведение Readline во время выполнения посредством изменения значений переменных, используя команду set в файле инициализации. Вот как можно изменить привязку клавиш Emacs, используемую по умолчанию, для использования команд редактирования строки vi:
set editing-mode vi
Основная часть поведения при выполнении изменяется с помощью следующих переменных.
bell-style
Контролирует, что происходит, когда Readline хочет издать звук на терминале. Если установлено в `none', Readline никогда не издает звук. Если установлено в `visible', Readline использует визуальный звонок, если есть возможность. Если установлено в `audible' (по умолчанию), Readline пытается издать звук на терминале.
comment-begin
Строка для вставки в начало строки, когда выполняется команда `insert-comment'. По умолчанию "#".
completion-ignore-case
Если установлено в `on', Readline производит проверку совпадений и завершение имени файла без учета регистра. По умолчанию `off'.
completion-query-items
Количество возможных завершений, определяющее, когда у пользователя запрашивается, хочет ли он увидеть список возможных вариантов. Если число возможных завершений больше этого значения, Readline спросит у пользователя, хочет он их просмотреть или нет; в противном случае, они просто отображаются. По умолчанию устанавливается предел 100.
convert-meta
Если установлено в `on', Readline будет преобразовывать символы с установленным восьмым битом в последовательность клавиш ASCII, удаляя восьмой бит и подставляя в качестве префикса знак ESC, тем самым преобразовывая их в последовательность клавиш с Meta-префиксом. По умолчанию `on'.
disable-completion
Если установлено в `on', Readline будет препятствовать завершению слов. Знаки завершения будут вставляться в строку так, как если бы они отображались в self-insert. По умолчанию `off'.
editing-mode
Переменная editing-mode контролирует, какой набор привязок клавиш используется. По умолчанию, Readline запускается в режиме редактирования Emacs, где нажатия клавиш очень похожи на Emacs. Эта переменная может быть установлена или в `emacs', или в `vi'.
enable-keypad
Когда установлено в `on', Readline будет пытаться активизировать малую клавиатуру приложения, когда она вызывается. Это требуется некоторым системам для активации клавиш со стрелками. По умолчанию `off'.
expand-tilde
Если установлено в `on', производится раскрывание тильды, когда Readline осуществляет завершение слова. По умолчанию `off'.
horizontal-scroll-mode
Эта переменная может быть установлена в `on' или `off'. Установка в `on' означает, что текст в редактируемых строках будет прокручиваться горизонтально в одной строке экрана, когда ширина строки становится больше ширины экрана, вместо переноса на новую строку. По умолчанию, эта переменная установлена в `off'.
input-meta
Если установлено в `on', Readline включит восьмибитовый ввод (восьмой бит не будет удаляться из считываемых символов) независимо от того, поддерживает ли это терминал. Значение по умолчанию `off'. Имя meta-flag является синонимом для этой переменной.
isearch-terminators
Строка из знаков, которые должны прекращать наращиваемый поиск без последующего выполнения знака как команды (см. раздел 21.2.5 Поиск команд в истории). Если этой переменной не присвоено значение, наращиваемый поиск прекращают знаки ESC и C-J.
keymap
Устанавливает текущую раскладку клавиатуры Readline для привязок команд к клавишам. Возможные имена для keymap: emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-command и vi-insert. vi эквивалентно vi-command; emacs эквивалентно emacs-standard. Значение по умолчанию emacs. Значение переменной editing-mode также влияет на раскладку по умолчанию.
mark-directories
Если установлено в `on', к именам каталогов после завершения добавляется косая черта. По умолчанию `on'.
mark-modified-lines
Эта переменная, будучи установлена в `on', велит Readline отображать звездочку (`*') в начале тех строк истории, которые были модифицированы. По умолчанию, эта переменная установлена в `off'.
output-meta
Если установлено в `on', Readline будет отображать знаки с установленным восьмым битом непосредственно, а не в виде экранирующих последовательностей с Meta-префиксом. По умолчанию `off'.
print-completions-horizontally
Если установлено в `on', Readline будет отображать завершения, отсортированные горизонтально в алфавитном порядке, а не вниз по экрану. По умолчанию `off'.
show-all-if-ambiguous
Это изменяет поведение по умолчанию функций завершения. При установке в `on', если слово имеет более одного возможного завершения, они будут выводиться немедленно, вместо подачи сигнала. По умолчанию `off'.
visible-stats
Если установлено в `on', при выводе возможных завершений, к имени файла добавляется знак, обозначающий тип файла. По умолчанию `off'.
Привязки клавиш
Синтаксис для управления привязками клавиш в файле инициализации прост. Во-первых, вы должны найти имя команды, которую вы хотите изменить. Следующий раздел содержит таблицы с именем команды, привязкой клавиш по умолчанию, если таковые есть, и коротким описанием, что делает команда. Если вы знаете имя команды, просто поместите в строке файла инициализации название клавиши, к которой вы хотите привязать команду, двоеточие, и затем имя команды. Название клавиши может быть выражено различными способами, в зависимости от того, как вам удобнее.
назв-клавиши: имя-функции или макрос
назв-клавиши---это название клавиши, записанное по-английски. Например:
Control-u: universal-argument
Meta-Rubout: backward-kill-word
Control-o: "> output"
В этом примере, C-u привязана к функции universal-argument, а C-o привязана к выполнению макрокоманды, записанной с правой стороны (то есть, вставить текст `> output' в строку).
"послед-клавиш": имя-функции или макро
послед-клавиш отличается от вышеупомянутого назв-клавиши тем, что позволяет определять строки, обозначающие целую последовательность клавиш, посредством ее заключения в двойные кавычки. Могут быть использованы некоторые экранирующие последовательности в стиле GNU Emacs, как в следующем примере, но имена специальных знаков не распознаются.
"\C-u": universal-argument
"\C-x\C-r": re-read-init-file
"\e[11~": "Function Key 1"
В этом примере, C-u привязывается к функции universal-argument (как это было в первом примере), `C-x C-r' привязывается к функции re-read-init-file и `ESC [ 1 1 ~' привязывается к вставке текста `Function Key 1'.
Следующие экранирующие последовательности в стиле GNU Emacs доступны при определении последовательности клавиш:
\C-
префикс Control
\M-
префикс Meta
\e
префикс экранирующего знака
\\
обратная косая черта
\"
", знак двойных кавычек
\'
', одинарная кавычка или апостроф
В дополнение к экранирующим последовательностям стиля GNU Emacs, доступен второй набор последовательностей с обратной косой чертой:
\a
тревога (звуковой сигнал)
\b
переместиться назад на одну позицию
\d
удаление
\f
перевод страницы
\n
новая строка
\r
возврат каретки
\t
горизонтальная табуляция
\v
вертикальная табуляция
\nnn
знак, восьмеричное значение кода ASCII которого есть nnn (от одной до трех цифр)
\xnnn
знак, шестнадцатеричное значение кода ASCII которого есть nnn (от одной до трех цифр)
При вводе текста макрокоманды, для обозначения ее определения должны использоваться одиночные или двойные кавычки. Предполагается, что текст без кавычек является именем функции. В теле макрокоманды, экранирующие последовательности с обратной косой чертой раскрываются. Обратная косая черта будет экранировать любой другой знак в тексте макрокоманды, включая `"' и `''. Например, следующая привязка велит `C-x \' вставлять одиночную `\' в строку:
"\C-x\\": "\\"

21.3.2 Условные конструкции инициализации

Readline реализует возможности, аналогичные по смыслу возможностям условной компиляции препроцессора Си, позволяющие производить привязки клавиш и установку переменных в результате тестов. Вот четыре директивы, используемые анализатором.

$if
Конструкция $if позволяет производить привязки в зависимости от режима редактирования, используемого терминала, или приложения, использующего Readline. Содержимое теста продолжается до конца строки; для его ограничения не требуются никакие знаки.
mode
Форма mode= директивы $if используется для проверки в каком из режимов находится Readline: emacs или vi. Это может быть использовано, например, вместе с командой `set keymap' для установки привязок в наборы emacs-standard и emacs-ctlx, только если Readline запускается в режиме emacs.
term
Форма term= может использоваться для включения привязок клавиш, уникальных для какого-либо терминала, возможно для привязки вывода последовательности клавиш к функциональным клавишам терминала. Слово, стоящее справа от `=', сравнивается как с полным названием терминала, так и с частью названия, идущей до первого `-'. Это позволяет, например, опознавать как sun, так и sun-cmd.
application
Конструкция application используется для включения установок, уникальных для какого-либо приложения. Каждая программа, использующая библиотеку Readline, устанавливает application name, и вы можете проверить его. Это может быть использовано для привязки последовательностей клавиш к функциям, полезным в конкретной программе. Например, следующая команда добавляет последовательность, которая заключает в кавычки текущее или предыдущее слово в Bash:
$if Bash
# Quote the current or previous word
"\C-xq": "\eb\"\ef\""
$endif
$endif
Эта команда, как показано в предыдущем примере, заканчивает команду $if.
$else
Команды этой ветви директивы $if выполняются, если проверка заканчивается неудачей.
$include
Эта директива принимает в качестве аргумента одно имя файла и считывает из него команды и привязки клавиш.
$include /etc/inputrc

21.3.3 Пример файла инициализации

Вот пример файла inputrc. Он иллюстрирует привязки клавиш, присвоение значений переменным и синтаксис условий.

# Этот файл управляет поведением редактирования строки ввода в
# программах, использующих библиотеку Gnu Readline.  Среди таких программ
# FTP, Bash, и Gdb.
#
# Вы можете заново считать файл inputrc с помощью C-x C-r.
# Строки, начинающиеся с '#', являются комментариями.
#
# Сначала, включим все общесистемные привязки и переменные из
# /etc/Inputrc
$include /etc/Inputrc

#
# Установка различных привязок для режима emacs.

set editing-mode emacs 

$if mode=emacs

Meta-Control-h:	backward-kill-word	Текст после имени функции игнорируется

#
# Стрелки в режиме малой клавиатуры
#
#"\M-OD":        backward-char
#"\M-OC":        forward-char
#"\M-OA":        previous-history
#"\M-OB":        next-history
#
# Стрекли в режиме ANSI
#
"\M-[D":        backward-char
"\M-[C":        forward-char
"\M-[A":        previous-history
"\M-[B":        next-history
#
# Стрелки в восьмибитном режиме малой клавиатуры
#
#"\M-\C-OD":       backward-char
#"\M-\C-OC":       forward-char
#"\M-\C-OA":       previous-history
#"\M-\C-OB":       next-history
#
# Стрелки в восьмибитовом режиме ANSI
#
#"\M-\C-[D":       backward-char
#"\M-\C-[C":       forward-char
#"\M-\C-[A":       previous-history
#"\M-\C-[B":       next-history

C-q: quoted-insert

$endif

# Привязки старого стиля.  Устанавливается по умолчанию.
TAB: complete

# Макрокоманды, удобные при взаимодействии с оболочкой
$if Bash
# редактирование пути
"\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f"
# Подготовка к вводу слова в кавычках -- вставляет открывающуюся и
# закрывающуюся двойные кавычки и помещает курсор сразу за открывающей
"\C-x\"": "\"\"\C-b"
# вставляет обратную косую черту (testing backslash escapes in sequences
# and macros)  
"\C-x\\": "\\"
# Заключает в кавычки текущее или предыдущее слово
"\C-xq": "\eb\"\ef\""
# Добавляет привязку для обновления строки, которая непривязана
"\C-xr": redraw-current-line
# Редактирование переменной в текущей строке
"\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y="
$endif

# использовать визуальный звонок, если он доступен
set bell-style visible

# не урезать символы при чтении до 7 бит
set input-meta on

# позволяет ввод символов iso-latin1, вместо из преобразования к
# последовательностям с Meta-префиксом
# prefix-meta sequences
set convert-meta off

# отображает символы непосредственно с установленным восьмым битом, а не
# в виде знаков с Meta-префиксом
set output-meta on

# если существует более 150 возможных завершений слова, запросить
# пользователя, хочет ли он видеть их все
set completion-query-items 150

# Для FTP
$if Ftp
"\C-xg": "get \M-?"
"\C-xt": "put \M-?"
"\M-.": yank-last-arg
$endif

21.4 Привязываемые команды Readline

Этот раздел описывает команды Readline, которые могут быть привязаны к последовательностям клавиш.

21.4.1 Команды для перемещения

beginning-of-line (C-a)
Переместиться в начало текущей строки.
end-of-line (C-e)
Переместиться в конец строки.
forward-char (C-f)
Переместиться на один знак вперед.
backward-char (C-b)
Переместиться назад на один знак.
forward-word (M-f)
Переместиться вперед до конца следующего слова. Слова составляются из букв и цифр.
backward-word (M-b)
Переместиться назад к началу текущего или предыдущего слова. Слова составляются из букв и цифр.
clear-screen (C-l)
Очистить экран и перерисовать текущую строку, оставляя ее наверху экрана.
redraw-current-line ()
Обновить текущую строку. По умолчанию не привязана.

21.4.2 Команды для манипуляции историей

accept-line (Newline, Return)
Ввод строки независимо от положения курсора. Если строка непуста, добавить ее к списку истории. Если эта строка была строкой истории, то восстановить строку истории до ее первоначального состояния.
previous-history (C-p)
Переместиться `вверх' по списку истории.
next-history (C-n)
Переместиться `вниз' по списку истории.
beginning-of-history (M-<)
Переместиться к первой строке истории.
end-of-history (M->)
Переместиться в конец истории ввода, то есть к строке, которая сейчас редактируется.
reverse-search-history (C-r)
Обратный поиск начиная с текущей строки и перемещаясь по мере необходимости `вверх' по истории. Это наращиваемый поиск.
forward-search-history (C-s)
Прямой поиск начиная с текущей строки и перемещаясь по мере необходимости `вниз' по истории. Это наращиваемый поиск.
non-incremental-reverse-search-history (M-p)
Обратный поиск начиная с текущей строки и перемещаясь по мере необходимости `вверх' по истории, используя ненаращиваемый поиск строки, заданной пользователем.
non-incremental-forward-search-history (M-n)
Прямой поиск начиная с текущей строки и перемещаясь по мере необходимости `вниз' по истории, используя ненаращиваемый поиск строки, заданной пользователем.
history-search-forward ()
Прямой поиск в истории строки символов между началом текущей строки и точкой. Это ненаращиваемый поиск. По умолчанию эта команда не привязана.
history-search-backward ()
Обратный поиск в истории строки символов между началом текущей строки и точкой. Это ненаращиваемый поиск. По умолчанию эта команда не привязана.
yank-nth-arg (M-C-y)
Вставить первый аргумент предыдущей команды (обычно второе слово предыдущей строки). С аргументом n, вставляет n-ное слово из предыдущей команды (слова в предыдущей команде начинаются со слова 0). Отрицательный аргумент вставляет n-ное с конца слово предыдущей команды.
yank-last-arg (M-., M-_)
Вставить последний аргумент предыдущей команды (последнее слово предыдущего элемента истории). С аргументом, ведет себя точно так же, как yank-nth-arg. Последовательные вызовы yank-last-arg перемещают назад по списку истории, вставляя последний аргумент каждой строки по очереди.

21.4.3 Команды для изменения текста

delete-char (C-d)
Удалить символ в позиции курсора. Если курсор находится в начале строки, в строке нет символов и последний набранный знак не был привязан к delete-char, возвращает EOF.
backward-delete-char (Rubout)
Удалить символ за курсором. Числовой параметр предписывает уничтожать символы, а не удалять их.
forward-backward-delete-char ()
Удалить символ под курсором, если не находится в конце строки, в этом случае удаляется символ за курсором. По умолчанию, эта функция не привязана к какой-либо клавише.
quoted-insert (C-q, C-v)
Добавить в строку следующий введенный знак, каким бы он ни был. Таким образом можно вставить последовательность клавиш, например C-q.
tab-insert (M-TAB)
Вставить знак табуляции.
self-insert (a, b, A, 1, !, ...)
Эти символы вставляют сами себя.
transpose-chars (C-t)
Переместить знак перед курсором вперед за знак под курсором, также перемещая курсор вперед. Если точка вставки находится в конце строки, то переставить последние два знака в строке. Отрицательные аргументы не оказывают действия.
transpose-words (M-t)
Переместить слово перед точкой за слово после точки. Также перемещает точку за это слово.
upcase-word (M-u)
Перевести в верхний регистр текущее (или следующее) слово. С отрицательным аргументом, переводит в верхний регистр предыдущее слово, но не перемещает курсор.
downcase-word (M-l)
Перевести в нижний регистр текущее (или следующее) слово. С отрицательным аргументом переводит в нижний регистр предыдущее слово, но не перемещает курсор.
capitalize-word (M-c)
Перевести текущее (или предыдущее) слово в нижний регистр с первой заглавной буквой. С отрицательным аргументом, действует на предыдущее слово, но не перемещает курсор.

21.4.4 Уничтожение и восстановление

kill-line (C-k)
Уничтожить текст от точки до конца строки.
backward-kill-line (C-x Rubout)
Уничтожить назад до начала строки.
unix-line-discard (C-u)
Уничтожить назад от курсора до начала текущей строки.
kill-whole-line ()
Уничтожить все символы в текущей строке, независимо от позиции точки. По умолчанию эта функция не привязана.
kill-word (M-d)
Уничтожить от точки до конца текущего слова, или, если курсор находится между словами, до конца следующего слова. Границы слова такие же, как для forward-word.
backward-kill-word (M-DEL)
Уничтожить слово за точкой. Границы слова такие же, как для backward-word.
unix-word-rubout (C-w)
Уничтожает слово за точкой, используя в качестве границы слова пробелы. Уничтоженный текст сохраняется в кольцевом списке уничтожений.
delete-horizontal-space ()
Удалить все пробелы и знаки табуляции вокруг точки. По умолчанию эта функция не привязана.
kill-region ()
Уничтожить текст в текущей области. Эта функция по умолчанию не привязана.
copy-region-as-kill ()
Копировать текст области в буфер уничтожения, так что он может быть сразу восстановлен. Эта команда по умолчанию не привязана.
copy-backward-word ()
Копировать слово перед точкой в буфер уничтожений. Границы слова такие же, как для backward-word. Эта команда по умолчанию не привязана.
copy-forward-word ()
Копировать слово, следующее за точкой, в буфер уничтожений. Границы слова такие же, как для forward-word. Эта команда по умолчанию не привязана.
yank (C-y)
Восстановить вершину кольцевого списка уничтожений в буфер в текущую позицию курсора.
yank-pop (M-y)
Циклический сдвиг кольцевого списка уничтожений и восстановление новой вершины. Вы можете использовать эту команду только если предыдущей командой была yank или yank-pop.

21.4.5 Определение числовых параметров

digit-argument (M-0, M-1, ... M--)
Добавить эту цифру к вводимому аргументу, или начать новый аргумент. M-- начинает отрицательный аргумент.
universal-argument ()
Это другой способ задать аргумент. Если за этой командой следуют одна или несколько цифр, возможно со знаком минус в начале, то они определяют аргумент. Если за командой следуют цифры, повторное выполнение universal-argument заканчивает числовой аргумент, а в противном случае он игнорируется. В особом случае, если непосредственно за этой командой следует или цифра, или знак минус, аргумент для следующей команды умножается на четыре. Изначально аргумент равен единице, так что выполнение этой функции первый раз делает его равным четырем, второй раз--шестнадцати, и так далее. По умолчанию эта функция не привязана к клавише.

21.4.6 Readline вводит за вас

complete (TAB)
Пытается завершить текст перед курсором. Действие функции зависит от приложения. Обычно, если вы вводите имя файла, вы можете выполнить завершение имени файла; если вы вводите команду, вы можете завершить команду; если вводите символ для GDB, можете выполнить завершение имени символа; если вы вводите переменную для Bash, можете завершить имя переменной, и так далее.
possible-completions (M-?)
Перечислить возможные завершения текста перед курсором.
insert-completions (M-*)
Вставить все завершения текста перед точкой, которые были бы созданы possible-completions.
menu-complete ()
Аналогично complete, но замещает завершаемое слово одним совпадением из списка возможных завершений. Повторяемое выполнение menu-complete обходит список возможных завершений, вставляя каждое совпадение по очереди. В конце списка завершений издается звуковой сигнал и восстанавливается исходный текст. Аргумент n перемещает на n позиций вперед в списке совпадений; отрицательный аргумент может использоваться для перемещения по списку назад. Эта команда предназначается для привязки к TAB, но по умолчанию не привязана.
delete-char-or-list ()
Удаляет знак в позиции курсора, если он не находится в начале или конце строки (как delete-char). Если курсор находится в конце строки, поведение аналогично possible-completions. Эта команда по умолчанию не привязана.

21.4.7 Клавиатурные макросы

start-kbd-macro (C-x ()
Начать сохранение вводимых символов в текущий клавиатурный макрос.
end-kbd-macro (C-x ))
Прекратить сохранение вводимых символов в текущий клавиатурный макрос и запомнить его определение.
call-last-kbd-macro (C-x e)
Выполнить последний определенный клавиатурный макрос, выводя символы макроса так, как если бы он набирался на клавиатуре.

21.4.8 Некоторые другие команды

re-read-init-file (C-x C-r)
Считать содержание файла inputrc, и подключить любые найденные там привязки клавиш и присвоения переменных.
abort (C-g)
Прервать текущую команду редактирования и издать звук на терминале (зависит от установки bell-style).
do-uppercase-version (M-a, M-b, M-x, ...)
Если метафицированный знак x находится в нижнем регистре, выполнить команду, привязанную к соответствующему символу в верхнем регистре.
prefix-meta (ESC)
Метафицировать следующий введенный вами символ. Это для клавиатур, не имеющих клавиши Meta. Ввод `ESC f' эквивалентен вводу M-f.
undo (C-_, C-x C-u)
Наращиваемая отмена, запоминаемая отдельно для каждой строки.
revert-line (M-r)
Отменить все изменения, сделанные в этой строке. Это аналогично выполнению достаточного числа раз команды undo, чтобы вернуться в начало.
tilde-expand (M-~)
Выполнить раскрывание знака тильды для текущего слова.
set-mark (C-@)
Установить отметку в текущей точке. Если задан числовой аргумент, отметка устанавливается в указанной позиции.
exchange-point-and-mark (C-x C-x)
Поменять местами точку и отметку. Текущая позиция курсора устанавливается в сохраненную позицию, а старое положение курсора запоминается как отметка.
character-search (C-])
Считывается символ, и точка перемещается к следующему появлению этого символа. Отрицательный аргумент производит поиск вхождения символа в обратном направлении.
character-search-backward (M-C-])
Считывается символ, и точка перемещается к предыдущему появлению этого символа. Отрицательный аргумент производит поиск последующих вхождений символа.
insert-comment (M-#)
Значение переменной comment-begin вставляется в начало текущей строки, и строка вводится, так как если бы был введен знак ввода строки.
dump-functions ()
Напечатать все функции и их привязки к клавишам в выходной поток Readline. Если задан числовой аргумент, вывод форматируется так, что он может быть сделан частью файла inputrc. По умолчанию, эта команда не привязана.
dump-variables ()
Напечатать все устанавливаемые переменные и их значения в выходной поток Readline. Если задан числовой аргумент, вывод форматируется так, что он может быть сделать частью файла inputrc. Эта команда по умолчанию не привязана.
dump-macros ()
Напечатать все последовательности клавиш Readline, привязанные к макросам, и выводимые ими строки. Если задан числовой аргумент, вывод форматируется так, что он может быть сделан частью файла inputrc. Эта команда по умолчанию не привязана.

21.5 Режим vi Readline

Хотя библиотека Readline не имеет полного набора функций редактирования vi, она все же содержит достаточно для простого редактирования строки. Режим vi Readline функционирует так, как определено в стандарте POSIX 1003.2.

Для интерактивного переключения между режимами редактирования emacs и vi, используйте команду M-C-j (toggle-editing-mode). По умолчанию, Readline использует режим emacs.

Когда вы вводите строку в режиме vi, вы уже находитесь в режиме `вставки', как если бы вы набрали `i'. Нажатие ESC переключает вас в `командный' режим, в котором вы можете редактировать текст строки стандартными клавишами перемещения vi, перемещаться к предыдущим строкам истории посредством `k' и к последующим строкам посредством `j', и так далее.


[Содержание]   [Назад]   [Пред]   [Вверх]   [След]   [Вперед]