终端和 Vim

Ben*_*min 7 vim terminal

我打开一个终端,然后打开 Vim。然后我处理我的源代码,但不幸的是我点击了终端标题栏的关闭按钮,我的工作丢失了。是否可以将 Vim 配置为在我尝试关闭终端而不保存我的工作时告诉我?

谢谢!

小智 15

没有办法vim提前知道它的祖父进程(终端)被杀死了,所以它通常也会因为杀死父进程而被杀死。

但是,在大多数默认设置中,vim会创建一个.swp以当前正在编辑的文件命名的文件;例如MyPrecious.java.swp。此文件应包含MyPrecious.javavim进程被终止之前的文件快照。除非您vim专门设置将这些.swp文件放在其他目录中,否则它们应该与编辑的文件位于同一目录中,并且您可以轻松恢复编辑工作。

请注意,其中一些文件以点开头,.因此除非您ls -a用来列出目录中的文件,否则它们是不可见的。

  • +1 但您应该补充一点,`.swp` 文件名以 `.` 开头,因此默认情况下它是“不可见的”。 (4认同)

Edd*_*eel 12

从不同的角度看问题,screen或者tmux让你的 shell 独立于你的终端运行。当您关闭终端时,您可以打开一个新终端并重新连接到原始外壳。Vim 仍将运行。


Chr*_*own 7

vim无法控制终端的 GUI 处理方式WM_DELETE_WINDOW。相反,在您的终端中寻找一个设置,该设置控制终端在具有子级外壳时被要求关闭时的行为。


Ric*_*sen 5

这里Vim的知道终端已关闭的方式:该SIGHUP信号。

当您关闭终端时,SIGHUP信号被发送控制进程,通常是您的外壳。然后你的 shell 应该退出,导致 Vim 被发送SIGHUP信号。默认情况下,进程在收到SIGHUP信号时简单地终止

我不熟悉 Vim,但也许它可以配置为在SIGHUP收到信号时在退出之前保存所有工作。如果没有,也许你可以设置一个外壳trapSIGHUP,或许在组合与运行中的Vim nohup,执行一个特殊的命令,不知怎的,导致Vim时端子闭合更正常退出。