Ngăn vim đóng trình chỉnh sửa khi cửa sổ / chia tách cuối cùng là trang trợ giúp


8

Khi tôi làm việc trong vim, tôi thường có một phần tách hoặc tách, mở có chứa một tệp trợ giúp.
Nếu tôi đóng các cửa sổ khác bằng cách sử dụng :qvim như vậy sẽ bị bỏ lại trong trạng thái chỉ có cửa sổ trợ giúp mở, vim sẽ đóng toàn bộ trình chỉnh sửa, khiến tôi mất vị trí trong các trang trợ giúp. ví dụ: tôi có bố cục này

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

Nếu tôi được nhập vào cửa sổ chứa app_db.sqlmột vấn đề các :qlệnh, đáng ngạc nhiên toàn bộ biên tập viên sẽ bị mất.
Tôi thường mất nhiều thời gian - lên tới 15-20 phút - để tìm kiếm trợ giúp để cuối cùng khám phá ra nội dung trợ giúp đó, vì vậy mặc dù nó không thực sự bị mất việc, nhưng chắc chắn sẽ mất rất nhiều thời gian khi điều này xảy ra.
Làm cách nào tôi có thể ngăn vim đóng trình chỉnh sửa khi tôi đóng cửa sổ chỉ với cửa sổ trợ giúp mở?

Các giải pháp khả thi tôi đã xem xét

  • Đơn giản là đừng đóng cửa sổ cuối cùng khi có cửa sổ trợ giúp mở.
    • Vấn đề với điều này là tôi không chú ý đến những gì trong các cửa sổ khác khi tôi đóng cửa sổ hiện tại.
  • Sử dụng mksession
    • điều này đòi hỏi bạn phải biết trước thời gian mà bạn cần :mksessionvà việc đóng trình soạn thảo luôn xảy ra bất ngờ.
  • Sử dụng một plugin như vim ám ảnh liên tục cập nhật một Session.vimtập tin.
    • Hiện tại tôi đã tạm dừng sử dụng vim-obsession vì (trớ trêu thay), các Session.vimtập tin vim ám ảnh thường không khôi phục các tab chứa các trang trợ giúp, nhưng các Session.vimtệp được tạo bằng cách :mksessionkhôi phục các tab bằng các cửa sổ trợ giúp. (Ngoài ra, một vấn đề khác với nhãn tab bị khớp sai với chính các tab)

Có thể có các tác dụng phụ ngoài ý muốn, nhưng bạn có thể thử một autocmd xem QuitPresự kiện sẽ tập trung trở lại cửa sổ trước đó trước khi đóng cái hiện tại:autocmd QuitPre * wincmd p
user9433424

@ user9433424 tốt đẹp, hoạt động! cảm ơn. Tôi sẽ thêm vào ~/.vimrcvà theo dõi bất kỳ tác dụng phụ kỳ lạ nào
the_velour_fog

@ user9433424 thực sự nó không hoạt động trong mọi trường hợp, có thể khi cửa sổ cuối cùng mở không được đánh dấu là cửa sổ trước, tức wincmd plà nó không hoạt động vì p có thể là null. Tôi sẽ phải kiểm tra một
lát

Vâng, bạn xin lỗi, tôi vừa nhận ra nó không hoạt động khi chỉ có 2 cửa sổ và bạn đang đóng cửa sổ trợ giúp (sau đó nó thoát khỏi Vim). Có lẽ ai đó sẽ có một giải pháp làm việc khác.
dùng9433424

obsessionsẽ lưu các cửa sổ trợ giúp nếu bạn thêm helpvào sessionoptionsmột thời gian trước khi lưu phiên : set sessionoptions+=help.
Sato Katsura

Câu trả lời:


8

sử dụng lệnh :clo[se]thay vì :qdường như đã giải quyết vấn đề cho tôi.
Tức là nếu tôi phát hành :clovới bố cục cửa sổ ở trên, nó sẽ khiến vim ném

E444: Không thể đóng cửa sổ cuối cùng.

Trong thực tế, có vẻ như nó :closeđược dành cho tình huống này, tức là để ngăn chặn việc vô tình đóng trình chỉnh sửa khi tất cả những gì bạn muốn làm là đóng một cửa sổ (hoặc tab)

từ :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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.