保存当前的 vim 会话状态并稍后恢复(例如缓冲区、分割等)

保存当前的 vim 会话状态并稍后恢复(例如缓冲区、分割等)

作为一个老 VIM 用户,一开始就被它吸引,尤其是因为它简单的正则表达式替换可以让工作速度非常快,我并不真正期望 VIM 具有这样的功能。但是,到底是什么,也许我忽略了一些东西或一些新奇的东西。

vim当以适合屏幕大小的 n 列分割模式重新打开大量文件(即项目的所有 cpp/h 源文件)时(请参阅下面的 bash 命令/别名),您是否碰巧知道一种方法,以先前打开/选定/活动的缓冲区是否已返回,而不是重置为跨可见缓冲区的前 n 个文件?有点像 IDE 那样,通过保存打开的文件状态来做到这一点。

# check the window size after each command and, if necessary,                   
# update the values of LINES and COLUMNS.                                       
shopt -s checkwinsize                                                           
alias vimcpp='find . \( -name '\''*.cpp'\'' -o -name '\''*.cc'\'' -o -name '\''*.cxx'\'' -o -name '\''*.c'\'' -o -name '\''*.hpp'\'' -o -name '\''*.hh'\'' -o -name '\''*.hxx'\'' -o -name '\''*.h'\'' \) -exec vim -O$(( ( ( $COLUMNS - 1 ) / 80 > 0 ) ? ( ( $COLUMNS - 1 ) / 80 ) : 1 )) \{} \+'

答案1

您可以使用 vim 会话来实现此目的。赶紧跑:

:mksession mysession.vim

并且将在当前目录中创建一个文件(称为“mysession.vim”)。当您下次打开 vim 时,您可以执行以下操作:

 :source mysession.vim

(或任何您命名的名称),您会发现自己回到了创建会话文件时的状态(所有拆分都将在那里等)。

帮助:

This is introduced in sections 21.4 and 21.5 of the user manual.

:mks[ession][!] [file]  Write a Vim script that restores the current editing
            session.
            When [!] is included an existing file is overwritten.
            When [file] is omitted "Session.vim" is used.


The resulting file, when executed with a ":source" command:

1. Restores global mappings and options, if 'sessionoptions' contains
   "options".  Script-local mappings will not be written.
2. Restores global variables that start with an uppercase letter and contain
   at least one lowercase letter, if 'sessionoptions' contains "globals".
3. Closes all windows in the current tab page, except the current one; closes
   all tab pages except the current one (this results in currently loaded
   buffers to be unloaded, some may become hidden if 'hidden' is set or
   otherwise specified); wipes out the current buffer, if it is empty
   and unnamed.
4. Restores the current directory if 'sessionoptions' contains "curdir", or
   sets the current directory to where the Session file is if 'sessionoptions'
   contains "sesdir".
5. Restores GUI Vim window position, if 'sessionoptions' contains "winpos".
6. Restores screen size, if 'sessionoptions' contains "resize".
7. Reloads the buffer list, with the last cursor positions.  If
   'sessionoptions' contains "buffers" then all buffers are restored,
   including hidden and unloaded buffers.  Otherwise only buffers in windows
   are restored.
8. Restores all windows with the same layout.  If 'sessionoptions' contains
   "help", help windows are restored.  If 'sessionoptions' contains "blank",
   windows editing a buffer without a name will be restored.
   If 'sessionoptions' contains "winsize" and no (help/blank) windows were
   left out, the window sizes are restored (relative to the screen size).
   Otherwise, the windows are just given sensible sizes.
9. Restores the Views for all the windows, as with |:mkview|.  But
   'sessionoptions' is used instead of 'viewoptions'.
10. If a file exists with the same name as the Session file, but ending in
   "x.vim" (for eXtra), executes that as well.  You can use *x.vim files to
   specify additional settings and actions associated with a given Session,
   such as creating menu items in the GUI version.

还有一个来自 Tpope 的插件调整会话的行为。

相关内容