之前我们设计了一系列结合Ctrl键的复合键映射,以提升在 Vim 中的操作效率:
我们利用它们快速跳转窗口:map <c-j> <c-w>j, map <c-k> <c-w>k, map <c-h> <c-w>h, map <c-l> <c-w>l.
对于Tab选项卡的跳转,则设置为:map <c-left> :tabn<CR>, map <c-right> :tabp<CR>.
同时,我们也设置了流水作业的映射:map <c-s> :%s/5.1/5.2/g<cR>:wnext<CR>.
别忘了注释映射的关键细节:unmap a|" unmap a.
然而,在具有多Tab及多窗口的环境中,每次重启都需要重新组织窗口和Tab布局,为此我们需要一种解决方案。
探索:寻找会话保存功能若存在这样的功能,我们推测其应与:mkview相关。查询文档后:
发现:h mkview 提示view 包含参数列表如:当前文件参数(:args)、映射(map)、缩写(abbreviation)、折叠(folds)、滚动位置和光标位置等。
进一步研究,了解到还有一个关联的sessionoptions 参数。
通过 <c-]> 查看详细信息,发现sessionoptions 实际上包含了大部分mkview的功能,甚至更多。
会话(session)包含以下关键选项:
blank(空白窗口)
buffers(所有缓存)
curdir(当前目录)
folds(折叠)
globals(全局变量)
localoptions(本地选项)
这意味着只需具备上述选项的sessionoptions,:mksession就能代替:mkview的工作。此外,sessionoptions还包括更多功能:
resizeoptions(窗口大小调整选项)
sesdir(session会话文件所在目录,该目录可设为当前目录)
tabpages(选项卡页面)
terminal(终端存储的命令)
window位置大小相关选项(winpos, winsize)等。
这样一来,从Tabs到windows的所有状态都能被完整地保存下来。
操作实践:保存会话-mksession使用:mksession命令可以将当前会话保存。执行后:
:echo this_session 显示保存的位置为当前目录下的session.vim,形同于项目根目录的工作区配置。
查看session.vim的内容,会发现其中包含了刚才所提到的所有状态信息,总计1000+行之多,充分展示了它对当前状态的全面保存能力。
要恢复之前的状态,仅需运行:source session.vim或通过vim -S session.vim即可实现。
我们可以通过创建多个session来切换不同的项目工作区。
例如,拷贝oeasyvim为oeasy,得到两个独立的工作文件夹。
在每个工程文件夹内执行:mksession生成各自的Session.vim文件,从而实现各项目工作的独立配置和共享。
将session文件统一存放于~/.sessions目录下,并为每个项目创建子目录,便于集中管理和避免session文件混入git提交范围,可通过.gitignore文件进行排除。
但此做法可能导致工程程序素材与工程工作区分离,影响复制粘贴操作。
为了简化操作,我们可以将常用命令绑定至功能键:
将mksession命令绑定至F2键::map <F2> :mksession!<CR>,并在此基础上加入文件保存操作::map <F2> :wa<Bar>mksession!<CR>。
再进一步,将当前session文件名动态插入至mksession命令中::map <F2> :wa<Bar>exe "mksession! " . v:this_session<CR>,其中v:this_session为当前session名称。
同样,可以将加载session的操作绑定至F3键::map <F3> :source ~/oeasy/oeasy.vim<CR>,并在启动时自动加载对应session。
Vim先有:mkview用于保存窗口视图,后有:mksession保存整个会话。这反映了Vim逐渐适应多线程并发环境的需求增强。二者关系如下:
单一Tab和窗口工程适合使用:mkview。
多Tab和窗口工程推荐使用:mksession,因为它能完全替代:mkview的功能。
然而,原文提及“view 和 session 都是 viminfo 的有益补充”,这一点令人费解,究竟何意?对此我们将留待后续探讨。
小编建议本篇主要讲述了如何在 Vim 中定义和使用:mksession进行会话保存,并将其与:mkview进行比较;同时探讨了会话文件管理策略以及功能键映射的运用,以提高工作效率。至于view和session与viminfo之间的补充关系,有待进一步挖掘和阐述。
文章内容来源于网络,不代表本站立场,若侵犯到您的权益,可联系多特删除。(联系邮箱:[email protected])
近期热点
最新资讯