3

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

无论如何:我正在尝试定义一个片段来帮助我生成 Javascript 要求语句。

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

let express = require('express');

所以,这是我定义的片段:

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

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

这很好用,但我想做的是更进一步。我想制作一个这样的片段:

当我为 输入一个值时${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}to${1})。

4

2 回答 2

4

以下代码段同时满足req<tab>expressreq<tab>exp<tab>express:(对您的想法稍作修改)

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

$1是占位符的镜子${1}。在此占位符中也替换20as snippet 结尾。要添加视觉支持,只需添加${VISUAL}到占位符。正如@lwassink提供的说明,我只给出片段:

snippet req "require a module" b
let ${1:${VISUAL}} = require('${0:$1}');
endsnippet
于 2016-07-31T20:52:33.390 回答
2

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

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

一旦你将它添加到你的 javascript 片段文件中,它应该完全按照你描述的那样工作。输入req<tab>express,你会得到

let express = require ('express');

作为奖励,该片段也可以在可视模式下工作。要以这种方式使用它,请键入express,然后在可视模式下选择 express。您可以通过将光标放在要选择的单词上并键入来做到这一点viw。然后,在选择模块名称的情况下,输入<tab>req<tab>以运行代码片段。如果您记得在键入您想要的名称后要使用 require 语句,这将很有用。

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

于 2016-07-31T20:02:06.873 回答