【问题标题】:How to edit built in command behavior如何编辑内置命令行为
【发布时间】:2014-06-02 17:07:26
【问题描述】:

我想编辑 find_under_expand (ctrl+d) 以将连字符的单词视为单个单词。因此,当我尝试替换 var a 的所有实例时,它不应该匹配诸如 a-b 之类的单词中的“a”子字符串,而它目前确实如此。

我假设 find_under_expand 将您当前的选择包装在正则表达式边界中,如下所示:\ba\b

我需要把它包装成这样的东西:\b(?<!-)a(?!-)\b

find_under_expand 命令的源代码可以编辑吗?还是我必须重写整个事情?我不知道从哪里开始。

【问题讨论】:

    标签: sublimetext2 sublimetext sublimetext3 sublime-text-plugin


    【解决方案1】:

    Sublime 的命令以以下几种方式之一实现:macrosplugins,以及在内部作为编译程序的一部分(可能是 C++)。默认的宏和插件可以在ST2的Packages/Default目录中找到(其中Packages是选择Preferences -> Browse Packages...时打开的目录),或者压缩在ST3的Installed Packages/Default.sublime-package文件中,可使用 @skuroda 出色的 PackageResourceViewer 插件提取,可通过 Package Control 获得。宏具有.sublime-macro 扩展名,而插件是用Python 编写的并具有.py 扩展名。

    我在 ST3 中搜索了所有 Defaults 包(内容通常与 ST2 中相同),但找不到包含 find_under_expand 命令或 FindUnderExpand 的宏或 .py 文件,这是在插件中命名命令类时的约定。因此,我强烈怀疑这个命令是 Sublime 内部的,可能是用 C++ 编写并链接到可执行文件或.dll|.dylib|.so 库中。

    因此,您似乎没有可以轻松修改现有文件以调整负面的前瞻/后瞻模式(我假设就是这样,我的正则表达式有点生疏......)。相反,您必须从头开始实现自己的插件,读取设置文件中的"word_separators" 值,从您的previous question 和我自己的判断来看,find_under_expand 的当前实现似乎没有这样做测试。从理论上讲,这应该不会太难——您可以打开一个快速面板,用户在其中输入要搜索的模式/正则表达式,您可以遍历当前视图以查找匹配项并突出显示/选择它们。

    祝你好运!

    【讨论】:

    • 很棒的答案,很多详细的信息,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 2016-03-22
    • 2010-10-30
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多