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

我知道它是如何工作的,但是我无法想象此功能的实际使用:在什么情况下它有用,并且可以使用此功能创建什么样的工作流程? :Vim的客户端服务器模式有什么用? >

评论

askubuntu.com/questions/225004/…,vi.stackexchange.com/q/5354/205

我倾向于将此范围过宽。

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

#1 楼


在Vim 7.4的Channel / Job最新功能之前,客户端服务器功能是进行体面的后台编译的唯一方法-无需依赖Python。我们开始将编译工作作为后台工作,并在完成后通过客户端-服务器通道通知vim它已经完成。
它也被pyclewn之类的“插件”间接使用以集成调试器进入vim。 pyclewn实际上使用+ netbeans功能(在+ clientserver之上构建)。其他值得注意的项目使用此netbeans接口将vim与IDE集成-请参阅:h netbeans-intro
一些测试插件(例如vimrunner)也使用它从命令行在Vim中运行测试。我用它来在travis上测试我的插件。
我还记得,借助+ clientserver,我可以将xdvi界面中的点击同步到我的LaTeX源代码。


评论


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

–statox♦
16年5月26日在12:01

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

–卢克·赫米特(Luc Hermitte)
16年5月26日在13:16

eclim是另一个例子。

–金锁
16年5月26日在14:27

#2 楼

我对它的使用比Luc Hermitte的要简单一些(也许很平常)。例如在主要的Linux发行版(如Fedora和Debian)上,它以服务器模式启动。我之所以强调“ gvim”,是因为我要描述的内容似乎不适用于GUI终端中的单个vim实例(尽管我认为可能是如果您正确使用了参数)。

无论如何,您可以使用gvim --remote [file path](未指定--servername)从该gvim实例中的任何位置打开任何文件。我对此很感兴趣,因为我不会直接使用vim导航文件系统。取而代之的是,我使用正统的文件浏览器(午夜指挥官)-或更确切地说,由于mc轻巧,并且允许各种配色方案皮肤简化它们之间的区别,因此它们会在不同的位置打开(因此我倾向于在其中打开两个或三个)至少一个GUI终端中的单独选项卡)。但是,我认为同一原理将适用于任何允许与gvim --remote %f关联的自定义热键形式的文件浏览器。在mc中,我将其保存在用户菜单中,因此将F2 + e和突出显示/选定的文件发送到gvim实例。

这会变得更好一些:如果打开第二个gvim实例,请说,在同一台式机或另一台式机的显示器#2上,也许在该显示器上使用不同的颜色方案,这次给它一个明确的--servername foo,您可以使用以下命令将文件发送到该实例:

 gvim --servername foo --remote [file path]


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

评论


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

–statox♦
16年5月26日在11:59

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

–金锁
16年5月26日在12:10



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

–statox♦
16年5月26日在12:13

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

–丰富
18年7月9日在15:24

对于那些感兴趣的人,我已经在unix.stackexchange.com/q/588202中讨论了如何在GUI终端而不是Gvim中对单个Vim实例应用相同的想法。

–Quasímodo
20年7月6日在14:07

#3 楼

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

#4 楼

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

#5 楼

我的工作流程类似于goldilocks在回答中所说的。我将vim8的:terminal功能与--remote选项结合使用。我在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中使用这些长命令,并根据您的喜好将它们缩短。