Sublime Text Plugin - 如何获取当前语法的注释块类型

时间:2016-10-05 09:30:54

标签: comments sublimetext2 sublimetext3 sublime-text-plugin

我正在为Sublime Text编写一个插件,我希望使用这些字符来添加带有文档当前语法的注释。

e.g。

  • Python - > #
  • PHP - > //
  • C - > //
  • C ++ - > //
  • .ini - > ;
  • ...

当然,我可以使用

view.run_command('toggle_comment', {'block': True})

但我不想添加评论,我想知道我应该使用的字符...

有什么想法吗?

  

我看了documentation,但我找不到任何东西

1 个答案:

答案 0 :(得分:3)

您可以使用view.meta_info('shellVariables', 0)获取为当前文档的语法定义的shellVariables数组。

(第二个参数,我指定0,表示查询视图中的位置(a.k.a point in official terminology),这对包含嵌入式语法的视图很有用,即PHP / HTML / JS)< / p>

<强>示例:

在Python文件中,它返回:

[{'name': 'TM_COMMENT_START', 'value': '# '}, {'name': 'TM_LINE_TERMINATOR', 'value': ':'}]

在XML文件上返回:

[{'name': 'TM_COMMENT_END', 'value': ' -->'}, {'name': 'TM_COMMENT_START', 'value': '<!-- '}]

在JavaScript文件中:

[{'name': 'TM_COMMENT_END_2', 'value': '*/'}, {'name': 'TM_COMMENT_START', 'value': '// '}, {'name': 'TM_COMMENT_START_2', 'value': '/*'}]

如您所见,数组中的相关字典项的nameTM_COMMENT_START,对于块注释,还会有TM_COMMENT_END。支持单行注释和阻止注释的JavaScript等语法也可以使用_2后缀的相同名称。

因此,让角色开始评论的代码可能如下所示:

comment_characters = [var['value'] for var in view.meta_info('shellVariables', 0) if var['name'] == 'TM_COMMENT_START'][0]