我知道Vim允许客户端服务器模式(:h clientserver
):可以将其转换为将获取一些命令并执行它们的服务器,以及将其发送到服务器的客户端。
我知道它是如何工作的,但是我无法想象此功能的实际使用:在什么情况下它有用,并且可以使用此功能创建什么工作流程?
所以我的问题很简单:Vim的客户端服务器模式有什么用?
(我再次指出,我的问题不是关于如何使其工作或如何工作,而是为什么要使用它。)
我知道Vim允许客户端服务器模式(:h clientserver
):可以将其转换为将获取一些命令并执行它们的服务器,以及将其发送到服务器的客户端。
我知道它是如何工作的,但是我无法想象此功能的实际使用:在什么情况下它有用,并且可以使用此功能创建什么工作流程?
所以我的问题很简单:Vim的客户端服务器模式有什么用?
(我再次指出,我的问题不是关于如何使其工作或如何工作,而是为什么要使用它。)
Answers:
在Vim 7.4的Channel / Job最新功能之前,客户端服务器功能是进行体面的后台编译的唯一方法-无需依赖Python。我们将编译作为后台作业开始,并在完成时将其通知回vim,这要归功于客户端服务器通道,它已经完成。
pyclewn等“插件”也间接使用它来将调试器集成到vim中。pyclewn实际上使用+ netbeans功能(在+ clientserver之上构建)。其他值得注意的项目使用此netbeans接口将vim与IDE集成-请参见:h netbeans-intro
。
一些测试插件(例如vimrunner)也使用它从命令行在Vim中运行测试。我用它来在travis上测试我的插件。
我还记得多亏了+ clientserver,将xdvi界面中的点击同步到了LaTeX源代码。
我的用法比卢克·赫米特(Luc Hermitte)的要简单一些(也许很平常)。
如果您使用此编译器启动gvim实例(并且已经存在了很长时间,例如在Fedora和Debian之类的主要linux发行版上),它将以服务器模式启动。我之所以强调“ gvim”,是因为我要描述的内容似乎不适用于vim
GUI终端中的单个实例(尽管我认为可能是,如果您适当地使用了参数)。
无论如何,您可以使用gvim --remote [file path]
(未--servername
指定)从该gvim实例中的任何位置打开任何文件。我对此很感兴趣,因为我不会直接使用vim浏览文件系统。取而代之的是,我使用正统的文件浏览器(午夜指挥官)-或更确切地说,由于它们mc
是轻量级的,因此它们的堆可以打开到不同的位置,并且允许使用各种配色方案外观来简化它们之间的区分(因此,我倾向于分开打开两个或三个)至少一个GUI终端中的选项卡)。但是,我认为同一原理将适用于任何允许与关联的自定义热键形式的文件浏览器gvim --remote %f
。在mc
用户菜单中找到它,因此F2 + e和突出显示/选定的文件将发送到gvim实例。
这样会好一些:如果您打开第二个 gvim实例,例如在同一桌面或单独的桌面的显示器#2上打开另一个 gvim实例,并且可能在那个桌面上使用不同的颜色方案,这次给它一个显式的--servername foo
,则可以发送文件到该实例,而不是:
gvim --servername foo --remote [file path]
根据您正在做的事情的范围等,可能会派上用场或可能不会派上用场。
less
,这是瞬时的,键退出),并可能将它们发送到vim以外的具有远程模式的应用程序(许多事情现在都在做,包括其他“编辑器”,有时我会使用这些“编辑器”来保留标题的堆叠选项卡以及Web浏览器) 。换句话说,我说用vim导航fs似乎是不使用mc
和--remote
;;的解决方法
我的工作流程类似于goldilocks在回答中所说的。我将vim8的:terminal
功能与--remote
option 结合使用。我在vim中维护2窗口布局。代码在左侧窗口中,右侧位于终端中。我使用正确的窗口(终端)来运行编译,导航文件系统并在当前vim实例中打开文件(从终端)。此流程使我可以在很少的鼠标参与下进行操作。
我使用gvim和icewm(任何窗口管理器都应该这样做)
启动一个gvim实例
gvim somefile
在gvim内部,以垂直拆分方式打开终端
:botright vertical terminal
(or) short form
:bo vert term
"botright" splits the window to right
在终端窗口中拆分
gvim --remote-send '<C-w><C-w>' --remote anotherfile
"--remote-send" will send Ctrl-W Ctrl-W to remote gvim instance(in our case, current instance)
to put the cursor in the left window. Otherwise, the terminal split would be replaced by
'anotherfile' buffer.
"--remote" will open 'anotherfile' in left window.
您可以在.zshrc / .bashrc中为这些长命令创建别名,并根据自己的喜好缩短它们。
通过此工作流程,我很少移出gvim实例,也很少使用鼠标。