Qua*_*odo 3 command-line vim terminal x11 file-manager
我通常不从 Vim 导航我的文件系统,而是使用文件管理器,有时甚至使用良好的旧交互式 shell(命令行)。
发出vim file的命令行或从一个终端基于文件管理器(MC,Vifm,游侠,...)完全违背了他们的导航的目的,因为Vim接管终端,阻断壳或文件管理器。当然,即使这对于 GUI 文件管理器来说也是不可能的,因为它们不在终端中运行。
一般的解决方案是使用xterm -e vim file &
在自己的终端中打开每个所需的文件,但一段时间后我最终会打开各种终端,每个终端都有一个文件,并且在它们之间循环
AltTab变得很麻烦。
有没有办法在同一个现有 Vim 实例的新缓冲区/选项卡中从我的导航实用程序(无论它是什么)打开每个新文件?
首先确保vim --version | grep clientserver返回
+clientserver。如果它返回-而不是+,启用该功能的一个简单方法是安装 Gvim,即使我们不会使用它。在 Debian 和 Ubuntu 中,sudo apt install vim-athena0
安装它。对于明确想要跳过 Gvim 的有经验的用户来说,另一种选择是从带有标志的源代码构建 Vim--with-x=yes --disable-gui。
现在您有了+clientserver,请创建vimserver包含内容的文件:
#!/bin/sh
case "$(vim --serverlist)" in
*XTVIM*) vim --servername XTVIM --remote-tab "$@" ;;
*) xterm -e vim -p --servername XTVIM "$@" & ;;
esac
Run Code Online (Sandbox Code Playgroud)
不要忘记vimserver在您的目录中放入一个目录$PATH
并使用chmod +x vimserver. 如果您使用其他终端,请在其联机帮助页中查找在新终端窗口1 中执行命令的适当标志。
在一些文件上测试它(可以在参数中传递多个文件):
vimserver file1 file2
vimserver file3 file4 file5
Run Code Online (Sandbox Code Playgroud)
每个文件都将在同一个 Vim 实例的新选项卡中打开。如果你想新的文件将在一个新的缓冲区,只是改变--remote-tab到--remote并删除-p标志。
vimservercase 语句检查 Vim 服务器 XTVIM(名称是任意的)是否存在。如果是(第三行),XTVIM 加载文件。如果不是(第 4 行),将启动一个新终端和新的 Vim 服务器(名为 XTVIM)。该文件被加载到那个新的 Vim 实例中。
在现有服务器中打开文件时,终端未聚焦。对于 XTerm、URxvt 和 Kitty,为窗口设置实例名称并添加 Xdotool 行可以解决:
#!/bin/sh
case "$(vim --serverlist)" in
*XTVIM*)
xdotool search --classname XTVIM windowactivate
vim --servername XTVIM --remote-tab "$@" ;;
*) xterm -name XTVIM -e vim -p --servername XTVIM "$@" & ;;
esac
Run Code Online (Sandbox Code Playgroud)
由于该-name选项,Xdotool 可以定位 Vim 窗口并请求焦点到它。某些终端缺少该选项,在这种情况下,尝试通过用
或替换 Xdotool 行来匹配窗口标题(假设您没有对 Vim 的选项大惊小怪)。wmctrl -a XTVIMxdotool search --name XTVIM windowactivatetitlestring
虚拟机
filextype <text/*> vimserver %f
Run Code Online (Sandbox Code Playgroud)
可以通过视觉模式或标记同时打开多个文件。
午夜指挥官
编辑扩展文件~/.config/mc/mc.ext:
type/text
Open=vimserver %s
Run Code Online (Sandbox Code Playgroud)
在 MC 中也可以标记多个文件。
GUI文件管理器
对于他们中的许多人来说,该过程是右键单击文本文件Open with... > Custom command line / Use a custom command. 在命令文本字段中,输入vimserver并标记复选框(如果有)或按下将其设置为默认值的按钮。
如果您对 Gvim 2 没问题,请不要打扰vimserver. 只需使用
gvim --remote-tab-silent.
0:也有 GTK GUI,但 Athena 是最轻的。
1:Gnome-terminal、Xfce4-terminal 和 Terminator 使用-x标志,而不是-e.
2:Goldilocks在客户端-服务器模式的实际用途是什么?中关于 Gvim 用法的评论
?.