当运行宏时,VIM会提示输入变量吗?

5

我发现我在关闭和重新打开一组文件时浪费了很多时间,所以我想改进我的VIM宏来加载和保存多个会话,以支持多个会话。

我希望它能提示输入一个字符串值,这样我就可以按下我的快捷键,然后输入例如“foo”,并让我的宏将会话保存为.foo文件(因此我还需要对其进行基本的字符串拼接)。然后我会使用相同的方式来加载宏并通过主题管理会话(使用MVC框架,您倾向于有很多要处理的文件)。

" Control-S to save and Shift F5 to load
set sessionoptions=tabpages,winpos
map <S-F5> :source ~/.vim/.session<cr>
map <c-s> :mksession! ~/.vim/.session<cr>\| :echo "Session saved."<CR>

我在VIM脚本方面的经验非常有限。是否可能用一行代码或者一个小函数来实现这个功能呢?

谢谢。

2个回答

3
map <s-f5> :execute "source ".input("session name: ", "~/.vim/session.", "file")<cr>

输入“foo”可加载“session.foo”。

或者,您也可以这样做:

map <s-f5> :source ~/.vim/session.

请注意,这里没有回车符,因此您需要自己完成命令并按下回车键。与上面完全相同的输入方式,甚至包括文件名自动补全。
然而,在这个点上,我建议考虑调用一个函数或者完全使用其他方法。

2
@faB 我建议在第一个映射中将"file"作为input的第三个参数,以获得文件名自动完成。 - ZyX

0

这是我现在拥有的代码片段,如果有人需要类似的东西(无需投票),可以使用它。它将会话保存在.session.xyz下,这些会话也被排除在我的Git项目之外。我喜欢将它们存储在Git项目文件夹中,这样它们就可以与备份一起保存。

我也喜欢确认回显,因为当您保存会话后按Enter键,否则您看不到任何反应。这只是为了提供反馈。

 map <S-F5> :execute "source ".input("Load session: ", "~/Some/Project/.session.", "file")<cr>
 map <c-s> :execute "mksession! ".input("Save session: ", "~/Some/Project/.session.", "file")\| :echo "Session saved."<CR>

文件完成使得这非常方便,谢谢!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接