VIM 保存状态 在工作中经常一段时间内在做一个东西, 会在一段时间内编辑同一个或几个文件,这时如果 vim 能记住上次编辑的文件那就方便多了, 不需要每次启动 vim 后切换目录, 寻找文件, (在 Dreamweaver 中每次启动时都会列出之前编辑过的文件) // // 保存 vim 设置 vim 的 :mksession 命令可以保存当前 vim 的状态,而且这个状态中要保存那些信息是可以 定制的(具体见 :h 'sessionoptions') :mksession 默认会生成 Session.vim 文件, 这是个 vim 脚本, 文件里的内容是 vim 的一些设 置, 这个文件和 _vimrc 差不多, 其实 _vimrc 就是 vim 脚本, vim 脚本就 是由 vim 命令设 置组成的. // // 读取 vim 设置 可以在 vim 启动时设置参数读取 session 文件来还原设置 vim -S /path/to/Session.vim 如果启动后想读取另外一个 session 设置, 可以直接读取 session 文件 :so /path/to/Session.vim ------------------------------------------------------------------------------ // // // 自动化 为了不需要每次都要手动保存, 手动读取. 在 _vimrc 中设置退出 vim 时自动保存下, 然后 在启动 vim 时自动读取上次保存的 session 文件 // // 退出时自动保存 vim 设置 _vimrc 中加入 --------{----------- set sessionoptions=buffers,curdir,resize,folds,tabpages " 注意目录要存在 autocmd VimLeave * mks! $HOME/vimfiles/session/Session.vim --------}----------- // // 启动 vim 时自动读取 session 文件, 两种方法 // 方法 A 相对灵活些(见说明) A: 自己启动 vim 时一般是在 cmd 下, 因此把 vim 命令自定义了下 vim.bat --------{----------- @echo off rem variable scope setlocal rem session 文件保存的位置: 用户目录下 set SESSION_FILE=%HOMEDRIVE%%HOMEPATH%/vimfiles/session/Session.vim rem vim 程序所在位置 set VIM_PROGRAM=%PROGRAMFILES%/Vim/vim73/vim.exe if "%1" == "" ( if exist "%SESSION_FILE%" ( rem echo "无参数 -> 带 session 启动" "%VIM_PROGRAM%" -S "%SESSION_FILE%" ) else ( rem echo "无参数 -> 不带 session 启动" "%VIM_PROGRAM%" ) ) else ( rem 有参数 set hasSessionFile=false rem 处理参数 :LoopStart if "%1"=="" ( goto LoopEnd ) else ( if "%1" == "-s" ( set hasSessionFile=true ) else ( set args=%args% %1 ) shift goto LoopStart ) :LoopEnd if "%hasSessionFile%"=="false" ( rem echo "无 -s -> 不带 session 启动" "%VIM_PROGRAM%" %args% ) else ( rem echo "有 -s -> 带 session 启动" rem echo "%VIM_PROGRAM%" %args% -S "%SESSION_FILE%" "%VIM_PROGRAM%" %args% -S "%SESSION_FILE%" ) ) endlocal rem 使用说明: rem = vim 不加参数使用上次 session 启动 rem = vim 加参数 rem = 参数中有 -s, 带上参数以上次 session 启动 rem = 参数中无 -s, 不加 session 启动 rem rem rem vim -n (启动vim, 创建新文件) --------}----------- 然后把 vim.bat 所在目录放到 path 中, 而且要在前面, 让系统找到 vim.bat 而不是 vim.exe // linux 下 shell 脚本 vim.sh --------{----------- #! /bin/bash SESSION_FILE=$HOME/.vim/session/Session.vim VIM_PROGRAM=/usr/bin/vim # vim 无参数 -> 带 session 启动 if test "X$1" == "X" then # 文件是否存在 if test -f $SESSION_FILE then $VIM_PROGRAM -S $SESSION_FILE else $VIM_PROGRAM fi else hasSessionFile=false args="" # 处理参数 while [ "X$1" != "X" ] do if test "X$1" == "X-s" then hasSessionFile=true else args="$args $1" fi shift done # 无 session 启动 if test "$hasSessionFile" == "false" then $VIM_PROGRAM $args # 带 session 启动 else if test -f $SESSION_FILE then $VIM_PROGRAM -S $SESSION_FILE $args else $VIM_PROGRAM $args fi fi fi # 使用说明: # = vim 不加参数使用上次 session 启动 # = vim 加参数 # = 参数中有 -s, 带上参数以上次 session 启动 # = 参数中无 -s, 不加 session 启动 # # # vim -n (启动vim, 创建新文件) --------}----------- B: _vimrc 中 autocmd --------{----------- autocmd VimEnter * :call s:ReadSession() function s:ReadSession() let session_file = $HOME . "/vimfiles/session/Session.vim" if filereadable( session_file ) execute "so " . session_file endif endfunction --------}-----------