Эквивалент Bash ESC-p Tcsh для перехода к команде, начиная с того, что вы набрали до сих пор

Недавно я сделал безумно давно назревший переход с tcsh на bash. Единственное, чего мне не хватает, так это функции tcsh ESC+p: начните вводить команду, а затем нажмите ESC+p. (На самом деле я обнаружил, что эквивалентную Ctrl-[p легче набирать), и она переходит к самой последней команде в вашей истории, которая начинается с того, что вы набрали до сих пор.

Возможно, лучший ответ — просто привыкнуть к Ctrl+r в bash, но пока мне это не очень нравится. Я часто начинаю вводить команду, а потом мне приходит в голову, что я уже давал ее раньше. С функцией tcsh я мог затем нажать ESC+p+Enter, чтобы перевыпустить его. Это так быстро, что я обычно никогда не использую стрелку вверх для чего-либо более чем на 2 команды назад.

Пример того, что мне особенно понравилось: Длинные команды часто начинаются с точки, потому что они имеют форму

./myprogram.pl -lots -of -args -and -switches

В tcsh я бы выдал такую ​​команду, потом, может быть, ls, less, tail, что угодно, а затем, чтобы повторить длинную команду, 4 клавиши: точка, escape, p, энтер.

Как я могу сделать это в Баше? Или, чтобы конкретизировать, каково наименьшее количество нажатий клавиш в bash, чтобы сказать «повторить последнюю команду, начинающуюся с точки»? Может ли он соответствовать или превзойти tcsh 4?


person dreeves    schedule 21.06.2010    source источник
comment
Мне нужно было обратное, чтобы я мог сделать среду tcsh, с которой я застрял на работе, функциональной. Теперь я знаю: \ep. И я могу использовать bindkey, чтобы вернуть его к Shift-стрелке вверх, как я привык. Спасибо :).   -  person Chinasaur    schedule 28.06.2011
comment
Попробуйте решение здесь: superuser.com/questions/351543/ bashs-equivalent-of-tcshs-escp Сработало для меня.   -  person    schedule 20.02.2014
comment
У меня есть доступ к esc-p в bash, хотя вам нужно сначала подумать об его использовании, иначе вам придется снова вводить данные...   -  person Alexis Wilke    schedule 29.07.2016


Ответы (4)


Добавьте это в свой файл ~/.inputrc:

"\e[5~": history-search-backward
"\e[6~": history-search-forward

Это заставит PageUp действовать так же, как Esc+p в tcsh, а PageDown будет двигаться вперед по списку.

Вместо этого вы можете связать \ep. Если вы используете PageUp / PageDown, вам может понадобиться посмотреть, какую последовательность символов создает ваша клавиатура/терминал. Просто нажмите Ctrl+V, затем PageUp, и вы увидите ^[[5~, если это то же самое, что и \e[5~.

person Dennis Williamson    schedule 21.06.2010
comment
Как искать команду с аргументами в кавычках в tcsh? command 'argument1 argument2 <esc+P> не работает - person Jean; 05.03.2019
comment
@Jean: Это работает для меня. Возможно, вам следует задать новый вопрос и указать все детали. - person Dennis Williamson; 05.03.2019

Я был в той же лодке, что и вы, мне нужно было переключиться на bash с tcsh.

Я только что создал новый файл ~/.inputrc следующим образом, и все отлично работает!

$ cat ~/.inputrc
"\ep": history-search-backward
"\en": history-search-forward
person Foo    schedule 21.06.2010
comment
Это близко, но не совсем так, потому что tcsh перемещает курсор в конец строки, а bash/readline оставляет его на месте. - person George; 12.09.2011

Лично я предпочитаю ctrl-r - это интерактивный поиск по истории - посмотрите, может понравится. Последующие нажатия ctrl-r позволяют перейти к следующему совпадению.

person Community    schedule 21.06.2010
comment
Я, конечно, готов быть убежденным на этот счет. Сколько нажатий клавиш необходимо для моей повторной последней команды, начинающейся с точки, например, с использованием Ctrl-R? (Я думаю, что, поскольку тонны команд с тех пор будут содержать точки, это своего рода нестартер для ctrl-r, но, возможно, есть трюк, которого я не знаю.) - person dreeves; 22.06.2010

Ну, ты можешь сделать

!.

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

person ire_and_curses    schedule 21.06.2010
comment
Ого, точно, спасибо! Но на самом деле мне это не так нравится, как версия tcsh, потому что (а) она требует предусмотрительности, чтобы начать с удара вместо того, чтобы просто набирать начало команды (или, конечно, ctrl-a !), и (б) она выполняется немедленно. Я хотел бы перейти к этой команде, но у меня есть возможность отредактировать ее или убедиться, что это та команда, которую я хотел. Тем не менее, вы прибили конкретную версию вопроса! (Обратите внимание, что это 3 символа, а не 2, так как я включил последний Enter.) - person dreeves; 21.06.2010
comment
@dreeves - Да, вы правы - это не решает проблему предусмотрительности, а только вашу конкретную перефразировку. Похоже, у вас есть хороший ответ от Денниса Уильямсона на этот счет. Я добавил ввод, чтобы соответствовать вашему описанию. - person ire_and_curses; 21.06.2010