Автодополнение по истории.

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
jojahti
Сообщения: 310

Автодополнение по истории.

Сообщение jojahti »

Должна же быть такая фича, что набираешь команду, тыцкаешь какую-нибудь кнопочку и выводится список из введённых ранее строк, с возможностью выбрать нужную, ну типа как в винде F7 в консоли.

Ещё можно набрать часть команды и нажатиями вверх/вниз выбирать варианты автодополнения из истории.
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Автодополнение по истории.

Сообщение allez »

jojahti писал(а):
24.05.2011 14:34
Должна же быть такая фича, что набираешь команду, тыцкаешь какую-нибудь кнопочку и выводится список из введённых ранее строк, с возможностью выбрать нужную, ну типа как в винде F7 в консоли.
Нажатие Ctrl+R и последующий ввод подстроки для поиска чем-то не пришлись ко двору?

jojahti писал(а):
24.05.2011 14:34
Ещё можно набрать часть команды и нажатиями вверх/вниз выбирать варианты автодополнения из истории.
Попробуйте начать набирать команду, а затем понажимать PgUp и PgDown.
Спасибо сказали:
neol
Сообщения: 600
ОС: Debian Stable

Re: Автодополнение по истории.

Сообщение neol »

Если вы помните кусочек команды которую хотите найти, то можно просто
нажать в bash'e комбинацию Ctrl + R и набрать этот кусочек. bash вам
покажет последнюю команду с такой подстрокой. Можно продолжать
нажимать Ctrl + R и bash будет выдавать более старые подходящие
команды, подходящие под искомую строку.

http://www.opennet.ru/base/sys/bash_tips.txt.html

Гораздо приятнее поиск реализован в FreeBSD для tcsh (набираем пару первых букв нужной команды и стрелками вверх и вниз ищем по истории). В bash можно тоже так сделать:

host$ cat .inputrc
"\e[A":history-search-backward
"\e[B":history-search-forward

http://blog.ronix.net.ua/2009/04/bash.html

Лично я использую второй вариант, но с кнопками PgUp/PgDown:
"\e[5~": history-search-backward
"\e[6~": history-search-forward
Спасибо сказали:
Аватара пользователя
jojahti
Сообщения: 310

Re: Автодополнение по истории.

Сообщение jojahti »

neol
Гораздо приятнее поиск реализован в FreeBSD для tcsh (набираем пару первых букв нужной команды и стрелками вверх и вниз ищем по истории).

Кстати да, у меня freebsd, и наверное там tcsh. Вот тока он зараза по табу список возможных автодополнений не пишет.

Можно продолжать
нажимать Ctrl + R и bash будет выдавать более старые подходящие

Во, сойдёт.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Автодополнение по истории.

Сообщение sash-kan »

нажимаете ctrl+r, вводите строку. по мере ввода строка будет дополняться до последнего совпадения с историей.
ctrl+r — листание по истории вверх
ctrl+s — листание по истории вниз

вторая комбинация (ctrl-s) часто перехватывается самим терминалом.
у меня по этому поводу используются две команды:
stty ixany
stty ixoff -ixon
что оно там точно делает, уже не помню. смотрите man stty.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: Автодополнение по истории.

Сообщение ZyX »

sash-kan писал(а):
24.05.2011 15:42
нажимаете ctrl+r, вводите строку. по мере ввода строка будет дополняться до последнего совпадения с историей.
ctrl+r — листание по истории вверх
ctrl+s — листание по истории вниз

вторая комбинация (ctrl-s) часто перехватывается самим терминалом.
у меня по этому поводу используются две команды:
stty ixany
stty ixoff -ixon
что оно там точно делает, уже не помню. смотрите man stty.

Что конкретно делает ixoff и ixon мне как-то не стало понятно после прочтения справки, а за ixany спасибо. Кстати, а нельзя ли с readline сделать что-то вроде

~/.zshrc (Created by format.vim)

bindkey -M isearch "\C-n" "history-incremental-pattern-search-forward" bindkey -M isearch "\C-p" "history-incremental-pattern-search-backward"


, то есть переопределить привязки к <C-n> и <C-p> только для режима поиска?
Спасибо сказали:
Аватара пользователя
alv
Бывший модератор
Сообщения: 7275
Статус: Пенсионер в законе
ОС: Cintu

Re: Автодополнение по истории.

Сообщение alv »

sash-kan
Саша, ну ты же сам лет сэм-восэм назад описал, как в bash'е сделать tcsh-подобный инкрементный поиск, я у тебя тогда это слямзил. Здесь же, кстати, и описал :)
Как это сделать в zsh'е - описал ваш покорный слуга. В почти всех установках tcsh - это искаропки. Если такого нет - в некоторых дистрах Линукса, при установке из пакета - опять же описано, как сделать. И давным-давно.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Автодополнение по истории.

Сообщение sash-kan »

alv
если речь про это: http://posix.ru/shell/bash_tab/
то, согласно дате, писалось это всего пять лет назад.
и, конечно, давно благополучно забылось.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Автодополнение по истории.

Сообщение sash-kan »

ZyX писал(а):
25.05.2011 00:38
Что конкретно делает ixoff и ixon мне как-то не стало понятно после прочтения справки
-ixon отключает преобразование ctrl+s и ctrl+q в xoff и xon.
ixoff разрешает посылку xoff/xon как таковых. не помню уж, чем их там альтернативно можно послать, раз отключены (более или менее) стандартные заменители в виде ctrl+s/ctrl+q. может, кнопкой pause? у меня нет такой на клавиатуре, не могу проверить.

ZyX писал(а):
25.05.2011 00:38
только для режима поиска
насколько мне помнится, в readline нет подобных «режимо-зависимых» привязок.
если вам сочетание crtl+n/ctrl+p нравится больше, чем crtl+r/crtl+s, то, конечно, можно переопределить.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: Автодополнение по истории.

Сообщение ZyX »

sash-kan писал(а):
25.05.2011 12:47
ZyX писал(а):
25.05.2011 00:38
Что конкретно делает ixoff и ixon мне как-то не стало понятно после прочтения справки
-ixon отключает преобразование ctrl+s и ctrl+q в xoff и xon.
ixoff разрешает посылку xoff/xon как таковых. не помню уж, чем их там альтернативно можно послать, раз отключены (более или менее) стандартные заменители в виде ctrl+s/ctrl+q. может, кнопкой pause? у меня нет такой на клавиатуре, не могу проверить.

А как <C-s> отключить в konsole, но временно (пока запущен vim)? Stty konsole игнорирует, отключать постоянно я не хочу.
ZyX писал(а):
25.05.2011 00:38
только для режима поиска
насколько мне помнится, в readline нет подобных «режимо-зависимых» привязок.
если вам сочетание crtl+n/ctrl+p нравится больше, чем crtl+r/crtl+s, то, конечно, можно переопределить.

У меня на них ещё history-beginning-search-forward/backward (ищет в истории строки, начинающиеся так же, как часть текущей строки до курсора).
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Автодополнение по истории.

Сообщение sash-kan »

ZyX писал(а):
25.05.2011 23:37
stty konsole игнорирует
проверил в *xtem и gnome terminal. работает. если документация/гугль не смогут помочь, можно, наверно, попробовать обойтись без гордого игноранта. на крайний случай.

ZyX писал(а):
25.05.2011 23:37
У меня на них ещё history-beginning-search-forward/backward (ищет в истории строки, начинающиеся так же, как часть текущей строки до курсора).
ну, клавиш на клавиатуре, вроде, довольно много.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: Автодополнение по истории.

Сообщение ZyX »

sash-kan писал(а):
26.05.2011 02:13
ZyX писал(а):
25.05.2011 23:37
stty konsole игнорирует
проверил в *xtem и gnome terminal. работает. если документация/гугль не смогут помочь, можно, наверно, попробовать обойтись без гордого игноранта. на крайний случай.

Я не знаю адекватной замены yakuake, больше ни для чего мне konsole не нужен.
sash-kan писал(а):
26.05.2011 02:13
ZyX писал(а):
25.05.2011 23:37
У меня на них ещё history-beginning-search-forward/backward (ищет в истории строки, начинающиеся так же, как часть текущей строки до курсора).
ну, клавиш на клавиатуре, вроде, довольно много.

Здесь не в этом проблема: <C-n> и <C-p> — это сочетания «предыдущее»/«следующее» (строка/вариант автодополнения). Замена сочетания — это не решение проблемы «как сделать так, чтобы везде была одно сочетание „следующего“».
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Автодополнение по истории.

Сообщение sash-kan »

ZyX
1. ну, есть более длинный вариант — написать багрепорт разработчикам konsole.

2. по поводу сочетаний вы меня совсем запутали. вам нужно, чтобы инкрементальный поиск происходил по ctrl+n/ctrl+p — так назначьте им эти функции.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: Автодополнение по истории.

Сообщение ZyX »

sash-kan писал(а):
26.05.2011 10:31
2. по поводу сочетаний вы меня совсем запутали. вам нужно, чтобы инкрементальный поиск происходил по ctrl+n/ctrl+p — так назначьте им эти функции.
Мне нужно, чтобы у <C-n>/<C-p> остались функции «следующая/предыдущая строка» (точнее, history-search-forward/backward), но при этом во время поиска они бы работали как «следующий/предыдущий результат поиска». В zsh это возможно, но остальные (ipython, ghci) используют readline.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Автодополнение по истории.

Сообщение sash-kan »

ZyX
ещё раз повторю. в readline нет режима «поиск», «инкрементный поиск» и т.п. (с точки зрения привязок функций к вводимым символам).
единственный режим (точнее, два), где могут быть разные привязки — это "vi"/"emacs". поэкспериментируйте в эту сторону, если есть желание.
разъяснение: для инкрементального поиска переключаете режим. получаете другие привязки для нужных клавиш. переключаете режим вновь — получаете другие привязки.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: Автодополнение по истории.

Сообщение ZyX »

sash-kan писал(а):
26.05.2011 21:07
ZyX
ещё раз повторю. в readline нет режима «поиск», «инкрементный поиск» и т.п. (с точки зрения привязок функций к вводимым символам).
единственный режим (точнее, два), где могут быть разные привязки — это "vi"/"emacs". поэкспериментируйте в эту сторону, если есть желание.
разъяснение: для инкрементального поиска переключаете режим. получаете другие привязки для нужных клавиш. переключаете режим вновь — получаете другие привязки.

Способ прикольный, но не работает почему-то:

~/.inputrc (Created by format.vim)

"¢": vi-editing-mode "\C-r": "¢\C-r" set editing-mode vi "\C-n": forward-search-history "\C-p": reverse-search-history "\n": emacs-editing-mode set editing-mode emacs


Поиск не начинается, в режим vi не переключает.
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Автодополнение по истории.

Сообщение t.t »

sash-kan писал(а):
26.05.2011 10:31
ZyX
1. ну, есть более длинный вариант — написать багрепорт разработчикам konsole.

Я бы сказал: более правильный вариант. Т.к. обрабатывать ^S -- это задача командной оболочки; эмулятор терминала этого не должен делать по определению.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: Автодополнение по истории.

Сообщение ZyX »

t.t писал(а):
26.05.2011 22:43
sash-kan писал(а):
26.05.2011 10:31
ZyX
1. ну, есть более длинный вариант — написать багрепорт разработчикам konsole.

Я бы сказал: более правильный вариант. Т.к. обрабатывать ^S -- это задача командной оболочки; эмулятор терминала этого не должен делать по определению.

Я был не совсем прав: konsole игнорирует stty stop {key} (я использовал именно это для отключения <C-s>), stty -ixoff работает. Не уверен, что это является ошибкой.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Автодополнение по истории.

Сообщение sash-kan »

ZyX писал(а):
26.05.2011 21:49
set editing-mode vi
"\C-n": forward-search-history
"\C-p": reverse-search-history
"\n": emacs-editing-mode
set editing-mode emacs
гхм. вообще-то, по логике, вместо выделенного должна быть условная конструкция
$if mode=vi
...
$endif

p.s. но лучше, наверно, уточнить в исходниках. насколько помню, они довольно скромные по объёму.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Автодополнение по истории.

Сообщение t.t »

ZyX писал(а):
26.05.2011 23:07
Не уверен, что это является ошибкой.

С какой стати эмулятор терминала вообще обрабатывает C-s? Это не его задача. Какими способами это поведение удаётся или не удаётся отключить - уже дело десятое.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: Автодополнение по истории.

Сообщение ZyX »

sash-kan писал(а):
27.05.2011 02:03
ZyX писал(а):
26.05.2011 21:49
set editing-mode vi
"\C-n": forward-search-history
"\C-p": reverse-search-history
"\n": emacs-editing-mode
set editing-mode emacs
гхм. вообще-то, по логике, вместо выделенного должна быть условная конструкция
$if mode=vi
...
$endif

When a program which uses the readline library starts up, the init file is read, and the key bindings and variables are set.

Про то, что файл перечитывается при изменении раскладки ничего не написано.
писал(а):
27.05.2011 02:03
p.s. но лучше, наверно, уточнить в исходниках. насколько помню, они довольно скромные по объёму.

(man readline) писал(а):BUGS
It's too big and too slow.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Автодополнение по истории.

Сообщение sash-kan »

ZyX писал(а):
27.05.2011 17:26
Про то, что файл перечитывается при изменении раскладки ничего не написано.
понятно. заглянул в исходники (про «too big» (да и про «too slow») написано было, наверно, лет двадцать назад).
да, действительно, если rl_editing_mode не совпадает с mode, указанным в "$if", то парсинг отключается и:
/* If parsing is turned off, then nothing can turn it back on except
for finding the matching endif. In that case, return right now. */

так что я был не прав, именно editing-mode-ом надо манипулировать, чтобы писать в разные keymap-ы.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали: