use*_*035 3 emacs yasnippet sql-interactive-mode
我正在使用 sql-interactive-mode 连接到 2 个数据库:MySQL 和 SQLite。我在yasnippets/sql-interactive-mode
文件夹中为 mysql 创建了 yasnippets。例如,要在 MySQL 中添加一列,我使用以下代码片段:
# -*- mode: snippet -*-
# name: Add column
# key: addcol
# --
ALTER TABLE $1 ADD COLUMN \`$2\` $3;
Run Code Online (Sandbox Code Playgroud)
但 SQLite 使用不同的语法。如何为不同的数据库创建不同的 yasnippets?
正如此处所解释的,您可以将任意 Emacs Lisp 代码(用反引号括起来)添加到yasnippet
代码片段中,这些代码片段将在展开时进行评估。其中有一个名为的变量,您可以检查该变量以确定您当前正在使用哪种类型的数据库( 、 、sql-mode
等)。sql-interactive-mode
sql-product
mysql
sqlite
postgres
这基本上就是您需要知道的全部内容。以下是如何修改代码片段的示例addcol
:
# ...
ALTER TABLE $1 `(if (eq sql-product 'mysql) "ADD" "FROB")` COLUMN \`$2\` $3;
Run Code Online (Sandbox Code Playgroud)
这将扩展到
ALTER TABLE $1 ADD COLUMN \`$2\` $3;
Run Code Online (Sandbox Code Playgroud)
对于mysql
和
ALTER TABLE $1 FROB COLUMN \`$2\` $3;
Run Code Online (Sandbox Code Playgroud)
对于其他类型的数据库。