我正在编写一个在GUI vim文本编辑器中打开一个或多个文件的应用程序。不同的文件将由线程处理。现在,当我打开第二个文件时,线程第二次打开MacVim(导致它也挂起)但我真正想要的是它打开第二个选项卡。这是我得到了多远:
import threading
import os
from subprocess import call
EDITOR = os.environ.get("EDITOR", "/Applications/MacVim.app/Contents/MacOS/MacVim")
class MyThread (threading.Thread):
def __init__(self, sf):
threading.Thread.__init__(self)
self.sf = sf
def run (self):
call([EDITOR, self.sf])
L = ["/path/to/file1.txt",
"/path/to/file2.txt"]
while True:
path_to_file = L.pop()
tr = MyThread(path_to_file)
tr.start()
answer = input("Another thread to start? ")
if answer is not 'y':
break
在找到解决方案后进行编辑(基于下面给出的答案):
def run (self):
call([EDITOR, "--remote-tab-silent", self.sf])
由于存在名为VIM的默认服务器,因此似乎无需显式创建服务器。因此,通过提供选项--remote-tab-silent
,它立即开始使用它。
答案 0 :(得分:1)
:help client-server
不要打开多个Vims。打开一个Vim,使其成为服务器,然后向其发送命令以打开其他选项卡。这样,您不需要线程(除非您的线程也在做其他事情),因为每个vim调用都会立即解决,只是向正在运行的服务器发送命令,然后退出(只要有服务器)已经在运行了。)