Impedisci a vim di chiudere l'editor quando l'ultima finestra / suddivisione sono pagine della guida


8

Quando lavoro in vim, spesso ho una suddivisione, o divisioni, aperta contenente un file di aiuto.
Se chiudo altre finestre in modo :qtale che vim venga lasciato in uno stato con solo le finestre di aiuto aperte, vim chiude l'intero editor, il che mi fa perdere la mia posizione nelle pagine di aiuto. es. dire che ho questo 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 dovessi entrare nella finestra contenente app_db.sqlun problema con il :qcomando, sorprendentemente l'intero editor andrebbe perso.
Spesso mi ci vuole molto tempo - fino a 15-20 minuti - per cercare l'aiuto per scoprire finalmente quel contenuto di aiuto, quindi anche se non è esattamente lavoro perso, è sicuramente molto tempo perso quando ciò accade.
Come posso evitare che vim chiuda l'editor stesso quando chiudo una finestra con solo l'aiuto di aprire le finestre?

Possibili soluzioni che ho considerato

  • Semplicemente non chiudere l'ultima finestra quando ci sono finestre di aiuto aperte.
    • il problema è che non sto prestando attenzione a cosa c'è in altre finestre quando chiudo la finestra corrente.
  • Uso mksession
    • questo richiede che tu sappia in anticipo che è necessario :mksessione la chiusura dell'editor si verifica sempre in modo imprevisto.
  • Utilizzare un plug-in come ossessione di VIM che aggiorna costantemente un Session.vimfile.
    • Attualmente ho messo in pausa l'utilizzo di vim-obsession a causa (ironicamente), i Session.vimfile vim obsession spesso non ripristinano le schede contenenti le pagine della guida, ma i Session.vimfile generati da :mksessionripristinano le schede con le finestre della guida. (Anche un altro problema con le etichette delle schede non corrispondenti alle schede stesse)

Potrebbero esserci effetti collaterali non voluti, ma potresti provare un autocmd a guardare l' QuitPreevento che riporterebbe lo stato attivo alla finestra precedente prima di chiudere quello attuale:autocmd QuitPre * wincmd p
user9433424

@utente9433424 bello, che funziona! Grazie. Aggiungerò al mio ~/.vimrce terrò d'occhio eventuali strani effetti collaterali
the_velour_fog

@ user9433424 in realtà non funziona in tutti i casi, possibilmente quando l'ultima finestra aperta non è contrassegnata come la finestra precedente, ovvero wincmd pnon funziona perché p è forse nulla. Dovrò provare un po 'più tardi quando avrò tempo
the_velour_fog

Sì, ti dispiace, mi sono appena reso conto che non funzionava quando c'erano solo 2 finestre e stavi chiudendo la finestra di aiuto (quindi esce da Vim). Forse qualcuno avrà un'altra soluzione funzionante.
user9433424

obsessionsalverà finestre di aiuto se si aggiunge helpad sessionoptionsun certo tempo prima di salvare la sessione: set sessionoptions+=help.
Sato Katsura,

Risposte:


8

l'utilizzo del comando :clo[se]anziché :qsembra aver risolto il problema per me.
Vale a dire se ho problemi :clocon il layout della finestra sopra, provoca il lancio di VIM

E444: Impossibile chiudere l'ultima finestra.

In effetti sembra che :closefosse destinato a questa situazione, vale a dire prevenire la chiusura accidentale dell'editor quando tutto ciò che volevi fare era chiudere una finestra (o una scheda)

a partire dal :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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.