我有一个进程,包含创建类似的文件/文件名结构,里面有自己的名字,这样的事情,我每天都这样做,我看到这是重复的,有一个模式,然后我得到了创建Sublime Text的Snippet为我生成代码的想法,为我的表现添加了显着的改进。
有一个完整“模型”的例子,使用我所说的结构:
Ext.define('App.model.geral.layouts.Layouts', {
extend: 'App.ux.model.base',
fields: [
{ name: 'Foo', type: 'string', fieldLabel: 'Foo' },
{ name: 'Bar', type: 'int', fieldLabel: 'Bar' },
{ name: 'FooTwo', type: 'boolean', fieldLabel: 'FooTwo' },
{ name: 'Date', type: 'date', fieldLabel: 'Date' },
],
proxy: Use.util.Model.getProxy({
controller: 'Layouts'
})
});
这是一个使用矿井结构的简单小样本文件。因此,遵循模式的文件将放在C:/Dev/Com/app/model/geral/layouts/Layouts.js
,因为模型位于文件夹模型内, geral 是实体的模块布局属于。
我尝试了各种各样的事情,我做的最远的是那个片段文件:
<snippet>
<content><![CDATA[
Ext.define('App.model.${TM_FILEPATH/.+(?:model\/)(.+)\.\w+/\l$1/}', {
extend: '',
fields: [ ],
proxy: ''
});
]]></content>
<tabTrigger>mitem</tabTrigger>
</snippet>
当我在名为C:/Dev/Com/app/model/geral/layouts/Layouts.js
的{{1}}(作为模式)的空文件上触发该片段时,结果为:
Ext.define('App.model.geral/layouts/Layouts', {
extend: '',
fields: [ ],
proxy: ''
});
正如你所看到的,我得到了'App.model.geral/layouts/Layouts'
而不是'App.model.geral.layouts.Layouts'
这就是我想要的。我接近我想要的最终结果,正如你在完整的模型示例中看到的那样,通过我不能远远超过那个方式,我对RegExp没有任何了解我所做的只是研究和尝试不同的事情。 / p>
如果有帮助,我会发现有关Sublime Snippets的更完整信息:
$PARAM1 .. $PARAMn Arguments passed to the insert_snippet command. (Not covered here.)
$SELECTION The text that was selected when the snippet was triggered.
$TM_CURRENT_LINE Content of the cursor’s line when the snippet was triggered.
$TM_CURRENT_WORD Word under the cursor when the snippet was triggered.
$TM_FILENAME Name of the file being edited, including extension.
$TM_FILEPATH Path to the file being edited.
$TM_FULLNAME User’s user name.
$TM_LINE_INDEX Column where the snippet is being inserted, 0 based.
$TM_LINE_NUMBER Row where the snippet is being inserted, 1 based.
$TM_SELECTED_TEXT An alias for $SELECTION.
$TM_SOFT_TABS YES if translate_tabs_to_spaces is true, otherwise NO.
$TM_TAB_SIZE Spaces per-tab (controlled by the tab_size option).
我使用该信息来获取文件路径,我尝试使用其他变量,如文件名,但没有那么远。
如果有人可以帮助我达到最终结果,这将非常有用。
答案 0 :(得分:2)
您可以通过以下方式实现您想要的目标:
text.another
顺便说一句,我强烈建议您安装PackageDev package(如果尚未安装),以便在代码段和正则表达式/替换上获得一些语法高亮显示。
standard
从文件路径的开头到<?php
$category_object = get_queried_object();
$category_taxonomy = $category_object->taxonomy;
$category_term_id = $category_object->term_id;
$min_bed = array( '1000', '4000' );
$min_bath = array( '2000', '3200' );
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
'type' => 'tm-property',
'post_status' => 'publish',
'posts_per_page' => 10,
'paged' => $paged,
'caller_get_posts' => -1,
'meta_query' => array(
'relation' => 'AND',
array(
'key' => '_tm_property_bedrooms',
'value' => $min_bed,
'type' => 'numeric',
'compare' => 'BETWEEN',
),
array(
'key' => '_tm_property_bathrooms',
'value' => $min_bath,
'type' => 'numeric',
'compare' => 'BETWEEN',
),
),
'tax_query' => array(
array(
'taxonomy' => 'tm-property_type',
'field' => 'id',
'terms' => $category_term_id
)
),
'orderby' => 'name',
'order' => 'DESC',
);
$custom_posts = null;
$custom_posts = new WP_Query($args);
if( $custom_posts->have_posts() ) :
while ($custom_posts->have_posts()) : $custom_posts->the_post();
echo get_the_title( $post->ID );
endwhile;
endif;
wp_reset_query($custom_posts);
?>
匹配,并存储在捕获组1中<snippet>
<content><![CDATA[
Ext.define('App.model.${TM_FILEPATH/(^.+\/model\/)|(\w+)|(\.\w+$)|(\/)/(?2$2)(?4.)/g}', {
extend: '',
fields: [ ],
proxy: ''
});
]]></content>
<tabTrigger>mitem</tabTrigger>
</snippet>
或(^.+\/model\/)
匹配任何单词字符序列并存储在捕获组2中/model/
或|
匹配文件扩展名并存储在捕获组3中(\w+)
或|
匹配(\.\w+$)
并存储在捕获组4 |
如果捕获组2参与了比赛,则将其替换为自己 - 即保持(\/)
如果捕获组4参与了比赛,请用点/
全局修饰符以尽可能多地匹配可以说你不需要捕获组1和3,但是我将它们包括在内以便更容易分辨出匹配的内容。