Tmux:让 vim 命令在已经运行的 vim 实例中打开缓冲区

Tmux:让 vim 命令在已经运行的 vim 实例中打开缓冲区

我通常会为所有工作运行一个 tmux 会话,每个项目都有一个 tmux 窗口(选项卡)。每个 tmux 窗口都有一个运行 vim 的大窗口和一个或多个与项目相关的 shell/进程的窗口。例如,对于 django 项目,一个 shell 始终运行manage.py runserver,向我显示日志和错误,另一个用于移动文件、创建文件夹、复制内容等。

我经常发现自己在工作 shell 分割中输入“vim somefile.py”,从而生成另一个(非常小的)vim 实例。我想要实现的是让该 vim 命令在已打开的 vim 实例中打开一个包含指定文件的缓冲区。我知道使用 vim 的远程功能可以做到这一点,但我想知道是否有办法自动完成此操作,即包装 vim 命令以自动检测是否有实例在同一个 tmux 窗口中运行,然后发送远程命令,或者如果没有实例正在运行,则生成 vim 实例。

我不想让 vim 命令向 vim 实例发送远程命令其他tmux 窗口,因为那将是另一个项目。是否已经有什么可用的东西(vim 或 tmux 插件、包装器脚本等)?

答案1

你可以在启动文件zsh中创建一个 vim 函数,或者bash.zshrc.bashrc

就像是

if pgrep vim; then
    vim --servername --remote $*
else
    vim --servername tmux $*
fi

但实际上,我发现如果服务器不存在,Vim 会自动执行它:

$ vim --servername --remote TEST
E247: no registered server named "TEST": Send failed. Trying to execute locally

Press ENTER or type command to continue

如果你不能忍受这种延迟/ENTER 提示,那么尝试根据你的喜好自定义脚本函数 #1

相关内容