Стрелка вверх при пустом приглашении в ksh93

Стрелка вверх при пустом приглашении в ksh93

Это запрос на разъяснение или ссылку на документацию.

Я пользователь KornShell93 ( kshна Mac OS X или ksh93где-то еще). Мне нравится эта оболочка за ее относительную простоту в качестве интерактивной оболочки и за ее возможности скриптования, и я использую ее с тех пор, как код стал более свободным в 2000 году. Я использую ее в viрежиме редактирования, с установленными параметрами viи viraw.

Есть удобная функция, ksh93которая позволяет вам начать вводить команду в командной строке, а затем нажать Up-arrow, чтобы получить последнюю соответствующую командную строку из истории командной строки. Я могу найти документацию для этого и как это связано [count][Aв viрежиме редактирования, без проблем.

Однако, если я нажимаю Up-arrowна пустую подсказку, он сначала выдает мне последнюю выполненную команду, а затем начинает циклически проходить по любому префиксу команды, который я искал ранее. Это меня раздражает бесконечно.

Пример:

Я выполняю эти три команды:

$ ls -l
$ ls -ld test
$ ls -ld testdir

Ввод lsи последующее Up-arrowтрехкратное нажатие переключат их в обратном порядке.

Позже, с большим количеством команд, но без поиска в истории и без lsвызовов:

$ cc -o testrun mytest.c
$ man strncmp

Если я сейчас нажму Up-arrowодин раз, я получу man strncmp. Если я нажму Up-arrowеще раз, я получу ls -ld testdirи затем ls -ld testвместо команды cc -o testrun mytest.cи затем предыдущей до нее.

Я ищу указатели на то, как "исправить" это так, чтобы Up-arrowбез предварительного ввода чего-либо в командной строке циклически проходить по самой последней истории, не пытаясь искать ранее использованный префикс. Даже указатель на место, где поведение выше задокументировано, был бы хорош.

РЕДАКТИРОВАТЬ:

В ksh93руководстве говорится:

[count]k Выбрать предыдущую команду. Каждый раз kпри вводе осуществляется доступ к предыдущей команде во времени.

/string Поиск в обратном направлении по истории для предыдущей команды, содержащей string. Stringзаканчивается на RETURNили NEW LINE. Если stringпредшествует ^, совпадающая строка должна начинаться с string. Если равно null, будет использована stringпредыдущая .string

[count][A Если курсор находится в конце строки, то это эквивалентно / с stringустановкой на содержимое текущей строки. В противном случае это эквивалентно k.

Это делаетнетобъясните, почему япервыйполучить man strncmp(как будто нажимаяk ) изатемget ls -ld testdirв моем примере выше. Учитывая текст руководства, я бы ожидал получить ls -ld testdirпри первом нажатии Up-arrow(что, кстати, было бы еще более раздражающим).

решение1

Оказывается, это задокументированное поведение. Из страницы руководства ksh93:

Команды редактирования поиска Эти команды получают доступ к вашей истории команд.

[count]k Выбрать предыдущую команду. Каждый раз при вводе k осуществляется доступ к предыдущей команде назад во времени.

[count]- Эквивалентно к.

[count][AЕсли курсор находится в конце строки, то это /эквивалентнонитьустановить на содержимое текущей строки. В противном случае это эквивалентно k.

[count]j Выбрать следующую команду. Каждый раз jпри вводе осуществляется доступ к следующей команде вперед по времени.

/нить Поиск в истории предыдущей команды, содержащейнить. Нитьзавершается RETURN' orНОВОЙ СТРОКОЙ. Еслинитьпредшествует ^, сопоставляемая строка должна начинаться снить. Еслинитьравно нулю, будет использована предыдущая строка.

Примечание: При использовании клавиши «Стрелка вверх» после ввода строки, строка поиска будетякорьв начало строки, как будто ^она была напечатана спереди.

Пример:

$ ls[Up-Arrow]

эквивалентно

$ [ESC]/^ls

Связанный контент