Vim netrw打开远程文件无法检测/设置文件类型的问题求助
Vim远程文件filetype被错误设为netrw的问题及解决建议
问题描述
通过netrw打开远程文件时,Vim会错误地将filetype设置为netrw,而非文件对应的实际类型。手动设置正确的filetype后可正常使用,但保存文件后该设置会丢失。此问题出现在macOS Sonoma 14.4.1的系统Vim中,所有类型的远程文件均受影响,此前该功能正常工作多年,近几个月才出现异常。
已完成的排查步骤
- 执行
vim -u NONE -U NONE -N启动无插件的Vim - 执行
:set nocompatible设置非兼容模式 - 执行
:filetype plugin indent on开启文件类型检测 - 执行
:syntax enable启用语法高亮 - 执行
:Explore返回“Not an editor command”,确认netrw未加载 - 执行
:source /usr/share/vim/vim90/plugin/netrwPlugin.vim加载netrw插件 - 执行
:Explore浏览本地主目录,打开Perl文件后执行:set filetype,显示filetype=perl(正常) - 执行
:Explore scp://self@self.mydomain.com/浏览远程主目录,打开Perl文件后执行:set filetype,显示filetype=netrw(异常)
解决建议
一、卸载并重新安装系统Vim
macOS自带Vim受系统完整性保护(SIP)限制,需关闭SIP后才能卸载:
- 重启Mac,按住
Command+R进入恢复模式 - 打开终端,执行
csrutil disable关闭SIP,完成后重启系统 - 执行
sudo rm -rf /usr/bin/vim /usr/share/vim删除系统Vim的相关文件 - 再次进入恢复模式,执行
csrutil enable重新开启SIP,重启系统 - 推荐通过Homebrew安装独立版本的Vim替代系统版本:执行
brew install vim,后续调用vim时会优先使用Homebrew安装的版本
二、定位netrw.vim中的问题
- 开启netrw调试日志:在Vim中执行
:let g:netrw_debug=3,然后操作打开远程文件,调试信息会输出到命令行,可查看是否存在文件类型检测相关的错误 - 检查netrw的文件类型处理逻辑:打开系统netrw主文件
/usr/share/vim/vim90/plugin/netrw.vim,搜索filetype相关代码,重点对比远程文件与本地文件打开时的类型设置流程 - 测试旧版本netrw:下载之前正常工作时期的netrw插件版本,放在
~/.vim/plugin/目录下覆盖系统版本,验证问题是否消失
三、临时替代方案
- 添加自动命令自动设置文件类型:在
~/.vimrc中添加以下配置,针对远程文件自动根据后缀设置filetype:" 针对单个类型(如Perl) autocmd BufReadPost scp://* set filetype=perl " 通用版本,根据文件名后缀自动匹配 autocmd BufReadPost scp://* let &filetype = matchstr(expand('%:t'), '\v\.[^\.]+$')[1:] - 直接打开远程文件:绕过netrw浏览环节,使用
vim scp://self@self.mydomain.com/path/to/file.pl命令直接打开远程文件,此时Vim通常能正确检测文件类型
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

