使用变量默认占位符定义 UltiSnip
Define UltiSnip With Variable Default Placeholder
我正在使用出色的 UltiSnips Vim plugin 来帮助改进我的开发工作流程。我已经使用它好几年了,它确实帮助我在编码时自动化了很多多余的输入。
无论如何:我正在尝试定义一个片段来帮助我生成 Javascript require 语句。
一个普通的 Javascript require 语句看起来像这样:
let express = require('express');
所以,这是我定义的片段:
snippet req "require a module" b
let = require('');
endsnippet
这让我可以在 Vim 中键入 req
,这会将我的光标移动到代码段中的 </code> 位置,以便我可以定义变量名称。第二次点击后,我的光标将移动到代码段中 <code>
的位置,这样我就可以定义要导入的实际 Javascript 模块名称。
这很好用,但我想做的是更进一步。我想制作一个片段:
当我为 </code> 输入值时,值 <code>
默认更新为 </code> 的值。这样,在某些情况下,我可以节省两次输入相同模块名称的时间。</p>
<p>我的想法是我应该能够做这样的事情:</p>
<pre><code>snippet req "require a module" b
let = require('${2:}');
endsnippet
这样,如果我输入:
req<tab>express
我应该得到以下扩展行:
let express = require('express');
不过,在这种情况下它应该也能工作:
req<tab>exp<tab>express
这将输出:
let exp = require('express');
这有意义吗?
无论如何:任何帮助将不胜感激!上面的代码示例并不像我想象的那样工作。 ${2:}
位被忽略并且没有按预期工作(它没有将 </code> 的占位符值设置为 <code>
)。
您可以使用 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
,然后在可视模式下输入 select。
您可以将光标定位在您想要 select 的词上并键入 viw
。
然后,使用模块名称 selected,输入 <tab>req<tab>
到 运行 代码段。
如果您记得在键入所需名称后要使用 require 语句,这将很有用。
我从 Drew Neil 的 Vimcasts 那里学到了大部分内容。
他在 Ultisnips 上有一系列的三个,从这个开始:http://vimcasts.org/episodes/meet-ultisnips/.
以下代码段同时满足 req<tab>express
和 req<tab>exp<tab>express
:(对您的想法稍作修改)
snippet req "require a module" b
let = require('${0:}');
endsnippet
</code> 是占位符 <code>
的镜像。还用 0
替换了 2
,因为片段在此占位符中结束。
要添加 visual 支持,只需将 ${VISUAL}
添加到占位符即可。由于@lwassink 提供的说明,我只给出片段:
snippet req "require a module" b
let ${1:${VISUAL}} = require('${0:}');
endsnippet
我正在使用出色的 UltiSnips Vim plugin 来帮助改进我的开发工作流程。我已经使用它好几年了,它确实帮助我在编码时自动化了很多多余的输入。
无论如何:我正在尝试定义一个片段来帮助我生成 Javascript require 语句。
一个普通的 Javascript require 语句看起来像这样:
let express = require('express');
所以,这是我定义的片段:
snippet req "require a module" b
let = require('');
endsnippet
这让我可以在 Vim 中键入 req
,这会将我的光标移动到代码段中的 </code> 位置,以便我可以定义变量名称。第二次点击后,我的光标将移动到代码段中 <code>
的位置,这样我就可以定义要导入的实际 Javascript 模块名称。
这很好用,但我想做的是更进一步。我想制作一个片段:
当我为 </code> 输入值时,值 <code>
默认更新为 </code> 的值。这样,在某些情况下,我可以节省两次输入相同模块名称的时间。</p>
<p>我的想法是我应该能够做这样的事情:</p>
<pre><code>snippet req "require a module" b
let = require('${2:}');
endsnippet
这样,如果我输入:
req<tab>express
我应该得到以下扩展行:
let express = require('express');
不过,在这种情况下它应该也能工作:
req<tab>exp<tab>express
这将输出:
let exp = require('express');
这有意义吗?
无论如何:任何帮助将不胜感激!上面的代码示例并不像我想象的那样工作。 ${2:}
位被忽略并且没有按预期工作(它没有将 </code> 的占位符值设置为 <code>
)。
您可以使用 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
,然后在可视模式下输入 select。
您可以将光标定位在您想要 select 的词上并键入 viw
。
然后,使用模块名称 selected,输入 <tab>req<tab>
到 运行 代码段。
如果您记得在键入所需名称后要使用 require 语句,这将很有用。
我从 Drew Neil 的 Vimcasts 那里学到了大部分内容。 他在 Ultisnips 上有一系列的三个,从这个开始:http://vimcasts.org/episodes/meet-ultisnips/.
以下代码段同时满足 req<tab>express
和 req<tab>exp<tab>express
:(对您的想法稍作修改)
snippet req "require a module" b
let = require('${0:}');
endsnippet
</code> 是占位符 <code>
的镜像。还用 0
替换了 2
,因为片段在此占位符中结束。
要添加 visual 支持,只需将 ${VISUAL}
添加到占位符即可。由于@lwassink 提供的说明,我只给出片段:
snippet req "require a module" b
let ${1:${VISUAL}} = require('${0:}');
endsnippet