Как настроить привязки ключей клиента командной строки MySQL?

Я часто использую клиент командной строки mysql на Ubuntu box. Работает нормально, за исключением того, что привязки клавиш неправильные. В частности, нажатие "Home", "End" или "Delete" приводит к выводу символа ~ (тильда) и звуковому сигналу.

Я определил, что Home/End можно сделать, нажав Control+A и Control+E соответственно, как на терминале Mac. Я использую Windows, использую PuTTY для общения с Ubuntu, но ключи home/end/delete работают нормально в обычной командной строке. Я уверен, что это проблема, специфичная для клиента MySQL.

Я проверил файл man, но не нашел ничего полезного. Есть ли способ привязать клавиши Home/End/Delete к их действительным функциям? Может быть, файл конфигурации в моем домашнем каталоге или что-то?

Каждый раз, когда я возвращаюсь на несколько позиций назад для редактирования запроса и нажимаю "Удалить", мне просто приходится снова идти вперед, чтобы я мог использовать клавишу "Backspace" для удаления не только неправильного запроса, но и ~, который вставляет ключ удаления.

Это медленно, но верно сводит меня с ума. Безумие, говорю тебе, безумие!

2 ответа

Решение

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

Это ошибка Ubuntu, появившаяся в версии 9.10, и это мой рабочий сервер. В частности, версия /usr/bin/mysql в Ubuntu 9.10 использует оболочку EditLine вместо оболочки readline:

wmartin@work:~$ mysql --version && md5sum /usr/bin/mysql && lsb_release -a

mysql  Ver 14.14 Distrib 5.1.37, for debian-linux-gnu (i486) using EditLine wrapper

e23604381e64ac805fdbb8b334ce4d17  /usr/bin/mysql

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 9.10
Release:        9.10
Codename:       karmic

Сравните с более свежим выпуском на моем домашнем сервере:

wmartin@home:~$ mysql --version && md5sum /usr/bin/mysql && lsb_release -a

mysql  Ver 14.14 Distrib 5.1.41, for debian-linux-gnu (i486) using readline 6.1

4274c43798239142576e77c022d35bd1  /usr/bin/mysql

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 10.04.2 LTS
Release:        10.04
Codename:       lucid

Версии 10.04 (и, вероятно, более поздние) работают просто отлично - mysql учитывает ключи home/end/delete, используя настройки Putty по умолчанию.

Таким образом, решение заключается в том, чтобы либо обновить сервер до 10.04 или более поздней версии, либо использовать утилиту командной строки. rlwrap чтобы обернуть клиента mysql в среду readline, как описано в сообщении в блоге, восстанавливающий возможности readline в MySQL-клиенте Ubuntu 9.10 (Karmic Koala).

К сожалению, rlwrap Подход имеет неприятный побочный эффект: ваш пароль виден, когда вы его вводите, вместо того, чтобы подавлять его вывод. Поэтому я думаю, что я возьму маршрут обновления.

Я бы сказал, что проблема в настройках PuTTY - в окне подключения, в разделе "Терминал", "Клавиатура" - измените параметры "Клавиши Дом и Конец" на rxvt, Не идеально (End не будет работать до сих пор), но вы получите Home и Delete.

IMO реальное решение состоит в том, чтобы использовать надлежащий терминал и надлежащий SSH; Console2 достаточно хорош для терминала, и MSYS или Cygwin могут предоставить вам SSH (он есть в msysgit).

Редактировать:

Похоже, вы нашли ошибку в MySQL CLI.

Другие вопросы по тегам