【问题标题】:The autocmd pattern to match filename and part of path in Vim在 Vim 中匹配文件名和部分路径的 autocmd 模式
【发布时间】:2011-08-09 17:13:44
【问题描述】:

我正在尝试通过打开一个包含test/ 路径且文件名以Test.java 结尾的新文件来触发自动cmd。阅读:h autocmd-patterns 我不知道是否只有有限的模式可以用作自动cmd 中的文件模式,或者我只是对我的模式做错了什么。以下适用于匹配以.java结尾的任何文件

autocmd! BufNewFile *.java
 \ "command implemented !

现在我尝试通过以下及其派生词将新文件与包含/test/ 的路径和以Test.java 结尾的文件名匹配

autocmd! BufNewFile */test/*Test.java
 \ "command implemented !

如何在所有路径的一部分为test/ 文件夹且文件名以Test.java 结尾的文件上触发自动命令。例如,它应该在执行时触发

$ vim code/algos/graphs/test/KruskalTest.java

【问题讨论】:

  • 它是正确的,应该可以工作。在这里工作。检查问题是否不在您传递的命令中,或者直接尝试echo "yep"。
  • 感谢您的确认。当我刚刚使用模式*.java 时,命令正确触发。将模式更改为 */test/*Test.java` 使其即使使用适当的路径也不会被触发。在继续之前将进一步研究 VimScript。

标签: vim autocmd


【解决方案1】:
augroup MyJavaAUGroup
  au! BufRead,BufNewFile,BufEnter *.java,*Test.java,*/test/* <<YOURCOMMANDHERE>>
augroup END

【讨论】:

  • 在创建路径为code/algos/graphs/test/KruskalTest.java的新文件时,这似乎应用了一个简单的命令3次
  • 我计算了 6 个条件,只需打开您刚刚用我上面的augroup 提供的文件示例即可满足这些条件。但是,请不要误解我的例子的用处。请查看不同的Buf 条件并查看分隔文件条件的逗号。
  • @JohnKaul "commas" in "autocmd-pattern" 代表替代而不是连词,所以你的模式比预期的更弱并且匹配更多。
【解决方案2】:

尝试改用**/test/*Test.java 模式。此外,确保 您选择了正确的自动命令事件:对于 BufNewFile 事件 触发,必须不存在具有给定名称的文件。

【讨论】:

  • 谢谢。当我在尝试解决这个问题时弄清楚我在 .vimrc 或 ftplugin/java.vim 中搞砸了什么时,我会尝试这个并报告。
猜你喜欢
  • 2018-05-15
  • 1970-01-01
  • 1970-01-01
  • 2019-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多