Есть ли psql-эквивалент истории обратного поиска bash?

17

Мне очень нравится bashистория обратного поиска (Cr) (функция командной строки):

Выполняйте поиск в обратном направлении, начиная с текущей строки и перемещаясь по истории вверх по мере необходимости. Это пошаговый поиск.

Когда я попал control-rв bash, я получаю следующее:

(reverse-i-search)`':

И я могу печатать символы ранее выполненных команд, оттачивая то, что ищу. Если я ошибаюсь, я могу войти, control-hчтобы стереть символ (эквивалент backspace).

Эта функциональность командной строки позволяет чрезвычайно легко ссылаться на ранее выполненные команды. Мне интересно, существует ли такая возможность для psql. Я считаю , что крайне неэффективно полагаться только control-pи control-n.

Для чего это стоит, я использую PostgreSQL 9.3.1 on x86_64-apple-darwin13.0.0, compiled by Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn), 64-bit- получено через Postgres.app .

user664833
источник
3
Вы Ctrl-rуже пробовали ? :)
Dezso
Конечно, и это не имеет никакого эффекта для меня. Вы предлагаете ctrl-rработы для вас?
user664833
Используйте rlwrap...
Philᵀᴹ
Я установил rlwrapчерез homebrew ( brew install rlwrap) и попробовал ( rlwrap psql) - но control-rвсе равно не работает; на самом деле, он ведет себя точно так же, как и control-rбез rlwrap(то есть ничего не происходит ). Возможно, это признак более глубокой проблемы.
user664833
6
ctrl-rобычно предоставляется библиотекой readline. Похоже, что для postgres.app существует открытая проблема по этому поводу.
Даниэль Верите

Ответы:

15

Разговор об этом на GitHub привел к временному решению «быстрого исправления» :

открыть ~/.editrcи добавить:

bind "^R" em-inc-search-prev

По-видимому, большая проблема в том, что PostgresApp использует libeditвместо libreadline. И, возможно, libeditне хватает некоторых функций командной строки libreadline, поэтому, пока PostgresApp не скомпилирован libreadline, просто воспользуйтесь приведенным выше быстрым исправлением.

user664833
источник