Sublime text 3:如何将选定的文本包装在自定义字符串/标签/函数中(laravel 语言助手示例)
Sublime text 3: How to wrap selected text in custom string/ tag/ function (laravel language helper example)
看看这段代码:
<p>This is nice text!</p>
我想要实现的是 select This is nice text!
并像这样:
<p>{{ __('This is nice text!') }}</p>
这是 laravel 语言助手的基本示例。它有更多的实现。
您可以使用 "Laravel Blade Highlighter" 软件包进行 sublime,它可以让您自动完成 laravel blade 语法。对于您的特定查询,您只需 select 文本并点击“{”两次,它就会自动在 {{ text }} 之间换行 selected 文本。这是 sublime text 3 的默认设置。
对于所有 blade 相关功能,请在此处检查 Laravel Blade 荧光笔包:https://packagecontrol.io/packages/Laravel%20Blade%20Highlighter
一般来说,将 select 文本与其他文本换行的最简单方法是使用 snippet 来完成这项工作。片段允许您以几种不同的方式将任意文本插入缓冲区,并且还允许包含扩展发生时 selected 文本的任何内容。
要查看实际效果,您可以从主菜单 select Tools > Developer > New Snippet
,这将为您创建一个片段模板。完成后,将文件的全部内容替换为以下文本并保存代码段。 Sublime 会默认你的 User
包作为位置,你可以选择任何你想要的名字;只需确保扩展名是 sublime-snippet
以便 Sublime 能够识别该文件。在此示例中,我将文件命名为 localize.sublime-snippet
.
<snippet>
<content><![CDATA[
{{ __('${0:${SELECTION}}') }}
]]></content>
<tabTrigger>localize</tabTrigger>
<description>Localize text</description>
<scope>text.blade</scope>
</snippet>
如此处所示,片段是 XML 文件。上面的 link 是关于片段的非官方文档,所以我们简单地说:
CDATA
部分的内容是将展开的片段文本
$
在代码段正文中有特殊含义,因此如果要插入文字 $
,则需要指定 $
而不是
tabTrigger
是一个可用于手动扩展代码段的短语;这是可选的
description
是对代码段用途的文本描述;这是可选的
scope
表示代码段适用的地方;这是可选的
snippet 内容可以包含编号字段,如 [=26=]
、</code> 等,当 snippet 展开时,Sublime 会将光标定位在 <code>
以供您输入文本,然后在按 Tab 时跳转到 </code>,依此类推,直到所有字段都已填写,这会使光标跳转到 <code>[=26=]
("exit"片段的)。
还值得注意的是,这里的 scope
假设您使用 Laravel Blade Highlighter 包来突出显示语法。如果不是,则在编辑 blade 文件时使用 Tools > Developer > Show Scope Name
并将 text.blade
替换为弹出窗口中的第一行。
现在有了代码段,我们可以自动做一些事情。首先,在 blade 文件中,您可以输入制表符触发文本并按 Tab,代码段的内容将展开,将光标放在单引号内 ( [=26=]
在片段中的位置)因此您可以输入一些文本:
适用于当前情况的片段列表也会作为前缀为 Snippet:
的命令自动添加到命令选项板;您可以使用主菜单中的 Tools > Snippets
或只打开命令面板并执行命令搜索以查看适用于当前情况的片段。在这里我们可以看到我们的 localize
片段正在显示; description来自snippet中的tag,Sublime也提醒我们如何触发snippet。
所以现在回到你原来的换行问题,请注意该片段的正文包含以下内容:
{{ __('${0:${SELECTION}}') }}
[=38=]
指定当片段完成扩展字段(其中有 none)时光标应该去哪里,:${SELECTION}
部分是说默认此字段的值应为 selected 文本。
当您使用 localize
Tab 方法展开代码段时,没有 selected 文本,因此光标只是结束坐在弦的中间。但是,如果您从命令面板触发代码片段,则可以先 select 文本。在这种情况下,selected 文本被代码段替换,但由于代码段捕获了 selection,因此您最终会用文本环绕 selection:
对于您经常做的这类事情,您也可以使用insert_snippet
命令来展开代码段;在这种情况下,您会先 select text 将其包装起来,但如果没有 selection,代码段将随着光标在单引号内展开,就像您手动操作一样。
例如,您可以创建如下所示的键绑定:
{
"keys": ["ctrl+alt+l"],
"command": "insert_snippet",
"args": {
"name": "Packages/User/localize.sublime-snippet"
},
"context": [
{ "key": "selector", "operator": "equal", "operand": "text.blade" },
]
},
此处的 context
部分使绑定仅在 blade 文件中处于活动状态,而不是在任何地方都与代码段中的 scope
的工作方式相似;这是因为 insert_snippet
命令直接插入代码片段而不进行任何检查。
同样,您也可以通过在 User
包中创建一个名为 Context.sublime-menu
的文件(即与您将代码段保存到上面的位置相同的位置)将其添加到右键单击上下文菜单中以下内容:
[
{ "caption": "-", "id": "end" },
{
"caption": "Localize Blade Text",
"command": "insert_snippet",
"args": {
"name": "Packages/User/localize.sublime-snippet"
},
},
]
这里的菜单命令将始终可用,无论您正在编辑什么文件,因为如上所述 insert_snippet
命令不会限制基于 scope
的代码段的扩展。不过,您可以使用一个简单的小插件来解决这个问题(这里没有介绍,因为这个答案本身就非常庞大)。
最后要提到的一件事是,在您使用直接insert_snippet
命令(即不使用命令调色板或Tab扩展方法时),可以跳过一些步骤。
insert_snippet
命令可以用contents
参数代替name
参数; name
参数指定了应该展开的片段,而 contents
参数直接包含片段内容。这样就省去了首先必须创建 sublime-snippet
文件的步骤。
对于此处的示例,此键绑定将执行与上述绑定相同的操作,但不需要代码段文件存在:
{
"keys": ["ctrl+alt+l"],
"command": "insert_snippet",
"args": {
"contents": "{{ __('${0:${SELECTION}}') }}"
},
"context": [
{ "key": "selector", "operator": "equal", "operand": "text.blade" },
]
},
看看这段代码:
<p>This is nice text!</p>
我想要实现的是 select This is nice text!
并像这样:
<p>{{ __('This is nice text!') }}</p>
这是 laravel 语言助手的基本示例。它有更多的实现。
您可以使用 "Laravel Blade Highlighter" 软件包进行 sublime,它可以让您自动完成 laravel blade 语法。对于您的特定查询,您只需 select 文本并点击“{”两次,它就会自动在 {{ text }} 之间换行 selected 文本。这是 sublime text 3 的默认设置。
对于所有 blade 相关功能,请在此处检查 Laravel Blade 荧光笔包:https://packagecontrol.io/packages/Laravel%20Blade%20Highlighter
一般来说,将 select 文本与其他文本换行的最简单方法是使用 snippet 来完成这项工作。片段允许您以几种不同的方式将任意文本插入缓冲区,并且还允许包含扩展发生时 selected 文本的任何内容。
要查看实际效果,您可以从主菜单 select Tools > Developer > New Snippet
,这将为您创建一个片段模板。完成后,将文件的全部内容替换为以下文本并保存代码段。 Sublime 会默认你的 User
包作为位置,你可以选择任何你想要的名字;只需确保扩展名是 sublime-snippet
以便 Sublime 能够识别该文件。在此示例中,我将文件命名为 localize.sublime-snippet
.
<snippet>
<content><![CDATA[
{{ __('${0:${SELECTION}}') }}
]]></content>
<tabTrigger>localize</tabTrigger>
<description>Localize text</description>
<scope>text.blade</scope>
</snippet>
如此处所示,片段是 XML 文件。上面的 link 是关于片段的非官方文档,所以我们简单地说:
CDATA
部分的内容是将展开的片段文本$
在代码段正文中有特殊含义,因此如果要插入文字$
,则需要指定$
而不是tabTrigger
是一个可用于手动扩展代码段的短语;这是可选的description
是对代码段用途的文本描述;这是可选的scope
表示代码段适用的地方;这是可选的
snippet 内容可以包含编号字段,如 [=26=]
、</code> 等,当 snippet 展开时,Sublime 会将光标定位在 <code>
以供您输入文本,然后在按 Tab 时跳转到 </code>,依此类推,直到所有字段都已填写,这会使光标跳转到 <code>[=26=]
("exit"片段的)。
还值得注意的是,这里的 scope
假设您使用 Laravel Blade Highlighter 包来突出显示语法。如果不是,则在编辑 blade 文件时使用 Tools > Developer > Show Scope Name
并将 text.blade
替换为弹出窗口中的第一行。
现在有了代码段,我们可以自动做一些事情。首先,在 blade 文件中,您可以输入制表符触发文本并按 Tab,代码段的内容将展开,将光标放在单引号内 ( [=26=]
在片段中的位置)因此您可以输入一些文本:
适用于当前情况的片段列表也会作为前缀为 Snippet:
的命令自动添加到命令选项板;您可以使用主菜单中的 Tools > Snippets
或只打开命令面板并执行命令搜索以查看适用于当前情况的片段。在这里我们可以看到我们的 localize
片段正在显示; description来自snippet中的tag,Sublime也提醒我们如何触发snippet。
所以现在回到你原来的换行问题,请注意该片段的正文包含以下内容:
{{ __('${0:${SELECTION}}') }}
[=38=]
指定当片段完成扩展字段(其中有 none)时光标应该去哪里,:${SELECTION}
部分是说默认此字段的值应为 selected 文本。
当您使用 localize
Tab 方法展开代码段时,没有 selected 文本,因此光标只是结束坐在弦的中间。但是,如果您从命令面板触发代码片段,则可以先 select 文本。在这种情况下,selected 文本被代码段替换,但由于代码段捕获了 selection,因此您最终会用文本环绕 selection:
对于您经常做的这类事情,您也可以使用insert_snippet
命令来展开代码段;在这种情况下,您会先 select text 将其包装起来,但如果没有 selection,代码段将随着光标在单引号内展开,就像您手动操作一样。
例如,您可以创建如下所示的键绑定:
{
"keys": ["ctrl+alt+l"],
"command": "insert_snippet",
"args": {
"name": "Packages/User/localize.sublime-snippet"
},
"context": [
{ "key": "selector", "operator": "equal", "operand": "text.blade" },
]
},
此处的 context
部分使绑定仅在 blade 文件中处于活动状态,而不是在任何地方都与代码段中的 scope
的工作方式相似;这是因为 insert_snippet
命令直接插入代码片段而不进行任何检查。
同样,您也可以通过在 User
包中创建一个名为 Context.sublime-menu
的文件(即与您将代码段保存到上面的位置相同的位置)将其添加到右键单击上下文菜单中以下内容:
[
{ "caption": "-", "id": "end" },
{
"caption": "Localize Blade Text",
"command": "insert_snippet",
"args": {
"name": "Packages/User/localize.sublime-snippet"
},
},
]
这里的菜单命令将始终可用,无论您正在编辑什么文件,因为如上所述 insert_snippet
命令不会限制基于 scope
的代码段的扩展。不过,您可以使用一个简单的小插件来解决这个问题(这里没有介绍,因为这个答案本身就非常庞大)。
最后要提到的一件事是,在您使用直接insert_snippet
命令(即不使用命令调色板或Tab扩展方法时),可以跳过一些步骤。
insert_snippet
命令可以用contents
参数代替name
参数; name
参数指定了应该展开的片段,而 contents
参数直接包含片段内容。这样就省去了首先必须创建 sublime-snippet
文件的步骤。
对于此处的示例,此键绑定将执行与上述绑定相同的操作,但不需要代码段文件存在:
{
"keys": ["ctrl+alt+l"],
"command": "insert_snippet",
"args": {
"contents": "{{ __('${0:${SELECTION}}') }}"
},
"context": [
{ "key": "selector", "operator": "equal", "operand": "text.blade" },
]
},