vim - 让 vim 理解 tcl 脚本环境变量('gf' 命令)
问题描述
我经常在 vim 中使用 gf 打开光标下的文件。这些文件路径通常使用环境变量,但在 .tcl 脚本文件中,vim 无法使用环境变量。
这适用于 gf:
$tcl_lib/myfile.tcl
这些不适用于 gf:
$env(tcl_lib)/myfile.tcl
$::env(tcl_lib)/myfile.tcl
这些是我尝试过的一些事情:
:set isfname=@,48-57,/,.,-,_,+,,,#,$,%,~,=,{,},(,)
:set isfname=@,48-57,/,.,-,_,+,,,#,$,%,~,=,{,},40-41
:set includeexpr=substitute(v:fname,'\$env(\([^)]\+\))','\$\1','')
有没有办法让 vim 理解 tcl 脚本中环境变量的语法(特别是 'gf' 命令)?
解决方案
有几个技巧:
设置'path'
&'includeexpr'
理论上你可以添加$tcl_lib
到路径中。例如set path=.,$tcl_lib,,
。但是,任何以开头的文件名/
都会失败。这可以通过删除启动来解决/
。
添加到~/.vim/after/ftplugin/tcl.vim
:
set path=.,$tcl_lib,,
let &l:includeexpr="substitute(v:fname, '^/', '', 'g')"
通过读取环境变量'includeexpr'
可以使用替换来扩展环境变量
let l:includeexpr = "substitute(v:fname, '$\\%(::\\)\\=env(\\([^)]*\\))', '\\=expand(\"$\".submatch(1))', 'g')"
这使用子替换表达式(参见:h sub-replace-expression
)expand()
来获取环境变量。
这可能需要您进行更改'isfname'
以允许更多字符成为文件名查找字符串的一部分。
只是地图gf
和朋友
gf
为特定于您的语言的、<c-w>f
等进行缓冲区本地映射并检查某些路径。这完全避开了 Vim 的许多内置方法,所以它应该作为最后的手段。
推荐阅读
- c++ - 我的运动体位置和比例与预期的位置和比例不同
- javascript - 使用 forEach 循环返回多个样式组件
- c# - 在 C# 中的两个特殊字符之间拆分分层字符串
- kubernetes - 我在这个 kubernetes RBAC 设置中缺少什么?
- c# - C#用户控件智能标签
- javascript - 在 mousedown 事件中添加的 Mousemove 事件在鼠标不移动时不断触发
- xml - 为每个 xml 元素生成一行
- flowtype - Flow中默认参数的问题
- reactjs - 如何使用 Rollup 使 React 组件导入提取的 scss 模块文件?
- javascript - React 钩子将映射的复选框值添加到数组或删除它