vim.desktop - изменения теряются при выходе из терминала

Я был рад отметить запуск GNOME для vim в пакете vim-common после обновления до Ubuntu 16.04, поскольку он предлагает альтернативу gvim (надежное приложение, хотя и не идеальное для моего рабочего процесса). Но есть проблема с модулем запуска vim, который легко воспроизводится следующим образом:

  1. Щелкните правой кнопкой мыши файл и откройте Open With> Vim (не Gvim!) ... vim на вашем компьютере. файл в терминале.
  2. Сделайте некоторые изменения, но не сохраняйте их.
  3. Закройте окно из строки заголовка, как если бы вы закрыли gvim или любое другое приложение с ожидающими изменениями.
  4. Изменения потеряны, так как процесс vim умирает вместе с терминалом (оставляя файл подкачки)

Я хотел бы найти лучший способ исправления vim.desktop файл (системная версия в /usr/share/applications), чтобы сделать пусковую установку vim жизнеспособной альтернативой gvim, так как эта пусковая установка по умолчанию подобна аварии, ожидающей случиться.

Опция Terminal=true выглядит как данность, но Exec=vim %F уязвима к окраске окна и поэтому должна быть заменена сценарием-обёрткой ... но мне нужен совет по

  • как эта оболочка может обрабатывать сигнал умирающего родительского терминала
  • , как обрабатывать диалог с пользователем о сохранении файла

Мне кажется, что вторая из этих задач невозможна так как вам нужно было бы выполнить IPC с самим сеансом vim, чтобы потребовать сохранения или удаления файла, в соответствии с выбором пользователя ... но я подумал, что я должен спросить здесь, прежде чем сдаться.

Я уже знаю, gvim - это обходной путь, но это не будет ответом на сам вопрос. Я просто удивлен, что этот слабый vim лаунчер поставляется с Ubuntu и другими дистрибутивами, когда он вызывает катастрофу в процессе редактирования.

1
задан 25 April 2016 в 11:54

2 ответа

Ответ заключается в преследовании моего наклона, что сценарий обертки был необходим с тем сценарием, обеспечивающим средства выполнить интерактивную подоболочку (-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, где ради более многочисленного сообщества я предоставил более подробный ответ.

0
ответ дан 25 April 2016 в 21:54
  • 1
    Что Вы делали? Внесение этих изменений не должно было влиять на окна вообще. – Panther 15 September 2017 в 12:18

Эта проблема была обсуждена на Unix & Linux. Вполне просто нет никакого реального способа сделать это. Самое простое обходное решение должно выполнить Vim в screen или tmux. Вместо:

Exec=vim %F

Имейте:

Exec=screen vim %F

Затем даже при закрытии терминала можно открыть другой терминал и возобновить сессию:

$ pgrep screen -a 
974 gnome-screensaver
7853 SCREEN vim
$ screen -r
0
ответ дан 25 April 2016 в 21:54
  • 1
    Я загрузил Linux от своего флеш-накопителя и выполнил шаги, данные в ссылке, которую Вы отправили – 10 Replies 15 September 2017 в 12:20

Другие вопросы по тегам:

Похожие вопросы: