在vim中为nodejs编写需要的片段?

时间:2017-01-24 15:16:38

标签: node.js vim snipmate

这是我正在使用的当前片段

snippet req
  const ${1:} = require('$1');

您可能已经猜到它适用于我从npm安装的软件包,但对本地文件不太好。假设我有../user.js的文件,我希望将其包含在我的nodejs项目中,而不是显示为

const ../user.js = require('../user.js');

我希望它成为

const user = require('../user.js');

从我的假设我将以某种方式必须使用/分割文件路径获取最后一个元素并在使用.爆炸后再次获得第一个元素,这将适用于全局安装和本地文件包含。问题是我是snipmate的新手,并且没有想出如何实现这一目标。非常感谢任何正确方向的推动。在此先感谢帮助我。

更新

参考snipmate文档here,我发现我可以使用system来利用标准的unix命令对字符串执行操作。现在我仍然坚持如何在系统内完全传递$1。这是我有的更新代码

snippet req
  const `system('echo $1')` = require('${1:}'); 

2 个答案:

答案 0 :(得分:3)

原始的snipMate无法操作镜像的tabstops;我认为UltiSnips允许这样做。 (`...`插值仅在代码段扩展期间执行;您无法将$1传递到其中。)

如果您不想切换,可以将包含文件的定义拆分为路径和模块名称,并仅将后者镜像到变量名称中:

snippet req
    const $2 = require('${1:path/}${2:module}');

答案 1 :(得分:1)

我没有设置您的代码段,但现在您可以将其发送给bash,我假设您可以通过grep管理它以获取值的一部分你要。如果您输入../models/user.js之类的内容,则只需将user.js拉出来。

snippet req
  const `system('echo $1 | grep -Po "(?<=/)[^/]*$"')` = require('${1:}');