5.3代码自动补全

MySQL Shell支持按光标前面的文本自动补全选项卡关键。的第3.1节“MySQL Shell命令”可以在任何语言模式下自动完成。例如,键入\反对然后按下选项卡键自动完成到\连接。自动补全可用于SQL, JavaScript和Python语言关键字,取决于当前第5.1节“主动语言”

自动补全支持以下文本对象:

  • 在SQL模式中,自动完成能够识别当前活动模式的模式名、表名和列名。

  • 在JavaScript和Python模式下,自动补全意识到对象成员,例如:

    • 全局对象名称,例如会话dbdba壳牌mysqlmysqlx,等等。

    • 全局对象的成员,例如session.connect ()dba.configureLocalInstance (),等等。

    • 全局用户定义变量

    • 链式对象属性引用,例如shell.options.verbose

    • 链接X DevAPI方法调用,例如.fetchOne col.find()其中(). execute () ()

默认情况下,自动完成是启用的,要更改此行为请参见配置自动完成

激活自动补全后,如果光标前面的文本刚好有一个可能的匹配,则文本将自动补全。如果自动补全发现多个可能的匹配,它会发出嘟嘟声或让终端闪烁。如果选项卡再次按下键,显示可能完成的列表。如果没有找到匹配,则不会发生自动补全。

自动完成SQL

当MySQL Shell处于SQL模式时,自动补全尝试用所有可能匹配的补全完成任何单词。在SQL模式下,可以自动完成以下操作:

  • SQL关键字—已知SQL关键字的列表。匹配不区分大小写。

  • SQL代码段——某些公共代码段,例如显示创建表ALTER TABLE创建表,等等。

  • 表名——如果存在活动模式且数据库名称缓存未禁用,则使用活动模式的所有表作为可能的补全。

作为一个特殊的异常,如果发现反勾,则只考虑表名来完成。在SQL模式中,自动补全不感知上下文,这意味着不基于SQL语法对补全进行过滤。换句话说,自动补全选取返回选择但它也可能包括一张名为“自拍”的桌子。

自动完成JavaScript和Python

在JavaScript和Python模式中,要完成的字符串从右到左确定,从当前光标位置开始选项卡被按下。方法调用中的内容将被忽略,但必须是语法正确的。这意味着字符串、注释和嵌套方法调用都必须适当地关闭和平衡。这允许正确地处理链式方法。例如,当您发出:

print (db.user.select()。Where ("user in ('foo', 'bar')").e

按下选项卡键将导致自动补全试图补全文本其中()即db.user.select ()但是这个无效的代码会产生未定义的行为。符号之间的任何空白,包括换行符将被忽略。

配置自动完成

默认情况下,自动完成引擎是启用的。本节解释如何禁用自动完成以及如何使用\重复MySQL Shell命令。自动完成使用MySQL Shell感知的数据库名称对象缓存。当启用自动完成时,这个名称缓存将自动更新。例如,每当加载模式时,自动完成引擎会根据在模式中找到的文本对象更新名称缓存,以便您可以自动完成表名等。

要禁用此行为,您可以:

  • 启动MySQL Shell——no-name-cache命令选项。

  • 修改autocomplete.nameCache而且devapi.dbObjectHandles的钥匙shell.options禁用MySQL Shell运行时的自动完成功能。

当自动补全名称缓存被禁用时,您可以通过发出来手动更新自动补全识别的文本对象\重复。这将强制基于当前活动模式重新加载名称缓存。

要禁用MySQL Shell运行时的自动完成功能,请使用以下方法shell.options密钥:

  • autocomplete.nameCache:布尔切换SQL使用的自动完成名称缓存。

  • devapi.dbObjectHandles: boolean切换X DevAPI使用的自动补全名称缓存db对象,例如db.mytabledb.mycollection

两个键都设置为真正的默认为,设置为如果——no-name-cache命令选项。要在MySQL Shell运行时更改SQL的自动完成名称缓存,请执行以下命令:

shell.options [' autocomplete.nameCache '] = true

使用\重复命令手动更新名称缓存。

要在MySQL Shell运行时更改JavaScript和Python的自动完成名称缓存,请执行以下命令:

shell.options [' devapi.dbObjectHandles '] = true

你也可以用\重复命令手动更新名称缓存。