出色的文本3:如何在自定义字符串/标记/函数中包装所选文本(laravel语言帮助器示例)

时间:2019-06-19 15:28:46

标签: laravel sublimetext3 laravel-blade

看看这段代码:

<p>This is nice text!</p>

我要实现的是选择This is nice text!并使其如下所示:

<p>{{ __('This is nice text!') }}</p>

这是laravel语言帮助器的基本示例。它具有更多的实现方式。

2 个答案:

答案 0 :(得分:1)

通常来说,将选定的文本与其他文本换行的最简单方法是使用snippet来完成工作。片段允许您以几种不同的方式将任意文本插入缓冲区,还可以包含扩展发生时所选择的文本。

要查看实际操作,可以从主菜单中选择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文件。上面的链接是有关片段的非官方文档,因此,我们简单地说:

  • CDATA部分的内容是将扩展的摘录文本
  • $在摘要正文中有特殊含义,因此,如果要插入文字$,则需要指定\$
  • tabTrigger是一个短语,您可以使用它手动扩展代码段;是可选的
  • description是该代码段的文字描述;是可选的
  • scope指示代码段的适用位置;是可选的

代码段内容可以包含编号字段,例如$0$1等,当代码段展开时,Sublime会将光标定位在$1上,您可以输入文本,然后跳转按下 Tab 依次移至$2,直到所有字段都填满为止,这将使光标跳至$0(代码段的“退出”)。

还值得注意的是,此处的scope假定您使用Laravel Blade Highlighter包进行语法突出显示。如果不是,那么在编辑刀片文件时,请使用Tools > Developer > Show Scope Name,并将text.blade替换为弹出窗口的第一行。

现在将代码段放置在适当的位置,我们可以自动执行一些操作。首先,在刀片文件中,您可以输入选项卡触发器文本并按 Tab ,然后代码段的内容将扩展,将光标置于单引号内(其中$0在摘要中),因此您可以输入一些文本:

Sample snippet expansion

适用于当前情况的摘要列表也将作为带有Snippet:前缀的命令自动添加到命令选项板;您可以从主菜单使用Tools > Snippets或仅打开命令选项板并进行命令搜索以查看适用于当前情况的代码段。在这里,我们可以看到localize片段正在显示;描述来自代码片段中的标记,Sublime也提醒我们如何触发代码片段。

Snippet in command palette

因此,现在回到您原来的换行问题,请注意,代码段主体包含以下内容:

{{ __('${0:${SELECTION}}') }}

${0}指定在代码段完成扩展字段(其中没有字段)后光标应移至何处,:${SELECTION}部分表示此字段的默认值应为选定的文本。

当您使用localize Tab 方法按上述方式扩展代码段时,由于没有选定的文本,因此光标仅停留在字符串的中间。但是,如果您从命令面板触发代码段,则可以先选择文本。在这种情况下,选定的文本将被替换为代码段,但是由于代码段捕获了所选内容,因此您最终得到了包含所选内容的文本:

Expansion via command palette

对于经常执行的此类操作,还可以使用insert_snippet命令来使代码段扩展;例如,在这种情况下,您将首先选择要包装的文本,但是如果没有选择,则代码片段会像使用手动操作一样将光标扩展到单引号内。

例如,您可以创建如下的键绑定:

{
    "keys": ["ctrl+alt+l"],
    "command": "insert_snippet",
    "args": {
        "name": "Packages/User/localize.sublime-snippet"
    },
    "context": [
            { "key": "selector", "operator": "equal", "operand": "text.blade" },    
    ]
},

此处的context部分仅使绑定文件在刀片文件中处于活动状态,而不是像片段中的scope那样在各处都有效;这是因为insert_snippet命令无需进行任何检查即可直接插入代码段。

类似地,您还可以通过在Context.sublime-menu包中创建一个名为User的文件(即与您将代码段保存到上面的位置相同)的文件添加到右键单击上下文菜单,其内容如下: :

[
    { "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" },    
    ]
},

答案 1 :(得分:-1)

您可以使用“ Laravel Blade Highlighter”包进行升华,它可以自动完成laravel blade语法。使用您的特定查询,您只需选择文本并按两次“ {”,它将自动在{{text}}之间换行所选文本。默认情况下,此文字带有高品质文字3。

有关所有与刀片相关的功能,请在此处查看Laravel刀片荧光笔包装:https://packagecontrol.io/packages/Laravel%20Blade%20Highlighter