在 ubuntu 中使用 vim
时,我不小心按下了 ctrl-z
,这暂停了我的 vim
session 。我正在编辑一个未保存的文件(我将其称为 test
)。
当我在 vim
中再次打开文件时,出现交换文件错误:
E325: ATTENTION
Found a swap file by the name ".test.swp"
Swap file ".test.swp" already exists!
根据 Found a swap file by the name问题,我有两个选择:
- 找到 session 并完成它(最好)。
- 删除
.swp
文件(如果您确定其他 git session 已经消失)。
我将如何做这两件事?如果我执行 rm test.swp
它看不到文件:
rm: cannot remove `test.swp': No such file or directory
我在删除交换文件时做错了什么,我该如何完成 session ?
编辑:我忘记了 test.swp
中的句号
所以删除swp文件的正确方法是rm .test.swp
。
我剩下的问题是如何恢复/完成暂停的 vim
session 。
最佳答案
这与 Ubuntu 无关,因为发生的是 Ubuntu 的基 native 制 几乎每个 Unix 操作系统。 按 ^Z 可以暂停(而不是结束)当前运行的 vim session 。 vim session 仍然存在,等待信号再次将其置于前台。
要重新激活 session : 如果 vim 是直接从命令行启动的——使用命令“fg”(用于“ForeGroung”),vim 将再次出现。这适用于所有 ksh/bourne 类 shell。对于 t/csh,我不知道。这仅在与启动 vim 的同一终端 session 的控制台上给出命令“fg”时有效(这是与 vim session 相关的“控制终端”)。
如果 vim 是从窗口管理器的菜单启动的(主要是在名称 gvim 下),那么您在这里有点不走运,因为 (g)vim 与其控制终端分离。
您的恢复选项: 如果上述条件有效,则使用“fg”。这是最干净的方式。
如果 (g)vim session 与控制终端分离,可以通过执行“ps -ef | grep vim”来检查。如果 TTY 列(请参阅输出标题)显示 一个 ”?”不再有控制终端,我建议发送流程 一个 SIGHUB(请参阅命令“kill”/“killall”的联机帮助页),然后是一个 SIGKILL(如果它仍然存在)。 杀死 vim(或任何其他任务)可能会导致数据不一致,因为在它被杀死之前没有对 vim 的“保存”命令。
之后,使用相同的文件启动一个新的 vim,首先执行“恢复”(由 vim 提供,它会看到相应的 swp 文件),保存文件,结束 vim 并使用该文件再次启动它,然后做一个“删除交换文件”。这是杀死 vim 后最省事的方法。
为了避免在不需要的情况下不小心将 vim 置于后台,请将 ^Z 映射到另一个,更多 “复杂”的键序列,很难意外按下。您可以停用 ^Z 命令,将以下行添加到您的 .vimrc 中:
map <C-z> ;
补充:您的 rm 命令错过了 .test.swp 前面的点,导致 rm 不 找到文件...或删除另一个名为 test.swp 而不是“.test.swp”的文件。通过 vim 删除 swp 文件,您一定会删除正确的文件。 在类 UNIX 系统上,Swp 文件始终以点(隐藏文件)开头。
关于linux - 我如何处理 vim 的交换文件系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21794235/