我该如何处理vim的交换文件系统?

时间:2014-02-15 06:31:24

标签: linux bash unix vim terminal

在ubuntu中使用vim时,我意外地按了暂停ctrl-z会话的vim。我正在编辑一个未保存的文件(我称之为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问题,我有两个选择:

  1. 找到会话并完成(最好)。
  2. 删除.swp文件(如果您确定其他git会话已消失)。
  3. 我怎么做这两件事?如果我执行rm test.swp,则看不到文件:

    rm: cannot remove `test.swp': No such file or directory
    

    在删除交换文件时我做错了什么?如何完成会话?


    编辑:我忘记了test.swp中的句号 因此,删除swp文件的正确方法是rm .test.swp

    我剩下的问题是如何恢复/完成暂停的vim会话。

2 个答案:

答案 0 :(得分:11)

这与Ubuntu无关,因为发生的是基本机制 几乎每个Unix操作系统。 通过按下^ Z你暂停(未结束)当前正在运行的vim会话。 vim 会话仍在那里,等待信号再次将其置于前台。

要重新启动会话: 如果vim直接从命令行启动 - 使用命令“fg”(用于“ForeGroung”),vim将再次出现。这适用于所有类似ksh / bourne的shell。对于t / csh,我不知道。这仅适用于在与启动vim相同的终端会话的控制台上发出命令“fg”(这是与vim会话相关的“控制终端”)。

如果vim从窗口管理器的菜单中启动(主要是名称为gvim),那么你在这里运气有点不合适,因为(g)vim与其控制终端分离。

您的恢复选择: 如果条件有效,请使用“fg”。这是最干净的方式。

如果(g)vim会话与控制终端分离,可以通过执行“ps -ef | grep vim”来检查。如果显示TTY的列(请参阅输出的标题) 一个 ”?”没有控制终端了,我建议发送过程 一个SIGHUB(请参阅命令“kill”/“killall”的manpage),然后是SIGKILL,如果它仍在那里。 杀死vim(或任何其他任务)可能会导致数据不一致,因为vim在被杀之前没有“保存”命令。

之后,使用相同的文件启动一个新的vim,首先执行“恢复”(由vim提供,查看相应的swp文件),保存文件,结束vim并使用该文件再次启动它做一个“删除交换文件”。这是杀死vim后最可能的方式。

为避免意外将vim置于背景中,如果不需要,请将^ Z映射到另一个,更多 “复杂”的关键序列,很难被意外压迫。你可以停用 ^ Z命令通过将以下行添加到.vimrc:

map <C-z> ;

另外:你的rm-command错过了.test.swp前面的点,导致rm没有 找到文件...或删除另一个文件,名为test.swp而不是“.test.swp”。通过vim删除swp文件,您一定要删除正确的文件。 Swp文件总是以UNIX(类似系统)上的点(隐藏文件)开头。

答案 1 :(得分:3)

该文件将为“.test.swp”,而不是“test.swp” 所以你想要:

rm .test.swp