为什么vim在外部命令中运行`%:8`时“取消”最后两个字符?

时间:2016-07-04 14:26:31

标签: vim rspec

我在rspec运行vim测试时经常使用的简单工作流程如下:

15:   it "my example test" do
16:     expect(1 == 1).to be true
17:   end

要运行此测试,您可以执行以下操作:

!rspec %:15

这会将rspec作为external command运行。 %扩展为当前文件名,:15告诉rspec仅运行测试行15,而不是文件中的所有测试。

这种技术在正常情况下工作正常。但是,如果您尝试在行80-89上运行测试,则会发生奇怪的事情:

84:   it "my other test" do
85:     expect(4 > 3).to be false
86:   end

!rspec %:84

这会运行命令rspec [filename]4 - 即:8个字符消失! (并且您收到“找不到文件”错误。)

避免此问题的解决方法是在输入TAB后按%,这会立即将%扩展为完整路径名。

然而,这种奇怪的vim行为背后的原因是什么?它是一个错误还是一个功能?

1 个答案:

答案 0 :(得分:0)

另一个人,related question让我找到答案。

通过在:help filename-modifiers中运行vim,您可以找到答案以及更多详细信息。以下是关键点的摘要:

  

文件名修饰符可在"%""#""#n""<cfile>""<sfile>""<afile>"或{{1}之后使用}}

     

"<abuf>"将路径转换为8.3短格式(目前仅在MS-Windows上)。将作为现有路径的路径行动。

:8是唯一的数字文件名修饰符。如果您希望完全禁用此功能,则可以在没有8功能的情况下编译vim