Sublime Text Snippet:从带连字符的文件名创建camelcased字符串

时间:2014-09-23 09:16:52

标签: angularjs sublimetext2 sublimetext3 sublimetext

我正在尝试为AngularJs创建一个Sublime Text片段。此代码段应扩展为AngularJs控制器(或服务等或任何ng组件)。在生成的代码中,它应该使用带连字符的文件名在camelCase中构造控制器名称。

例如:

当我在一个名为employee-benefits-controller.js的空文件中输入片段字符串,比如ngctrl时,它应该扩展如下:

angular.module('').controller('EmployeeBenefitsController', ['', function(){

}]);

我正在尝试使用$ TM_FILENAME变量,在其上应用正则表达式来实现此转换。如果有人已经这样做了,请告诉我们。

1 个答案:

答案 0 :(得分:2)

您可以使用以下内容:

<snippet>
    <content><![CDATA[
angular.module('${1:moduleName}').controller('${TM_FILENAME/(^|-|\.js)(.?)|/\U\2\E/g}', ['', function(){
    ${2://functionCode}
}]);
]]></content>
    <tabTrigger>ngctrl</tabTrigger>
</snippet>

说明:

注1:您可能希望更改范围,以便仅在javascript环境中触发该代码段。

注意2:我不熟悉angularjs,所以我不知道它的命名约定(我认为在连字符[ - ]字符之后和名称的开头需要一个大写字母,但是我不知道在点字符之后是否需要一个大写字符(例如)。因此,您可能需要调整代码段。

注3:表达解释: 的 $ {TM_FILENAME /(^ | - |的.js)(?)/ \ U \ 2 \ E /克}

  • TM_FILENAME 其var_name项目
  • (^ | - | .js)(。?)它的正则表达式(我们选择的变量部分)。
  • \ U \ 2 \ E 是format_string(我们如何格式化我们选择的内容)。
  • g 其选项(g表示全局,因此每次选择其给定的格式时)。
  • TM_FILENAME :包含扩展名的文件名。
  • \ U =&gt; init大写转换。 \ E =&gt;完成大写转换。 \ 2 =&gt;第二组,即第二个组合,(。?),它是一个字符或一个空字符串。
  • (^ | - | .js)(。?)首先我们查找单词的开头( ^ ),或者查找超级字符( - ),或扩展名( .js )。
  • (。?)然后我们在括号组(第二组)中选择该超级后的字符(如果有的话)(或在单词的开头或扩展后)。
  • 最后,我们使用所选字符的大写转换,如上所述。请注意,由于扩展后没有字符,我们只是从输出中删除扩展名。

注意4:正如您可能知道的那样,使用 $ {1:moduleName} $ {2:// functionCode} 可以让您快速移动(使用标签)并在片段被触发后编辑片段的重要部分,例如模块或功能代码。