Plugin 'xolox/vim-misc'
Plugin 'xolox/vim-session'
let g:session_autoload = 'yes'
let g:session_autosave = 'yes'
let g:session_autosave_to = 'default'
let g:session_verbose_messages = 0
#!/bin/bash
if [[ $# != 1 ]]
then
zenity --title "Vim IDE usage error" --error --text "Usage: vim_ide /path/to/project/dir."
exit 1
fi
if [[ ! -e "$1/.vim/ide.vim" ]]
then
zenity --title "Vim IDE usage error" --error --text "'$1' is not a Vim IDE project directory."
exit 1
fi
cd "$1" || { zenity --title "Vim IDE usage error" --error --text "Can't change current directory to Vim IDE project directory '$1'."; exit 1; }
.vim/版本.vim
set sessionoptions-=options
au VimLeave * :mksession! .vim/ide.session
if getfsize(".vim/ide.session") >= 0
source .vim/ide.session
endif
" tty is unique to the ssh session
let my_full_tty=$SSH_TTY
" scoop the number off the end of it
let my_tty_num = matchstr(my_full_tty, '\d\{1,}$')
" create a unique filename
let g:my_vim_session = "~/vim_session." . my_tty_num
fu! SaveSess()
execute 'mksession! ' . g:my_vim_session
endfunction
fu! RestoreSess()
let file = expand(g:my_vim_session)
if filereadable(file)
execute 'source ' . g:my_vim_session
endif
endfunction
autocmd VimLeave * call SaveSess()
" only restore the session if the user has -not- requested a specific filename
autocmd VimEnter * if !argc() | call RestoreSess() | endif
9条答案
按热度按时间gkn4icbw1#
我稍微修改了2ck的脚本,将一个
.session.vim
保存在当前工作目录中,而不是保存在当前打开的文件所在的目录中。此外,它会在取得档案来源之前检查档案是否存在。
yftpprvb2#
你可以做每个目录会话与这是你的vimrc:
这会使你的目录中充斥着.vim,但是你可以很容易地修改它。另外,如果你不想为每个文件都添加新的窗口,可以将sbuffer改为badd,并在vimrc中添加
ssop-=buffers
。kyvafyod3#
**xolox/vim-session**非常适合我。Vundle:
会话存储在
~/.vim/sessions/default.vim
中。332nm8kg4#
autosess插件可以很好地实现这一点。GitHub上也有:是的。
从插件的描述:
启动Vim时不带文件参数,自动加载当前目录的前一个会话。这使得处理复杂项目变得更容易-只需chdir到项目目录,然后启动
vim
。当你退出Vim时,如果有多个打开的标签/窗口,会话会被自动保存。这让你可以在同一个目录下编辑单个文件而不会中断你保存的会话。(Quickfix和vimdiff的窗口会被忽略。)
如果您退出Vim时没有打开文件,会话将被删除。这将允许您下次在此目录中启动通常的空Vim。
huwehgph5#
我使用vim的项目和每个项目都有.vim文件夹在我的项目的根.我使用启动脚本为vim
.vim/版本.vim
所以我按下一个命令启动vim
我所有打开的文件,标签,甚至位置光标都在退出前保存,并在启动后恢复。
plicqrtu6#
使用
gsessions
,在退出编辑器之前,你仍然需要用\ss保存你的会话。它会在启动时检测保存的会话,并询问你是否要打开它们。xv8emn3q7#
我有一个肌肉记忆的习惯,我一直无法摆脱键入“:q!"的习惯。如果我在vi会话中打开了多个缓冲区,这将变得非常乏味。因此,我需要一种简单的方法来恢复我不小心击中自己的脚时的位置。
由于我可能同时打开多个ssh会话,每个会话都在vi中打开了一组不同的缓冲区/窗口,因此这有点复杂。我需要一种方法来为每个不同的ssh会话分别保存会话。
我提出的解决方案基于2ck的答案,如下所示。在您的~/.vimrc中:
但是,当然,我不希望有大量的~/vim_session.?文件到处乱放,所以我会定期进行清理。(实际上,我可能会重新考虑这个问题,因为如果ssh意外断开连接会发生什么?)
在您的.bashrc:
并在bash_exit_script.pl中执行以下操作:
z9zf31ra8#
tpope的vim-obsession是现在最好的,在最初提出这个问题后发布。
使用
:Obsess
(文件/目录名可选)开始记录到会话文件,使用:Obsess!
停止并丢弃它。就是这样。以通常的方式加载会话:vim -S
,或者:source
它。:mksession
。BufEnter
上),还要调用:mksession
,这样即使Vim异常退出,我也可以继续运行。368yc8dk9#
在@Wolph的基础上进行了改进,这里是一个更健壮的代码,它分别处理每个文件的每个会话:
将此代码放在
.vimrc
上