我正在使用优秀的UltiSnips Vim plugin来帮助改进我的开发工作流程。我已经使用它好几年了,它确实帮我在编码时自动完成了很多冗余打字。
无论如何:我正在尝试定义一个片段,帮助我生成Javascript require语句。
正常的Javascript require语句如下所示:
let express = require('express');
所以,这是我定义的片段:
snippet req "require a module" b
let ${1} = require('${2}');
endsnippet
这允许我在Vim中键入req
,然后将光标移动到代码段中的${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}
的占位符值设置为${1}
。
答案 0 :(得分:3)
以下代码段同时满足req<tab>express
和req<tab>exp<tab>express
:(稍微修改了您的想法)
snippet req "require a module" b
let ${1} = require('${0:$1}');
endsnippet
$1
是占位符${1}
的镜像。还将2
替换为0
,因为代码段在此占位符中结束。
要添加直观支持,只需向占位符添加${VISUAL}
即可。由于@ lwassink 提供了说明,我只是提供代码段:
snippet req "require a module" b
let ${1:${VISUAL}} = require('${0:$1}');
endsnippet
答案 1 :(得分: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/。