我刚刚从旧的 MySQL 客户端升级到mariadb-clients-10.0.21-3在 Arch Linux 上。升级后,我在使用Emacs的sql-mysql
功能时不再看到提示。
它似乎mysql
正在缓冲提示,因为它显示在输出的第一行中:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 19662
Server version: 4.1.11-standard-log
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
show tables;
MySQL [dbname]> +---------------------------------------------------------+
| Tables_in_dbname |
+---------------------------------------------------------+
...
+---------------------------------------------------------+
80 rows in set (0.02 sec)
help
MySQL [dbname]>
General information about MariaDB can be found at
http://mariadb.org
List of all MySQL commands:
...
For server side help, type 'help contents'
?
MySQL [dbname]>
General information about MariaDB can be found at
http://mariadb.org
List of all MySQL commands:
...
For server side help, type 'help contents'
exit
MySQL [dbname]> Bye
在所有情况下,“”之前的行MySQL [dbname]>
都是我输入的内容。 (...
表示输出我省略。)
如何才能让提示正确显示? 我尝试过;-n
的选项mysql
它没有效果。如果我mysql
在终端中运行,它工作正常。
答案1
您忘记转义特殊字符。 Elisp-regex 的反斜杠相当重,因为第一个 \ 被 lisp 字符串吞没了。看https://www.emacswiki.org/emacs/RegularExpression
为了捕获 MariaDB 和 MySQL,我在配置中添加了以下内容:
(sql-set-product-feature 'mysql :prompt-regexp "^\\(MariaDB\\|MySQL\\) \\[[_a-zA-Z]*\\]> ")
答案2
如果添加到 .emacs,请按以下步骤操作:
(require 'sql)
(sql-set-product-feature 'mysql :prompt-regexp
"^\\(MariaDB\\|MySQL\\) \\[[_a-zA-Z]*\\]> ")
sql-set-product-feature 函数需要(require 'sql)
全局可用。
答案3
问题原来是提示与预期不符sql-mode
。 MariaDB 使用“MySQL [dbname]>”作为默认提示符,并且sql-mode
只允许“mysql>”。
因此,一种修复方法是将“--prompt=mysql>”添加到sql-mysql-options
:
(setq sql-mysql-options '("--prompt=mysql> "))
更好的方法是修复正则表达式以允许任一提示样式。但我在让它发挥作用时遇到了一些困难,所以如果有人发布如何做到这一点,我将奖励赏金。
我试过了
(sql-set-product-feature 'mysql :prompt-regexp "^[mM]y[sS][qQ][lL][^>]*> ")
但除非提示符是“mysql>”或“MySQL>”,否则它不起作用。