我注意到,在 SSH 会话中通过 tmux 使用 Vim 时,当我:w
偶尔将缓冲区写入磁盘(即 )时,虽然 Vim 会显示已写入,但文件保持不变。事实上,当这种情况发生时,Vim 通常会抱怨文件已经更改,因为大概是.swp
文件的版本比预期的要早。
为了解决这个问题,我有时会保存到新文件,退出,删除旧文件,然后重命名新文件。然而,这种影响往往没有被注意到,最终我丢失了工作成果……这非常令人沮丧!
知道这里发生了什么吗?它只发生在 tmux 中,并且我是唯一连接到会话的用户。如果我关闭 tmux 会话(而不是分离),当我重新登录时,Vim 不再抱怨交换文件。
我可以通过执行以下操作来一致地复制此操作(或至少类似操作):
- 启动一个新的 tmux 会话
vim foo.txt
- 写点东西,写点东西
- 脱离 tmux 会话
- 重新连接到 tmux 会话
- 退出 vim
vim foo.txt
Vim 现在会抱怨存在交换文件foo.txt
(例如.foo.txt.swp
),即使当前目录中似乎没有这样的文件。
答案1
在 vim 中写入文件不会更改任何文件。旧文件将被新文件替换,旧文件保持不变。因此,如果您在其他地方打开了旧文件,则不会看到任何更改。Vim 的设计目的不是在其他程序使用文件时对其进行修改。