【问题标题】:How can I make Sublime Text's "Improved Native for-loop" increment like a normal for-loop?如何使 Sublime Text 的“改进的原生 for 循环”像普通的 for 循环一样增加?
【发布时间】:2015-09-29 21:18:00
【问题描述】:

前提

在 Sublime Text 3 中,在编写 JavaScript 时,键入“for”会触发插入两个可能的代码 sn-ps 之一:

for (... {... (Improved Native For-Loop)

for (var i = Things.length - 1; i >= 0; i--) {
    Things[i]
};

for (...) {...}

for (var i = 0; i < Things.length; i++) {
    Things[i]
};

因为原因

reverse iteration through for loops has better performance 已经有一段时间了。但是这样做意味着每个基于数组的操作都必须向后执行,并且会导致代码变得不那么可读。在大多数情况下,所有这些麻烦都是为了最小的性能改进。

不幸的是,“改进的本机 For-Loop”是第一个建议,当意外选择它而不是不与典型数组约定混淆的正常可读循环时,可能会导致一些烦人的情况迭代。

问题

  • 那么,如何改变 Sublime Text 的行为,使其不自动添加这些奇怪的 for 循环?即,如何删除该 sn-p 建议?
  • 有没有办法在使用更传统的 for 循环结构的同时保持轻微的性能提升?如何将其用作 Sublime Text sn-p?

【问题讨论】:

    标签: javascript for-loop sublimetext3 code-snippets


    【解决方案1】:

    清除异端片段

    要删除“改进”for-loop sn-p,请在您的包文件夹(Preferences>Browse Packages)中创建一个名为“JavaScript”的文件夹,然后创建一个名为"for-()-{}-(faster).sublime-snippet" 的文件在 JavaScript 文件夹中。在此文件中,放置以下内容:

    <snippet>
        <content><![CDATA[$1]]></content>
    </snippet>
    

    保存并重新启动 Sublime。这将禁用内置的 bass-ackwards "Improved" loop sn-p 建议。此时,只有普通的for (...) {...} sn-p 会被激活。

    关于反向 For 循环

    递减不会提供任何性能提升。性能提升仅是由于减少了必须计算数组长度的次数:使用for(i=0;i&lt;Things.length;++i),每次迭代都会计算Things.length;对于for(i=Things.length-1; i&gt;=0; --i)Things.length 只计算一次。 (见here。)

    通过使用以下语法声明一个新变量来保存Things.length 的值,可以获得这种轻微的性能提升:

    for (var i = 0, l = Things.length; i < l; ++i) {}
    

    创建替换片段

    为了替换默认的捆绑“改进”for循环,我们将上述语法添加到for-()-{}-(faster).sublime-snippet文件中。为了确保两个Things 占位符都被选中,我们使用${1:Things}。新的 sn-p 文件内容应如下所示:

    <snippet>
        <content><![CDATA[for (var i=0, il=${1:Things}.length; i<il; ++i) {
        ${1:Things}[i];
    }]]>
        </content>
        <tabTrigger>for</tabTrigger>
        <scope>source.js</scope>
        <description>for (... {... Custom Improved For-Loop</description>
    </snippet>
    

    确保 sn-p 是 properly indented请注意,缩进时必须使用制表符而不是空格。保存并重启 Sublime。

    如果您想为另一种语言创建类似的循环,请将内容复制到一个新文件中,并将内容和范围调整为该语言。编码愉快。

    编辑:一些更高级的片段

    这些是我目前使用的一些 sn-ps,它们更高级,因为它们使用多个字段(点击选项卡在字段之间切换)。此外,还有一个嵌套循环 sn-p 可通过键入 forfor 访问。

    文件名:for-()-{}-(faster).sublime-snippet

    <snippet>
        <content><![CDATA[for (var ${1:i}=0, ${1:i}l=${2:Things}.length; ${1:i}<${1:i}l; ++${1:i}) {
        ${2:Things}[${1:i}];
    }]]>
        </content>
        <tabTrigger>for</tabTrigger>
        <scope>source.js</scope>
        <description>for (... {... Custom Improved For-Loop</description>
    </snippet>
    

    文件名:for-nested-js-(faster).sublime-snippet

    <snippet>
        <content><![CDATA[for (var ${1:i}=0, ${1:i}l=${2:condition}; ${1:i}<${1:i}l; ++${1:i}) {
         for (var ${3:j}=0, ${3:j}l=${4:condition}; ${3:j}<${3:j}l; ++${3:j}) {
            ${5:statement};
         }
    }]]>
        </content>
        <tabTrigger>forfor</tabTrigger>
        <scope>source.js</scope>
        <description>for(..){for... Faster Nested For-Loop</description>
    </snippet>
    

    【讨论】:

    • 感谢您的解释
    • 没问题。我已经切换到 Atom(Linux 上的问题更少); sn-p 支持非常相似,调整它们很简单。如果有机会,我建议您尝试一下。
    猜你喜欢
    • 2012-07-18
    • 2013-07-03
    • 1970-01-01
    • 2013-08-04
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 1970-01-01
    相关资源
    最近更新 更多