FreeBSD虚拟机中nodemon对vim编辑文件的异常响应问题求助
解决Vim编辑ExpressJS文件后Nodemon不重启的问题
我之前在FreeBSD的VirtualBox环境里折腾nodemon时,也碰到过和你一模一样的情况——用touch或者nano改文件都能触发重启,唯独vim编辑后没反应。结合你的环境信息(vim 8.0.1638、FreeBSD 11.1-RELEASE、nodemon 1.17.3),问题根源其实出在vim的默认文件写入机制上。
问题原因
Vim默认启用了**安全写入(safe write)**机制:编辑文件时,它会先创建一个临时文件,保存时用这个临时文件替换原文件。这种情况下,原文件的inode号会发生变化,而nodemon默认是通过监听文件的inode变化来检测更新的——文件被替换后,nodemon还在盯着旧的inode,自然不会触发重启。
而nano和touch操作都是直接修改原文件本身,inode号保持不变,所以nodemon能正常检测到变化。
解决方案
方案1:关闭Vim的安全写入机制
这是最彻底的解决方法,修改vim配置文件让它直接编辑原文件:
- 打开你的vim配置文件(个人配置用
~/.vimrc,全局配置用/etc/vimrc) - 添加以下配置:
set noswapfile set nobackup set nowritebackupnoswapfile:关闭临时交换文件nobackup:关闭自动备份文件nowritebackup:关闭写入时的临时备份文件
- 保存配置后,重启vim再编辑
app.js,nodemon就能正常触发重启了。
方案2:让Nodemon用轮询模式监听文件
如果你不想修改vim的配置,可以让nodemon切换到legacy watch模式,它会通过轮询文件内容的方式检测变化,不依赖inode:
nodemon --legacy-watch app.js
这种方式虽然性能比默认监听稍差一点,但在开发环境下完全够用,而且不用改vim的任何设置。
验证方法
你可以用ls -i app.js命令查看文件的inode号:
- 编辑前记录下inode号
- 用vim编辑保存后再看一次,如果inode号和之前一致,说明方案1生效了;如果inode变了,但nodemon依然重启,说明方案2生效了。
内容的提问来源于stack exchange,提问作者user331471
相关产品推荐
相关产品推荐

