1

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

例如

如果在myName.test.js,我想抓住 'myName'

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

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

4

1 回答 1

6

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

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

如果替换失败,则没有错误,因此无需将匹配设为可选(通过\?)。

于 2019-01-25T13:01:08.753 回答