如何在 vimscript 或 UltiSnips 中不使用 'test' 扩展当前文件名

How to expand current filename without 'test' in vimscript or UltiSnips

我正在编写一个片段,其中我需要在 vimscript 中获取当前文件名。我可以用expand('%:t:r')愉快地做到这一点(如图here)。但是,我不仅要从文件名中排除“.js”,还要排除“.test”。

例如

如果在myName.test.js,我想抢'myName'

如果在myName.js,我也想抢'myName'

我这样做是为了创建一个 UltiSnips 片段,这样其他方法(例如正则表达式)也很有用

:t:r 是文件名修饰符。如果您遵循 :help filename-modifiers,还有一个漂亮的(但鲜为人知):s?pat?sub? 修饰符可以执行替换。因为它可以与其他修饰符结合使用,所以您需要做的就是匹配 .test 锚定到文件名的末尾:

:echo expand('%:t:r:s?\.test$??')

如果替换失败也不会出现错误,因此无需将匹配设为可选(通过 \?)。