vim.desktop-终端退出时更改丢失

vim.desktop-终端退出时更改丢失

升级到 Ubuntu 16.04 后,我很高兴地注意到软件包vim中有一个 GNOME 启动器,因为它提供了一个替代方案(一个可靠的应用程序,尽管不适合我的工作流程)。但是启动器有一个问题,很容易重现如下:vim-commongvimvim

  1. 右键单击文件并打开方式>Vim(不是Gvim!)...vim在终端上运行您的文件。
  2. 进行一些更改,但不要保存。
  3. 从标题栏关闭窗口,就像关闭gvim任何其他具有待处理更改的应用程序一样。
  4. 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

相关内容