Ben*_*enj 487
你想要的东西
:mksession ~/mysession.vim
Run Code Online (Sandbox Code Playgroud)
然后您可以获取该vim文件,然后您将恢复旧会话:
:source ~/mysession.vim
Run Code Online (Sandbox Code Playgroud)
或使用-S选项打开vim:
$ vim -S ~/mysession.vim
Run Code Online (Sandbox Code Playgroud)
小智 59
您可能希望在vimrc中设置这些会话选项.特别是在保存会话后更改vimrc时,选项很烦人.
set ssop-=options " do not store global and local values in a session
set ssop-=folds " do not store folds
Run Code Online (Sandbox Code Playgroud)
小智 40
请注意:mksession不会将更改保存到您所创建的任何文件中.假设我将从那里开始,我在保存会话后犯了关闭vim的错误.但是下次我打开会话时,我对文件所做的更改就消失了.
gds*_*dso 32
如果您使用NERDTree作为文件资源管理器/破折号,我建议使用xolox/vim-session插件而不是内置的:mksession命令.出于某种原因,:mksession无法恢复NERDTree缓冲区.您的里程可能会有所不同,但我想我会分享我的经验.
mat*_*elo 15
如果您想在不使用任何插件的情况下自动执行该过程,您可以使用Go away并从Vim Tips Wiki返回.
每次退出Vim时,它都会保存当前会话,~/.vim/sessions并在打开Vim后再次加载.它也基于您当前的路径,因此如果您从不同的目录打开Vim,您将拥有不同的会话,这在处理不同的项目时非常有用.
只需编辑您的~/.vimrc文件并添加以下内容:
function! MakeSession()
let b:sessiondir = $HOME . "/.vim/sessions" . getcwd()
if (filewritable(b:sessiondir) != 2)
exe 'silent !mkdir -p ' b:sessiondir
redraw!
endif
let b:filename = b:sessiondir . '/session.vim'
exe "mksession! " . b:filename
endfunction
function! LoadSession()
let b:sessiondir = $HOME . "/.vim/sessions" . getcwd()
let b:sessionfile = b:sessiondir . "/session.vim"
if (filereadable(b:sessionfile))
exe 'source ' b:sessionfile
else
echo "No session loaded."
endif
endfunction
" Adding automatons for when entering or leaving Vim
au VimEnter * nested :call LoadSession()
au VimLeave * :call MakeSession()
Run Code Online (Sandbox Code Playgroud)
即使是初学者,这个脚本也有点容易理解和定制.
请注意,此脚本仅适用于Unix系统(MacOS/Linux),需要适应在Windows上运行.
更新:添加0xc0de的建议,VimEnter如果你希望Vim 只在没有提供参数的情况下加载会话,你可以替换这些的行:
if(argc() == 0)
au VimEnter * nested :call LoadSession()
endif
Run Code Online (Sandbox Code Playgroud)
由于这是我(可能还有其他人)第一次在 Google 上讨论如何在 Vim 中使用会话,因此我决定在@mathielo 的回答中添加一些关于如何使其自动化的答案。
我喜欢他的代码,但是“仅当没有 args”解决方案的添加似乎有点缺乏。这是我的修改版本:
function! MakeSession(overwrite)
let b:sessiondir = $HOME . "/.vim/sessions" . getcwd()
if (filewritable(b:sessiondir) != 2)
exe 'silent !mkdir -p ' b:sessiondir
redraw!
endif
let b:filename = b:sessiondir . '/session.vim'
if a:overwrite == 0 && !empty(glob(b:filename))
return
endif
exe "mksession! " . b:filename
endfunction
function! LoadSession()
let b:sessiondir = $HOME . "/.vim/sessions" . getcwd()
let b:sessionfile = b:sessiondir . "/session.vim"
if (filereadable(b:sessionfile))
exe 'source ' b:sessionfile
else
echo "No session loaded."
endif
endfunction
" Adding automatons for when entering or leaving Vim
if(argc() == 0)
au VimEnter * nested :call LoadSession()
au VimLeave * :call MakeSession(1)
else
au VimLeave * :call MakeSession(0)
endif
Run Code Online (Sandbox Code Playgroud)
这里的显着变化是可选的覆盖。如果你在没有选项的情况下打开 Vim,它将打开任何现有的会话并覆盖你离开时所做的更改。如果 Vim 用选项打开,它只会在不存在的情况下创建一个新会话,这意味着您可以在具有会话的目录中打开单个文件而不会覆盖它。然后你可以打开 Vim 而没有选项来运行会话。如果不存在会话,则它会创建一个新会话。
如果你计划只有 1 个项目的会话就做
:mks
Run Code Online (Sandbox Code Playgroud)
这将Session.vim在当前目录中创建一个文件,然后打开会话(从同一目录):
vim -S
Run Code Online (Sandbox Code Playgroud)
如果您更改会话并想要保存它:
:mks!
Run Code Online (Sandbox Code Playgroud)
这将保存会话,而不是文件本身!
如果你计划有多个 session,我更喜欢将它们保存在项目目录中的隐藏文件中:
:mks .session-name.vim
Run Code Online (Sandbox Code Playgroud)
打开它(从同一目录):
vim -S .session-name.vim
Run Code Online (Sandbox Code Playgroud)
保存会议:
:mks! .session-name.vim
Run Code Online (Sandbox Code Playgroud)
由于会话保存在隐藏文件中,查看它们不要忘记 -a
ls -a
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
80127 次 |
| 最近记录: |