![vim.desktop-终端退出时更改丢失](https://linux22.com/image/1135623/vim.desktop-%E7%BB%88%E7%AB%AF%E9%80%80%E5%87%BA%E6%97%B6%E6%9B%B4%E6%94%B9%E4%B8%A2%E5%A4%B1.png)
升级到 Ubuntu 16.04 后,我很高兴地注意到软件包vim
中有一个 GNOME 启动器,因为它提供了一个替代方案(一个可靠的应用程序,尽管不适合我的工作流程)。但是启动器有一个问题,很容易重现如下:vim-common
gvim
vim
- 右键单击文件并打开方式>Vim(不是Gvim!)...
vim
在终端上运行您的文件。 - 进行一些更改,但不要保存。
- 从标题栏关闭窗口,就像关闭
gvim
任何其他具有待处理更改的应用程序一样。 vim
由于进程与终端一起终止(留下交换文件),因此更改丢失
我想找到一个最佳实践方法来修复vim.desktop
文件(中的系统版本/usr/share/applications
),使vim
启动器成为的可行替代方案gvim
,因为该默认启动器就像一场等待发生的事故。
该选项Terminal=true
似乎是给定的,但Exec=vim %F
容易受到窗口死亡的影响,因此应该用包装脚本替换...但我需要建议
- 该包装器如何处理父终端死亡的信号
- 如何处理与用户关于保存文件的对话
在我看来,第二个任务是不可能的,因为您必须vim
根据用户的选择,使用会话本身进行 IPC 来要求保存或放弃文件……但我想在放弃之前在这里问一下。
我已经知道gvim
这是一种解决方法,但这并不能回答问题本身。我只是惊讶于这个弱vim
启动器竟然随 Ubuntu 和其他发行版一起提供,而它却给编辑过程带来了灾难。
答案1
答案在于追求我的倾向,即需要一个包装脚本,该脚本提供运行交互式子 shell 的方法(-i
选项bash
):
/usr/local/bin/vim-gnome-wrap
#!/bin/bash -f
bash -ic 'vim "$@"' vim "$@"
...然后编辑/usr/share/applications/vim.desktop
或将其复制到新*.desktop
文件,并进行以下更改:
TryExec=vim-gnome-wrap
Terminal=false
Exec=gnome-terminal -e "vim-gnome-wrap %F"
感谢@muru 指出另一个帖子Unix 和 Linux:终端和 Vim,为了更大的社区,我提供了更详细的答案。
答案2
这个问题已在Unix 和 Linux。很简单,没有真正的方法可以做到这一点。最简单的解决方法是在screen
或中运行 Vim tmux
。而不是:
Exec=vim %F
有:
Exec=screen vim %F
然后,即使您关闭了终端,您也可以打开另一个终端并恢复会话:
$ pgrep screen -a
974 gnome-screensaver
7853 SCREEN vim
$ screen -r