vim下:wq和ZZ命令还是有区别的

本文探讨了一种情况,即当使用vim编辑日志文件后,实时写入日志的程序停止写入。作者发现这个问题与:iNode变化和文件的delete状态有关,:wq命令会导致文件被新创建并删除旧文件,而ZZ则不会。通过lsof-ppid检查确认了文件被标记为待删除。解决方案和文件编辑操作的影响是关键讨论点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前段时间发现有个写日志的程序(实时写日志),在我去修改了日志文件里内容的时候,写日志的程序就不写了,重启写日志程序才能继续写。这时候就意识到这个日志文件可能就不是之前那个日志文件,iNode已经变了,虽然日志文件还是同一个名字。

其实不止修改,用vim打开后啥也不干,:wq直接退出也会写不了日志。

为了验证用lsof -p pid去看了程序调用的文件,发现文件后面带了个delete状态,果然是已经被删掉了。

为什么说:wq和ZZ命令还是有区别的,因为用ZZ命令退出的时候日志文件还是可以继续写而:wq不行。:wq或者sed之类的命令会重新新建一个同名文件,把之前的文件删了。再默认的写文件模式上采用了写新文件,之后覆盖到老文件的方式。

  1. :wq 是一定保存一次
  2. ZZ是修改了才会保存
### Linux Vim 命令常见错误及解决方法 #### 错误一:无法正常退出Vim 有时用户会遇到无法通过简单输入 `q` 来退出的情况。这通常是因为文件有未保存的更改。 解决方案是在命令模式下输入 `:q!` 强制不保存退出[^1];如果希望保存修改后再退出,则应使用 `:wq` 或者简写成 `ZZ`,前者用于保存并退出而后者则是直接存盘退出。 #### 错误二:试图在插入模式下达命令 新接触Vim的人容易混淆不同工作模式之间的区别,在插入模式尝试执行命令行指令会导致失败。 正确做法是从插入模式返回至普通模式(按Esc键),之后才能进入底行命令状态来进行诸如`:w`, `:q`之类的操作[^4]。 #### 错误三:忘记先切换到适当的工作目录再打开目标文件 当打算编辑特定路径下的某个文档却总是找不到该文件时,可能是由于当前所在的默认工作区并非预期的位置所致。 应当利用外部Shell环境中的`cd`命令调整好所在位置后启动Vim,或者直接指定绝对路径给vim来加载所需处理的对象[^3]。 ```bash # 切换到想要的操作目录再启动vim cd /path/to/directory && vim filename.txt ``` #### 错误四:不了解如何在Vim内部运行Linux Shell命令 对于那些习惯于频繁交互式工作的开发者来说,反复进出Vim去终端里敲打命令显然不够高效。 幸运的是,Vim允许使用者在其内核中临时调用系统级功能,只需前缀冒号加感叹号(`:!`)后面接上要执行的具体语句即可[^2]: ```vimscript :!ls -l " 显示当前目录列表 :!pwd " 打印当前位置 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值