在 MacVim 中,为什么在有 "filetype plugin indent on" 时我不能使用 gf 命令转到文件?
In MacVim, why can't I goto a file with the gf command when having "filetype plugin indent on"?
我正在使用 MacVim 版本 8.2.3455 (172)
我有一个 ruby 文件 vim_test.rb 只有一行代码。
require 'vim_test/core'
vim_test/core.rb 文件存在并且只有一条评论。
我执行以下操作:
我导航到包含 vim_test.rb 文件的目录并启动 MacVim
mvim vim_test.rb
我 运行 :set suffixesadd+=.rb
命令。
我将光标放在 require 指令 (vim_test/core) 指定的文件上,然后按 gf.
我收到此错误 E345:无法在路径 .
中找到文件“vim_test/core.rb”
要解决这个问题,我必须在 .vimrc 中注释掉以下行,保存并重新启动 MacVim:
" filetype plugin indent on
现在,当我按照与以前完全相同的步骤操作时,我可以跳转到 vim_test/core.rb 文件。
有什么方法可以在我的 .vimrc 中包含 filetype plugin indent on
并使用 gf 转到由 require 指令指定的文件?
谢谢。
:help gf
通过在 :help 'path'
.
中列出的目录中搜索光标下的文件名来工作
默认情况下,path
的值为.,/usr/include,,
,这意味着Vim将搜索:
- 当前文件的目录,即
.
,
/usr/include
,对你没用,
- 工作目录,即
,,
。
这与您的示例非常相配。
现在,filetype plugin indent on
告诉 Vim 启用文件类型检测、文件类型插件和特定于文件类型的缩进。此处的问题是 Ruby 文件类型插件努力定位系统中可能隐藏 Ruby 库的所有位置,然后将 path
选项设置为该列表。例如,这是我在我的机器上得到的(YMMV):
/Library/Ruby/Site/2.3.0,/Library/Ruby/Site/2.3.0/x86_64-darwin18,/Library/Ruby/Site/2.3.0/universal-darwin18,/Library/Ruby/Site,/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/vendor_ruby/2.3.0,/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/vendor_ruby/2.3.0/x86_64-darwin18,/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/vendor_ruby/2.3.0/universal-darwin18,/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/vendor_ruby,/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0,/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/x86_64-darwin18,/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/universal-darwin18
这可能很有用,但缺少允许在当前文件目录中搜索的 .
和允许在工作目录中搜索的 ,,
。
事实上,returns 值用于 path
的函数做了一些非常奇怪的事情:如果 path
的当前全局值不是' t 默认值,它附加上面的目录列表,但是,如果全局值 是 默认值,它只是 returns 上面的列表。我无法完全理解这个推理。
此外,同一个 ftplugin 映射 gf
到一些聪明的函数,这使得它更加复杂和不直观。
我能看到的唯一解决方法是更改 vimrc
中的全局 path
,使 Ruby ftplugin appends 上面的列表到现有的 path
值,而不是 用该列表覆盖 它。
以下片段:
set path+=,,
在 Ruby 缓冲区中获取以下 path
:
.,/usr/include/,,,,,/Library/Ruby/Site/2.3.0,/Library/Ruby/Site/2.3.0/x86_64-darwin18,/Library/Ruby/Site/2.3.0/universal-darwin18,/Library/Ruby/Site,/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/vendor_ruby/2.3.0,/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/vendor_ruby/2.3.0/x86_64-darwin18,/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/vendor_ruby/2.3.0/universal-darwin18,/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/vendor_ruby,/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0,/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/x86_64-darwin18,/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/universal-darwin18
这使得 gf
按预期工作。
但是首先不需要这样的 hack。我认为有问题。
我正在使用 MacVim 版本 8.2.3455 (172)
我有一个 ruby 文件 vim_test.rb 只有一行代码。
require 'vim_test/core'
vim_test/core.rb 文件存在并且只有一条评论。
我执行以下操作:
我导航到包含 vim_test.rb 文件的目录并启动 MacVim mvim vim_test.rb
我 运行
:set suffixesadd+=.rb
命令。我将光标放在 require 指令 (vim_test/core) 指定的文件上,然后按 gf.
我收到此错误 E345:无法在路径 .
中找到文件“vim_test/core.rb”要解决这个问题,我必须在 .vimrc 中注释掉以下行,保存并重新启动 MacVim:
" filetype plugin indent on
现在,当我按照与以前完全相同的步骤操作时,我可以跳转到 vim_test/core.rb 文件。
有什么方法可以在我的 .vimrc 中包含 filetype plugin indent on
并使用 gf 转到由 require 指令指定的文件?
谢谢。
:help gf
通过在 :help 'path'
.
默认情况下,path
的值为.,/usr/include,,
,这意味着Vim将搜索:
- 当前文件的目录,即
.
, /usr/include
,对你没用,- 工作目录,即
,,
。
这与您的示例非常相配。
现在,filetype plugin indent on
告诉 Vim 启用文件类型检测、文件类型插件和特定于文件类型的缩进。此处的问题是 Ruby 文件类型插件努力定位系统中可能隐藏 Ruby 库的所有位置,然后将 path
选项设置为该列表。例如,这是我在我的机器上得到的(YMMV):
/Library/Ruby/Site/2.3.0,/Library/Ruby/Site/2.3.0/x86_64-darwin18,/Library/Ruby/Site/2.3.0/universal-darwin18,/Library/Ruby/Site,/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/vendor_ruby/2.3.0,/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/vendor_ruby/2.3.0/x86_64-darwin18,/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/vendor_ruby/2.3.0/universal-darwin18,/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/vendor_ruby,/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0,/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/x86_64-darwin18,/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/universal-darwin18
这可能很有用,但缺少允许在当前文件目录中搜索的 .
和允许在工作目录中搜索的 ,,
。
事实上,returns 值用于 path
的函数做了一些非常奇怪的事情:如果 path
的当前全局值不是' t 默认值,它附加上面的目录列表,但是,如果全局值 是 默认值,它只是 returns 上面的列表。我无法完全理解这个推理。
此外,同一个 ftplugin 映射 gf
到一些聪明的函数,这使得它更加复杂和不直观。
我能看到的唯一解决方法是更改 vimrc
中的全局 path
,使 Ruby ftplugin appends 上面的列表到现有的 path
值,而不是 用该列表覆盖 它。
以下片段:
set path+=,,
在 Ruby 缓冲区中获取以下 path
:
.,/usr/include/,,,,,/Library/Ruby/Site/2.3.0,/Library/Ruby/Site/2.3.0/x86_64-darwin18,/Library/Ruby/Site/2.3.0/universal-darwin18,/Library/Ruby/Site,/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/vendor_ruby/2.3.0,/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/vendor_ruby/2.3.0/x86_64-darwin18,/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/vendor_ruby/2.3.0/universal-darwin18,/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/vendor_ruby,/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0,/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/x86_64-darwin18,/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/universal-darwin18
这使得 gf
按预期工作。
但是首先不需要这样的 hack。我认为有问题。