Cegah vim menutup editor ketika jendela / splits terakhir adalah halaman bantuan

8

Ketika saya bekerja di vim, saya sering memiliki split, atau splits, terbuka yang berisi file bantuan.
Jika saya menutup jendela lain menggunakan :qvim sehingga akan dibiarkan dalam keadaan dengan hanya bantuan windows terbuka, vim menutup seluruh editor, yang menyebabkan saya kehilangan posisi saya di halaman bantuan. mis. Katakanlah saya memiliki tata letak ini

  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      |             |                 |
|                  |             |                 |
|                  |             |                 |
|                  |             |                 |
|                  |             |                 |
|                  |             |                 |
|                  |             |                 |
+------------------+-------------+-----------------+

Jika saya memasuki jendela yang berisi app_db.sqlmasalah :qperintah, mengejutkan seluruh editor akan hilang.
Saya sering membutuhkan waktu yang lama - hingga 15-20 menit - untuk mencari bantuan untuk akhirnya menemukan konten bantuan, jadi meskipun itu bukan pekerjaan yang hilang, itu pasti banyak waktu yang hilang ketika ini terjadi.
Bagaimana saya bisa mencegah vim menutup editor itu sendiri ketika saya menutup jendela dengan hanya membantu membuka jendela?

Kemungkinan solusi yang saya pertimbangkan

  • Cukup jangan tutup jendela terakhir saat ada jendela bantuan yang terbuka.
    • masalah dengan ini adalah saya tidak memperhatikan apa yang ada di windows lain ketika saya menutup jendela saat ini.
  • Menggunakan mksession
    • ini mengharuskan Anda tahu sebelumnya bahwa Anda perlu :mksessiondan penutupan editor selalu terjadi secara tak terduga.
  • Gunakan plugin seperti obsesi vim yang terus-menerus memperbarui Session.vimfile.
    • Saat ini saya telah berhenti menggunakan obsesi vim karena (ironisnya), Session.vimobsesi vim membuat file sering tidak mengembalikan tab yang berisi halaman bantuan, tetapi Session.vimfile yang dihasilkan oleh :mksessionmengembalikan tab dengan membantu windows. (Juga masalah lain dengan label tab yang tidak cocok dengan tab itu sendiri)
the_velour_fog
sumber
Mungkin ada efek samping yang tidak diinginkan, tetapi Anda bisa mencoba autocmd menonton QuitPreacara yang akan memberikan fokus kembali ke jendela sebelumnya sebelum menutup yang sekarang:autocmd QuitPre * wincmd p
user9433424
@ user9433424 bagus, itu berfungsi! Terima kasih. Saya akan menambahkan ke saya ~/.vimrcdan mengawasi efek samping aneh
the_velour_fog
@ user9433424 sebenarnya tidak berfungsi dalam semua kasus, mungkin ketika jendela terakhir terbuka tidak ditandai sebagai jendela sebelumnya, yaitu wincmd ptidak berfungsi karena p nol mungkin. Saya harus menguji sedikit kemudian ketika saya mendapatkan waktu
the_velour_fog
Ya Anda benar, maaf, saya baru sadar itu tidak berfungsi ketika hanya ada 2 jendela, dan Anda menutup jendela bantuan (kemudian berhenti dari Vim). Mungkin seseorang akan memiliki solusi kerja yang lain.
user9433424
obsessionakan menghemat jendela bantuan jika Anda menambahkan helpuntuk sessionoptionsbeberapa waktu sebelum menyimpan sesi: set sessionoptions+=help.
Sato Katsura

Jawaban:

8

menggunakan perintah :clo[se]bukannya :qtampaknya telah memecahkan masalah bagi saya.
Yaitu jika saya masalah :clodengan tata letak jendela di atas, itu menyebabkan vim untuk melempar

E444: Tidak bisa menutup jendela terakhir.

Bahkan tampaknya :closeitu dimaksudkan untuk situasi ini, yaitu untuk mencegah penutupan tanpa disengaja editor ketika semua yang Anda ingin lakukan adalah menutup jendela (atau tab)

dari :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
sumber