最後のウィンドウ/スプリットがヘルプページであるときにvimがエディターを閉じないようにする


8

vimで作業しているとき、ヘルプファイルを含む分割が開いていることがよくあります。vimがヘルプウィンドウのみが開いた状態のままになるよう
に他のウィンドウを:q閉じると、vimはエディター全体を閉じます。これにより、ヘルプページでの位置が失われます。例:このレイアウトがあるとしましょう

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

コマンドをapp_db.sql発行したウィンドウに入ると:q、驚くことに、エディタ全体が失われます。
多くの場合、ヘルプを検索してそのヘルプコンテンツを最終的に見つけるのに、最大15〜20分かかります。そのため、作業が完全に失われたわけではありませんが、これが発生すると、明らかに多くの時間が失われます。
ヘルプウィンドウのみが開いているウィンドウを閉じるときに、vimがエディター自体を閉じるのを防ぐにはどうすればよいですか?

私が考えた可能な解決策

  • ヘルプウィンドウが開いているときに、最後のウィンドウを閉じないでください。
    • これの問題は、現在のウィンドウを閉じるときに他のウィンドウの内容に注意を払っていないことです。
  • 使用する mksession
    • これには、事前に知っておく必要があること:mksessionと、エディターが常に予期せず終了することが必要です。
  • 常にファイルを更新するvim obsessionのようなプラグインを使用しSession.vimます。
    • (皮肉にも)vim-obsessionを使用して一時停止していSession.vimます。vimobsessionがSession.vim作成するファイルはヘルプページを含むタブを復元しないことがよくありますが、によって生成されたファイル:mksessionはヘルプウィンドウでタブを復元します。(また、タブラベルがタブ自体と一致しない別の問題)

そこ意図しない副作用かもしれないが、あなたは見てautocmdしようとすることができQuitPre、現在の1を閉じる前に、前のウィンドウにフォーカスバックを与えるイベントを:autocmd QuitPre * wincmd p
user9433424

@ user9433424いいですね、うまくいきました!ありがとう。私に追加して~/.vimrc、奇妙な副作用を
監視し

@ user9433424は実際にはすべてのケースで機能していません。おそらく、最後に開いたウィンドウが前のウィンドウとしてマークされていない場合、つまり、wincmd ppがnullである可能性があるため、機能していません。時間があるときは少し後でテストする必要があります
the_velour_fog

はい、申し訳ありません。ウィンドウが2つしかない場合は機能せず、ヘルプウィンドウを閉じるとVimが終了します。多分誰かが別の実用的な解決策を持っているでしょう。
user9433424 2016

obsessionセッションを保存する前に時間を追加helpすると、ヘルプウィンドウが保存されます。sessionoptionsset sessionoptions+=help
佐藤桂

回答:


8

:clo[se]代わりにコマンドを使用すると:q、問題が解決したようです。
つまり:clo、上記のウィンドウレイアウトで問題が発生すると、vimがスローされます。

E444:最後のウィンドウを閉じることができません。

実際:close、これはこのような状況を想定していたようです。つまり、ウィンドウ(またはタブ)を閉じるだけでエディタが誤って閉じられるのを防ぐためです。

から :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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.