#vim #neovim #command-line #文件管理器 #mksession

bin+lib vsm

一个简单、交互式、命令行 vim 会话文件管理器

2 个版本

0.1.1 2022年11月11日
0.1.0 2022年11月10日

命令行工具 中排名第 1951

自定义许可协议

300KB
930

Vim 会话管理器


Crates.io Crates.io docs.rs Crates.io

一个 极快、简单、交互式的命令行会话管理器

目录

背景

如果你每天使用 vim 或 neovim,并在大型代码库中工作,那么一次打开 10+ 个标签并使用各种分割可能并不罕见。一旦你关闭这个 vim 会话,布局就会丢失。vim(neovim) 中的 mksession 命令可以帮你保存会话,从而将会话保存到目录中,承诺让你以你离开时的样子返回。然而,问题是我们大多数人积累了大量散落在各处的会话文件,我个人有 41 个 vim 会话文件,轻松加载它们,记住每个的上下文,以及删除过时的会话变得麻烦。于是出现了 vsm (Vim 会话管理器),它允许你以交互式或按名称列出、打开和删除会话文件。它还管理不同版本的 vim,并允许你在它们之间切换。例如,你可能是一名 neovide 用户,而不是 neovim 用户,vsm 目前支持 vim, neovim, neovide 和 gvim

类似的项目

目前我只找到了 一个其他项目,它允许更深入地管理会话文件。然而,它并不符合我的需求,因为它是用 vim 脚本编写的,存在无用的功能退化,并且严重依赖于 xolox 杂项插件,仅为了管理一些会话文件,就加载了超过 1200 行左右的 vim 脚本,它似乎也没有维护,最后更改记录在 2014 年 7 月 6 日。因此,我编写了 vsm,它似乎是一个更好的解决方案,创建一个外部 CLI 程序,并尽可能将工作从 vim 中卸载。

安装

使用 cargo 安装

cargo安装 vsm

从源代码构建

将优化后的二进制文件安装到 $HOME/.local/bin

git clone https://gitlab.com/thebashpotato/vsm
cargo install just
just install

使用方法

设置

系统上期望存在一个环境变量 VIM_SESSIONS,如果未定义,则当 vsm 查找您的会话文件时,将默认使用 ~/.config/vim_sessions。以下是在不同shell中设置该变量的两个示例。您可以将路径设置在任何您想要的位置。

  • bash/zsh export VIM_SESSIONS="$HOME/.config/vim_sessions"

  • fish set -Ux VIM_SESSIONS "$HOME/.config/vim_sessions"

更容易创建会话文件(在vim中)

vsm 可以加载、列出和删除会话文件,但它不能创建它们。这是 vim 的工作。

将以下片段添加到您的 .vimrcinit.vim 中,以便更容易地创建新的会话文件。现在在 normal mode 中,您可以按 mk 快速保存您的会话文件。

if isdirectory(expand($VIM_SESSIONS))
  " Create a new sesion file (must give the file a unique name
  nnoremap mk :mksession $VIM_SESSIONS/
  " Overwrite an existing sessioon file with your current layout
  nnoremap mo :mksession! $VIM_SESSIONS/
else
  nnoremap mk :echo "VIM_SESSIONS directory does not exist"<CR>
  nnoremap mo :echo "VIM_SESSIONS directory does not exist"<CR>
endif

开发

只需启动所有工具和配置。

cargo install just
just init # setup repo, install hooks and all required tools

运行

just run

测试

just test

在提交您的作品之前

just pre-commit

查看所有可用的命令

just list

维护者

@thebashpotato

贡献

接受PRs。

小贴士:如果您正在编辑README,请遵守 standard-readme 规范。

许可协议

本项目许可协议为

依赖项

~9–20MB
~271K SLoC