Điều này đã đến với tôi sau khi tôi đặt câu hỏi trong một diễn đàn khác AskUbfox: vim.desktop - những thay đổi bị mất khi thiết bị đầu cuối thoát ra và rất nhiều *.desktop
tệp thử nghiệm chứng minh rằng gnome-terminal
sẽ cho phép vim
bị giết mà không cần cảnh báo ngay cả khi nó đang chạy trong vỏ & ngay cả khi có là các lệnh khác trước hoặc sau khi nó chạy bash
hoặc gnome-terminal
chạy.
Một shell "tương tác" bash -i
nghe có vẻ chắc chắn sẽ gọi cảnh báo Gnome khi đóng cửa sổ, dựa trên thông báo cảnh báo bằng chữ:
Đóng thiết bị đầu cuối này? Vẫn còn một quá trình chạy trong thiết bị đầu cuối này. Đóng thiết bị đầu cuối sẽ giết nó.
nhưng việc thêm -i
tùy chọn vào bash, khi chạy từ *.desktop
tệp, đã ngăn Gnome mở một cửa sổ trong thử nghiệm của tôi (với Ubuntu 16.04 - gnome-terminal
3.18.3). Vì vậy, thay vào đó tôi đã thử gọi trình bao tương tác từ tập lệnh trình bao bọc và đó là một giải pháp đầy đủ:
/usr/local/bin/vim-gnome-wrap
#!/bin/bash -f
bash -ic 'vim "$@"' vim "$@"
... Sau đó chỉnh sửa /usr/share/applications/vim.desktop
hoặc sao chép nó vào một *.desktop
tệp mới , với những thay đổi sau:
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"
Điều này cung cấp một cảnh báo khi đóng cửa sổ xem vim
bộ đệm có thay đổi chưa lưu hay không và hoạt động trên nhiều tệp. Đặc biệt cảm ơn @muru bên dưới vì đã đề xuất $@
cú pháp bảo tồn chính xác các đối số (dấu cách & siêu ký tự).