ctrl+shift+p filters: :st2 :st3 :win :osx :linux
浏览

表达式

作者:shagabutdinov 全部

额外的源代码导航快捷键

详细信息

  • 2018.01.19.09.57.19
  • github.com
  • github.com
  • 7年前
  • 10分钟前
  • 10年前

安装次数

  • 总数 6K
  • Win 3K
  • Mac 2K
  • Linux 1K
8月6日 8月5日 8月4日 8月3日 8月2日 8月1日 7月31日 7月30日 7月29日 7月28日 7月27日 7月26日 7月25日 7月24日 7月23日 7月22日 7月21日 7月20日 7月19日 7月18日 7月17日 7月16日 7月15日 7月14日 7月13日 7月12日 7月11日 7月10日 7月9日 7月8日 7月7日 7月6日 7月5日 7月4日 7月3日 7月2日 7月1日 6月30日 6月29日 6月28日 6月27日 6月26日 6月25日 6月24日 6月23日
Windows系统 0 0 0 0 0 1 0 0 3 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0
Mac系统 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Linux系统 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

README

源代码
raw.githubusercontent.com

表达式

这是一个真正令人赞叹的插件,它提供了许多sublime-enhanced插件以及其他大量导航键盘快捷键所使用的API。

演示

安装

此插件是sublime-enhanced插件集的一部分。您可以安装sublime-enhanced插件,此时该插件将自动安装。

如果您希望单独安装此插件,请参阅sublime-enhanced插件包中的“单独安装插件”部分。

使用方法

根据下表使用键盘快捷键在打开的文件中导航。

命令

描述 键盘快捷键
转到上一块 ctrl+i
转到下一块 ctrl+k
选择上一块 ctrl+shift+i
选择下一块 ctrl+shift+k
转到下一个括号的末尾 ctrl+alt+\
转到括号内的前一个位置 alt+enter
转到括号或字符串外的上一个位置 alt+shift+enter
转到下一个括号或字符串外的位置 ctrl+shift+enter
转到括号内的上一个位置 alt+ctrl+退格键
转到括号或字符串外的上一个位置 alt+shift+退格键
转到括号或字符串外的上一个位置 alt+ctrl+shift+退格键
转到匹配的括号或引号 ctrl+alt+enter
在括号或字符串内选择 alt+ctrl+shift+enter
选择包括包裹在内的括号或字符串 alt+ctrl+shift+\
删除括号或字符串内的内容 ctrl+alt+shift+\
选择到括号或引号内的位置 alt+shift+\
选择到括号或引号外的位置 ctrl+shift+\
删除括号或字符串后的内容 alt+退格键
删除括号或字符串内的内容 ctrl+alt+\
转到下一个括号或字符串的位置 alt+ctrl+l
选择括号或字符串前进 alt+ctrl+shift+l
向后查找括号或字符串 ctrl+alt+j
选择括号或字符串向后 ctrl+alt+shift+j
向前清理括号或引号 ctrl+/
向后清理括号或引号 ctrl+退格键
向前查找搜索结果 alt+enter
向后查找搜索结果 alt+shift+enter

API

朋友们,此插件的API有些臃肿;对此表示歉意。

find_matches(view, cursor, expression, options = {})

描述

根据光标和选项过滤表达式,在视图中查找所有匹配项。

参数

  • view - 查找括号的视图

  • cursor - int; 从视图中匹配表达式的点

  • expression - string; 要匹配的正则表达式

  • options

    “backward” - bool; 是否从光标向前或向后查找匹配项;注意,匹配项将按从最近到最远的顺序排序。

    “range” - [int, int]; 查找匹配项的视图中的范围;注意,将调用 view.substr(sublime.Region(*options['range'])),为找到匹配项的位置,您需要显式地将 options['range'][0] 添加到 match.start(group) 或 match.end(group)

    “nesting” - 如何处理括号;True - 允许在括号内匹配;False 或 “start” - 禁止 match.start(0) 在括号内匹配;“end” - 禁止 match.end(0) 在括号内匹配;int - 禁止 match.start(int) 在括号内匹配;int 的数组 - 禁止数组中的每个元素在括号内匹配

    “in_current_nesting” - bool; 仅在当前括号内查找

    “string” - 与 “nesting” 选项类似,但用于字符串(不允许指定的正则表达式组击中字符串)

    “comment” - 与 “nesting” 选项类似,但用于注释(不允许指定的正则表达式组击中注释)

    “scope” - regexp; 组的适用范围,应在 “scope_groups” 中指定的应匹配此正则表达式;这很有用,当您需要仅匹配运算符或关键字或其他特定范围时;如果您需要忽略某些范围,可以指定否定前瞻(例如 (?!.*operator) - 不要匹配 “operator” 范围)

    “scope_groups” - 与 “nesting” 类似,但用于 “scope” 选项(指定正则表达式组的适用范围应匹配 “scope” 选项)

    “cursor” - 与 “nesting” 类似,但用于光标点(不允许指定的正则表达式组超出根据 “backward” 选项指定的光标)

    “limit” - 您需要多少个匹配项

结果

匹配项列表。

注释

我发现正则表达式查找很快,但过滤很慢,大量匹配项(>2k行)可能会很慢,甚至对于简单的正则表达式也是真的。因此,在可能的情况下指定 'range' 和 'limit' 以减少执行时间。

我可能将这部分或整个库重写,以尽量减少执行时间和清理库的接口。

示例

from Expression import expression

  class MyCommand(sublime_plugin.TextCommand):
    def run(self, edit):
      # find three last r'("|\')(\s*)(+)' before cursor where (\s*)(+) is not
      # string and (+) is operator

      options = {
        'nesting': False,
        'scope': r'operator',
        'scope_groups': [2],
        'string': [2, 3],
        'limit': 3,
        'backward': True
      }

      print(expression.find_matches(self.view, self.view.sel()[0].b,
        r'("|\')(\s*)(+)', options))
find_match(view, cursor, expression, options = {})

描述

类似于 find_matches,但返回一个匹配项或如果没有找到匹配项则返回 None。仅作为一个辅助工具。

get_nesting(view, cursor, search_range = None, options = {}, expression = r'[({[]')

描述

获取围绕光标的括号内的位置。注意,它将返回括号内的位置,例如对于 “(value)” 位置将是 “v” 和 “)”。

参数

  • view - 查找括号的视图

  • cursor - int,查找括号的视图中的点

  • search_range - int 或 [int, int] 数组,用于分析多少个符号;如果有数组传入,第一个元素将用于向后计数,第二个元素将用于向前计数字节来分析

  • options - 包含选项的字典(如上所述描述选项)

  • expression - 用于查找第一个括号的正则表达式

结果

包含两个整数或如果没有找到则返回 None 的数组。

示例

from Expression import expression

  class MyCommand(sublime_plugin.TextCommand):
    def run(self, edit):
      cursor = self.view.sel()[0].b
      print(expression.get_nesting(self.view, cursor, 1024, {}, r'\('))

还有更多一些方法,但可能我会将它们添加到“废弃”中,因为没有必要使用它们。

查找和 find_match 的附加选项

查找匹配可接收“开始”和“结束”选项,这些选项控制最终的结果“开始”和“结束”位置。

该选项可以接受以下值

  • “开始” - (“开始”默认值)返回正则表达式的起始位置

  • “结束” - (“结束”默认值)返回整个正则表达式的结束位置

  • “首次非空” - 第一个非空组

  • “末次非空” - 最后一个非空组

  • 整数 - (组号)返回指定组的起始位置

  • 整数列表 - (组号)返回第一个非空组的起始位置

示例

_, position, _ = lookup(self.view, 0, r'\(', {"start": "end"}) # 返回下一个括号之后的起始位置

依赖项