Impedir que o vim feche o editor quando a última janela / divisão for páginas de ajuda

8

Quando estou trabalhando no vim, geralmente tenho uma abertura, ou divisões, aberta contendo um arquivo de ajuda.
Se eu fechar outras janelas usando :qo vim para ficar em um estado com apenas janelas de ajuda abertas, o vim fechará o editor inteiro, o que me fará perder a posição nas páginas de ajuda. por exemplo, diga que tenho esse layout

  tab1 (this is the only tab open)
+------------------+-------------+-----------------+
|                  |             |                 |
|                  |:h usr_26.txt|                 |
|  A normal file,  |             |    :h change.txt|
|  containing code |section 26.2 |                 |
|  e.g.            |line 47      |    line 272     |
|                  |             |                 |
|  app_db.sql      |             |                 |
|                  |             |                 |
|                  |             |                 |
|                  |             |                 |
|                  |             |                 |
|                  |             |                 |
|                  |             |                 |
+------------------+-------------+-----------------+

Se eu entrar na janela que contém app_db.sqlum problema no :qcomando, surpreendentemente todo o editor estará perdido.
Geralmente, demora muito tempo - até 15 a 20 minutos - para pesquisar a ajuda para finalmente descobrir esse conteúdo de ajuda; portanto, mesmo que não seja exatamente um trabalho perdido, é definitivamente muito tempo perdido quando isso acontece.
Como posso impedir que o vim feche o próprio editor quando fecho uma janela apenas com a ajuda de janelas abertas?

Possíveis soluções que considerei

  • Simplesmente não feche a última janela quando houver janelas de ajuda abertas.
    • o problema é que não presto atenção ao que há em outras janelas quando fecho a janela atual.
  • Usar mksession
    • isso exige que você saiba com antecedência o que precisa :mksessione o fechamento do editor sempre ocorre inesperadamente.
  • Use um plug-in como a obsessão do vim, que atualiza constantemente um Session.vimarquivo.
    • No momento, parei de usar o vim-obsession por causa de (ironicamente), os Session.vimarquivos que o vim obsession normalmente não restaura guias que contêm páginas de ajuda, mas os Session.vimarquivos gerados por :mksessionrestauram as guias com janelas de ajuda. (Outro problema com os rótulos das guias sendo incompatíveis com as próprias guias)
the_velour_fog
fonte
Pode haver efeitos colaterais não intencionais, mas você pode tentar um autocmd assistindo o QuitPreevento que retornaria o foco para a janela anterior antes de fechar a atual:autocmd QuitPre * wincmd p
user9433424 6/16
@ user9433424 legal, isso funciona! obrigado. Vou acrescentar ao meu ~/.vimrce manter um olho sobre quaisquer efeitos colaterais estranhos
the_velour_fog
@ user9433424, na verdade, não está funcionando em todos os casos, possivelmente quando a última janela aberta não está marcada como a janela anterior, ou seja, a wincmd pnão está funcionando porque talvez p seja nulo. Vou ter que testar um pouco mais tarde, quando eu chegar em tempo
the_velour_fog
Sim, desculpe, acabei de perceber que não funcionava quando havia apenas duas janelas e você estava fechando a janela de ajuda (então ela sai do Vim). Talvez alguém tenha outra solução funcional.
user9433424
obsessionvai economizar janelas de ajuda se você adicionar helpa sessionoptionsalgum tempo antes de salvar a sessão: set sessionoptions+=help.
Sato Katsura

Respostas:

8

usar o comando em :clo[se]vez de :qparece ter resolvido o problema para mim.
Ou seja, se eu emitir :cloo layout da janela acima, ele causará o vim

E444: Não é possível fechar a última janela.

De fato, parece que :closefoi planejado para essa situação, ou seja, para impedir o fechamento acidental do editor quando tudo o que você queria era fechar uma janela (ou guia)

de :h windows.txt

:clo[se][!]
:{count}clo[se][!]
CTRL-W c                    *CTRL-W_c* *:clo* *:close*
        Without {count}: Close the current window.  If {count} is
        given close the {count} window.

        When the 'hidden' option is set, or when the buffer was
        changed and the [!] is used, the buffer becomes hidden (unless
        there is another window editing it).

        When there is only one window in the current tab page and
        there is another tab page, this closes the current tab page.
        |tab-page|.

        This command fails when:            *E444*
        - There is only one window on the screen.
        - When 'hidden' is not set, [!] is not used, the buffer has
          changes, and there is no other window on this buffer.
        Changes to the buffer are not written and won't get lost, so
the_velour_fog
fonte