如何在 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$??')
如果替换失败也不会出现错误,因此无需将匹配设为可选(通过 \?
)。
我正在编写一个片段,其中我需要在 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$??')
如果替换失败也不会出现错误,因此无需将匹配设为可选(通过 \?
)。