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