客户端-服务器模式的实际用途是什么?


23

我知道Vim允许客户端服务器模式(:h clientserver):可以将其转换为将获取一些命令并执行它们的服务器,以及将其发送到服务器的客户端。

我知道它是如何工作的,但是我无法想象此功能的实际使用:在什么情况下它有用,并且可以使用此功能创建什么工作流程?

所以我的问题很简单:Vim的客户端服务器模式有什么用?

(我再次指出,我的问题不是关于如何使其工作或如何工作,而是为什么要使用它。)



2
我倾向于将其范围过于广泛。
muru

3
我认为结局过于广泛。SE可能不是最适合该问题的平台,但我觉得我对该功能缺少某些了解,因此我认为其他人可以从这些答案中受益。
statox

Answers:


21
  • 在Vim 7.4的Channel / Job最新功能之前,客户端服务器功能是进行体面的后台编译的唯一方法-无需依赖Python。我们将编译作为后台作业开始,并在完成时将其通知回vim,这要归功于客户端服务器通道,它已经完成。

  • pyclewn等“插件”也间接使用它来将调试器集成到vim中。pyclewn实际上使用+ netbeans功能(在+ clientserver之上构建)。其他值得注意的项目使用此netbeans接口将vim与IDE集成-请参见:h netbeans-intro

  • 一些测试插件(例如vimrunner)也使用它从命令行在Vim中运行测试。我用它来在travis上测试我的插件。

  • 我还记得多亏了+ clientserver,将xdvi界面中的点击同步到了LaTeX源代码。


1
因此,不要被用户直接使用而是由第三方应用程序使用是有用的。感谢您的回答,这很有趣。
statox

4
@statox是的。我看到的主要用例是:与外部工具的简单集成。很简单,因为我们可以通过命令行输入vim命令和函数。
卢克·赫米特

1
eclim是另一个例子。
goldilocks

13

我的用法比卢克·赫米特(Luc Hermitte)的要简单一些(也许很平常)。

如果您使用此编译器启动gvim实例(并且已经存在了很长时间,例如在Fedora和Debian之类的主要linux发行版上),它将以服务器模式启动。我之所以强调“ gvim”,是因为我要描述的内容似乎不适用于vimGUI终端中的单个实例(尽管我认为可能是,如果您适当地使用了参数)。

无论如何,您可以使用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]

根据您正在做的事情的范围等,可能会派上用场或可能不会派上用场。


这是我没有想到的用例,但确实,如果您不喜欢从Vim中浏览文件,这可能是一个很好的解决方法。
statox

嗯,我不会认为这是“解决方法”,因为我正在做的另一件事(最少地)是同时使用文件浏览器浏览同一位置的文件(对于通过的文本less,这是瞬时的,键退出),并可能将它们发送到vim以外的具有远程模式的应用程序(许多事情现在都在做,包括其他“编辑器”,有时我会使用这些“编辑器”来保留标题的堆叠选项卡以及Web浏览器) 。换句话说,我说用vim导航fs似乎是不使用mc--remote;;的解决方法
goldilocks 2016年

1
是的,这本身就是工作流程,而不是解决方法,我的措词并不理想,但我理解您的回答的想法;-)
statox

1
使用Visual Studio时,我会在Vim中进行大部分编辑。我使用此功能在击键时打开当前文件(光标位于相同位置)。有关如何进行设置的信息,请参见将gvim与Visual Studio Vim技巧集成页上的作为外部工具的 Vim。
Rich

5

嵌入式开发。在嵌入式开发中,很多时候都有IP套接字,但是本地硬盘驱动器空间有限,或者没有非易失性内存,或者有许多其他东西。您可以在嵌入式板上启动服务器,然后在开发计算机上将其客户端连接到服务器,并在本地设置所有配置和标签。


1

我使用Vim,LaTeX和BibTeX撰写硕士论文。为了管理BibTeX引用,我使用了一个名为JabRef的程序。JabRef具有一个简洁的小功能,可以将其连接到Vim服务器实例,然后可以将BibTeX参考从JabRef“推”到您在Vim中编辑的LaTeX文档。


1

我的工作流程类似于goldilocks在回答中所说的。我将vim8的:terminal功能与--remoteoption 结合使用。我在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实例,也很少使用鼠标。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.