Dies kam zu mir, nachdem ich die Frage in einem anderen Forum gestellt hatte. AskUbuntu: vim.desktop - Änderungen, die beim Beenden des Terminals verloren gingen, und viele experimentelle *.desktopDateien, die zeigen, dass es möglich gnome-terminalwäre, vimohne Vorwarnung getötet zu werden, selbst wenn es in einer Shell ausgeführt würde und selbst wenn es dort wäre waren andere Befehle davor oder danach für bashoder gnome-terminalzum Ausführen.
Eine "interaktive" Shell ( bash -i) klang sicher, die GNOME-Warnung beim Schließen des Fensters aufzurufen, basierend auf der wörtlichen Warnmeldung:
Dieses Terminal schließen? In diesem Terminal wird noch ein Prozess ausgeführt. Durch Schließen des Terminals wird es getötet.
Das Hinzufügen der -iOption zu bash, wie sie aus der *.desktopDatei ausgeführt wird, hat GNOME jedoch daran gnome-terminalgehindert, in meinen Tests ein Fenster zu öffnen (mit Ubuntu 16.04 - 3.18.3). Also habe ich stattdessen versucht, die interaktive Shell über ein Wrapper-Skript aufzurufen, und das war eine vollständige Lösung:
/usr/local/bin/vim-gnome-wrap
#!/bin/bash -f
bash -ic 'vim "$@"' vim "$@"
... dann bearbeiten /usr/share/applications/vim.desktopoder in eine neue *.desktopDatei kopieren , mit folgenden Änderungen:
TryExec=vim-gnome-wrap
# It doesn't open window for interactive shell when GNOME arranges the terminal:
# Terminal=true
# Exec=vim-gnome-wrap %F
# ... yet it does so when gnome-terminal is run explicitly:
Terminal=false
Exec=gnome-terminal -e "vim-gnome-wrap %F"
Dies gibt beim Schließen des Fensters eine Warnung aus, ob der vimPuffer nicht gespeicherte Änderungen aufweist oder nicht, und funktioniert mit mehreren Dateien. Besonderer Dank geht an @muru unten für den Vorschlag einer $@Syntax, die Argumente genau beibehält (Leerzeichen und Metazeichen).