如何在会话自动加载时打开 vim 中的文件?
How to open file in vim while having session autoload?
我在 .vimrc 中有以下代码可以在 vim 开始时自动保存/加载会话:
" Session saving
" Automatically save / rewrite the session when leaving Vim
augroup leave
autocmd VimLeave * mksession! ~/.vim/session.vim
augroup END
" Automatically silently load the session when entering vim
autocmd VimEnter * silent source ~/.vim/session.vim
工作正常,我遇到的唯一问题是当我想创建新文件或打开现有文件时:
vim test.txt
在这种情况下,文件没有打开,而是加载了上次保存的会话。
期望的行为如下。当我 运行 vim
没有参数时 - 它恢复上一个会话。如果我提供文件参数,e.x。 vim test.py
- 它加载上一个会话并在新选项卡中打开/创建提供的文件。
怎么做?最好没有任何插件。
应该是这样的:
" use ++nested to allow automatic file type detection and such
autocmd VimEnter * ++nested call <SID>load_session()
function! s:load_session()
" save curdir and arglist for later
let l:cwd = getcwd()
let l:args = argv()
" source session
silent source ~/.vim/session.vim
"restore curdir (otherwise relative paths may change)
call chdir(l:cwd)
" open all args
for l:file in l:args
execute 'tabnew' l:file
endfor
" add args to our arglist just in case
execute 'argadd' join(l:args)
endfunction
我在 .vimrc 中有以下代码可以在 vim 开始时自动保存/加载会话:
" Session saving
" Automatically save / rewrite the session when leaving Vim
augroup leave
autocmd VimLeave * mksession! ~/.vim/session.vim
augroup END
" Automatically silently load the session when entering vim
autocmd VimEnter * silent source ~/.vim/session.vim
工作正常,我遇到的唯一问题是当我想创建新文件或打开现有文件时:
vim test.txt
在这种情况下,文件没有打开,而是加载了上次保存的会话。
期望的行为如下。当我 运行 vim
没有参数时 - 它恢复上一个会话。如果我提供文件参数,e.x。 vim test.py
- 它加载上一个会话并在新选项卡中打开/创建提供的文件。
怎么做?最好没有任何插件。
应该是这样的:
" use ++nested to allow automatic file type detection and such
autocmd VimEnter * ++nested call <SID>load_session()
function! s:load_session()
" save curdir and arglist for later
let l:cwd = getcwd()
let l:args = argv()
" source session
silent source ~/.vim/session.vim
"restore curdir (otherwise relative paths may change)
call chdir(l:cwd)
" open all args
for l:file in l:args
execute 'tabnew' l:file
endfor
" add args to our arglist just in case
execute 'argadd' join(l:args)
endfunction