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 *.desktop
Dateien, die zeigen, dass es möglich gnome-terminal
wäre, vim
ohne 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 bash
oder gnome-terminal
zum 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 -i
Option zu bash, wie sie aus der *.desktop
Datei ausgeführt wird, hat GNOME jedoch daran gnome-terminal
gehindert, 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.desktop
oder in eine neue *.desktop
Datei 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 vim
Puffer 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).