vim.desktop - alterações perdidas quando saídas do terminal

1

Fiquei emocionada ao notar um lançador do GNOME para vim no pacote vim-common depois que eu atualizei para o Ubuntu 16.04, pois ele oferece uma alternativa para gvim (um aplicativo sólido, embora não perfeito para o meu fluxo de trabalho). Mas há um problema com o vim launcher, reproduzido facilmente da seguinte forma:

  1. Clique com o botão direito do mouse em um arquivo e abra com > Vim (não Gvim!) ... vim é executado no seu arquivo em um terminal.
  2. Faça algumas alterações, mas não as salve.
  3. Feche a janela na barra de título, pois você fechará gvim ou qualquer outro aplicativo com alterações pendentes.
  4. As alterações são perdidas, pois o processo vim é interrompido junto com o terminal (deixando um arquivo de permuta)

Gostaria de encontrar uma maneira prática de corrigir o arquivo vim.desktop (versão do sistema em /usr/share/applications ) para tornar o vim launcher uma alternativa viável a gvim , já que o inicializador padrão é semelhante um acidente esperando para acontecer.

A opção Terminal=true parece um dado, mas Exec=vim %F é vulnerável à janela que está morrendo e, portanto, deve ser substituído por um script de wrapper ... mas preciso de conselhos sobre

  • como esse wrapper pode manipular o sinal do terminal pai que está morrendo
  • como lidar com o diálogo com o usuário sobre como salvar o arquivo

Parece-me que a segunda dessas tarefas é impossível, já que você teria que fazer o IPC com a sessão vim para exigir que o arquivo fosse salvo ou abandonado, de acordo com a escolha do usuário ... mas eu pensei que eu perguntaria aqui antes de desistir.

Eu já sei que gvim é uma solução alternativa, mas isso não seria uma resposta para a pergunta em si. Estou apenas surpreso que este fraco lançador vim seja fornecido com o Ubuntu & amp; outras distros quando convida a catástrofe para o processo de edição.

    
por rphair 23.04.2016 / 21:22

2 respostas

2

A resposta estava em perseguir minha inclinação de que era necessário um script de wrapper, com esse script fornecendo os meios para executar um subshell interativo ( -i option to bash ):

/usr/local/bin/vim-gnome-wrap

#!/bin/bash -f
bash -ic 'vim "$@"' vim "$@"

... edite /usr/share/applications/vim.desktop ou copie-o para um novo arquivo *.desktop , com estas alterações:

TryExec=vim-gnome-wrap
Terminal=false
Exec=gnome-terminal -e "vim-gnome-wrap %F"

Obrigado a @muru por apontar o outro segmento Unix & amp; Linux: Terminal e Vim , onde, para o bem da comunidade maior, forneci uma resposta mais detalhada.

    
por rphair 24.04.2016 / 16:02
1

Este problema foi discutido em Unix & amp; Linux . Muito simplesmente, não há nenhuma maneira real de fazer isso. A solução mais simples é executar o Vim em screen ou tmux . Em vez de:

Exec=vim %F

Tenha:

Exec=screen vim %F

Então, mesmo que você feche o terminal, você pode abrir outro terminal e retomar a sessão:

$ pgrep screen -a 
974 gnome-screensaver
7853 SCREEN vim
$ screen -r
    
por muru 23.04.2016 / 22:10