【问题标题】:Sublime Text Plugin - How can I get the comment block type of the current syntaxSublime Text Plugin - 如何获取当前语法的注释块类型
【发布时间】:2016-10-05 09:30:54
【问题描述】:

我正在为 Sublime Text 编写一个插件,我想获取用于添加具有文档当前语法的注释的字符。

例如

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

当然,我可以使用

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

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

有什么想法吗?

我查看了这个documentation,但没有找到任何东西

【问题讨论】:

    标签: comments sublimetext2 sublimetext3 sublime-text-plugin


    【解决方案1】:

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

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


    示例:

    在 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': '/*'}]
    

    如您所见,数组中的相关字典项有TM_COMMENT_STARTname,对于块cmets,也会有TM_COMMENT_END。支持单行 cmets 和块 cmets 的 JavaScript 等语法也可以具有相同的名称,带有 _2 后缀。


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

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

    【讨论】:

    • 非常感谢您的帮助!这很奇怪next(iter(view.meta_info('shellVariables', 0)), lambda check: check['name'] == 'TM_COMMENT_START')['value'] 返回 TM_COMMENT_END
    • 这确实很奇怪 - 这是什么语法?
    • 我测试了PHP : */HTML: --&gt;
    • 好的,我将把我的建议改为:comment_characters = [var['value'] for var in view.meta_info('shellVariables', 0) if var['name'] == 'TM_COMMENT_START'][0],感谢您指出!
    • 我已经logged an issue 要求将此meta_info 方法添加到官方文档中:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 2014-11-12
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 2017-10-29
    • 2018-11-23
    相关资源
    最近更新 更多