【问题标题】:Define UltiSnip With Variable Default Placeholder使用可变默认占位符定义 UltiSnip
【发布时间】:2016-07-31 19:39:43
【问题描述】:

我正在使用出色的 UltiSnips Vim plugin 来帮助改进我的开发工作流程。我已经使用它好几年了,它确实帮助我在编码时自动化了很多多余的输入。

无论如何:我正在尝试定义一个帮助我生成 Javascript 要求语句的 sn-p。

一个普通的 Javascript require 语句看起来像这样:

let express = require('express');

所以,这是我定义的 sn-p:

snippet req "require a module" b
let ${1} = require('${2}');
endsnippet

这让我可以在 Vim 中输入 req,然后将光标移动到 sn-p 中的 ${1} 位置,以便我可以定义变量名。一旦我第二次点击,我的光标将移动到sn-p中${2}的位置,这样我就可以定义要导入的实际Javascript模块名称。

这很好用,但我想做的是更进一步。我想做一个这样的 sn-p:

当我输入${1} 的值时,${2} 的值默认更新为${1} 的值。这样,在某些情况下,我可以省去两次键入相同模块名称的麻烦。

这个想法是我应该能够做这样的事情:

snippet req "require a module" b
let ${1} = require('${2:${1}}');
endsnippet

这样,如果我输入:

req<tab>express

我应该得到以下扩展行:

let express = require('express');

但是,它也应该在这种情况下工作:

req<tab>exp<tab>express

哪个会输出:

let exp = require('express');

这有意义吗?

无论如何:任何帮助将不胜感激!上面的代码示例不像我想象的那样工作。 ${2:${1}} 位被忽略并且无法按预期工作(它不会将 ${2} 的占位符值设置为 ${1})。

【问题讨论】:

    标签: javascript vim ultisnips


    【解决方案1】:

    以下sn-p同时满足req&lt;tab&gt;expressreq&lt;tab&gt;exp&lt;tab&gt;express:(对你的想法稍作修改)

    snippet req "require a module" b
    let ${1} = require('${0:$1}');
    endsnippet
    

    $1 是占位符 ${1} 的镜像。还将2 替换为0,因为sn-p 在此占位符中结束。 要添加 visual 支持,只需将 ${VISUAL} 添加到占位符即可。正如@lwassink 提供的说明,我只是给sn-p:

    snippet req "require a module" b
    let ${1:${VISUAL}} = require('${0:$1}');
    endsnippet
    

    【讨论】:

    • 谢谢。第一个选项很完美:简洁、小巧,不需要 Python 插值
    【解决方案2】:

    您可以使用 python 插值来做到这一点。

    snippet req "require a module"
    let ${1:${VISUAL: my_name}} = require ('`!p snip.rv = t[1]`');
    endsnippet
    

    一旦您将它添加到您的 javascript sn-ps 文件中,它应该可以完全按照您所描述的那样工作。 输入req&lt;tab&gt;express,你会得到

    let express = require ('express');
    

    作为奖励,sn-p 也可以在可视模式下工作。 要以这种方式使用它,请输入 express,然后在可视模式下选择 express。 您可以通过将光标放在要选择的单词上并输入viw 来完成此操作。 然后,选择模块名称,输入&lt;tab&gt;req&lt;tab&gt; 运行sn-p。 如果您记得在键入您想要的名称后要使用 require 语句,这将非常有用。

    我从 Drew Neil 的 Vimcasts 中学到了大部分内容。 他在 Ultisnips 上有一系列三个,从这个开始:http://vimcasts.org/episodes/meet-ultisnips/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-07
      • 1970-01-01
      • 2021-07-17
      • 2016-11-14
      • 2012-11-02
      • 2018-02-12
      • 2012-05-04
      • 1970-01-01
      相关资源
      最近更新 更多