【问题标题】:How to make gvim main window not quit when I type `:q` or `:qa`?当我输入`:q`或`:qa`时如何使gvim主窗口不退出?
【发布时间】:2012-03-02 09:20:27
【问题描述】:

相反,我希望它关闭文件并打开默认的No Name 缓冲区。我有时不小心关闭了最后一个文件,我不得不重新启动 gvim 和 cd 到正确的目录。

【问题讨论】:

    标签: vim


    【解决方案1】:

    把它放在你的 $MYVIMRC

    function! NumberOfWindows()
      let i = 1
      while winbufnr(i) != -1
      let i = i+1
      endwhile
      return i - 1
    endfunction
    
    
    function! DonotQuitLastWindow()
      if NumberOfWindows() != 1
        let v:errmsg = ""
        silent! quit
        if v:errmsg != ""
            "echohl ErrorMsg | echomsg v:errmsg | echohl NONE
            "echoerr v:errmsg
            echohl ErrorMsg | echo v:errmsg | echohl NONE
        endif
      else
         echohl Error | echo "Can't quit the last window..." | echohl None
      endif
    endfunction
    
    if has("gui_running")
        cnoreabbrev <expr> q getcmdtype() == ":" && getcmdline() == 'q' ? 'call DonotQuitLastWindow()' : 'q'
        cnoreabbrev <expr> qa getcmdtype() == ":" && getcmdline() == 'qa' ? 'call DonotQuitLastWindow()' : 'qa'
    endif
    

    【讨论】:

    • 不错,而且看起来很安全(getcmdline() 调用)。现在,:qa 仍然会退出,但不会退出 q。
    • DonotQuitLastWindow 只会关闭一个窗口……如果被qa 触发,则为其添加一个参数并使其成为一个循环(while NumberOfWindows() != 1)。
    【解决方案2】:

    你为什么不使用

    :bd
    

    关闭缓冲区(保存最新更改后)?

    【讨论】:

      【解决方案3】:

      如果您改用:close 命令,该命令不会关闭最后一个窗口。

      【讨论】:

      • &lt;c-w&gt;&lt;c-c&gt; 可能会短一些。 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多