NetBeans インターフェイス
netbeans.jax 翻訳完了。
http://www.kaoriya.net/vimdoc_j/vimdoc_ja-snapshot.tar.bz2
NetBeans インターフェイスって、別に NetBeans 専用じゃなくて、どんな IDE とでも統合できるようにするための汎用インターフェイスだったんだ…
メッセージは行指向のプレインテキストで送られるので、netcat などでも簡単に対話できる。
NetBeans サーバ役(Vim コントローラ)をするスクリプトを適当に書いてみた。
# -*- coding: utf-8 -*- import socket import os import sys import re HOST = '' PORT = 3219 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((HOST, PORT)) s.listen(1) conn, addr = s.accept() conn_f = conn.makefile() print 'Connected by', addr def sendToVim(bufID, name, arg=""): global sendsecno global conn_f sendsecno += 1 message = "%s:%s%s %s" % (bufID, name, sendsecno, arg) conn_f.write(message + "\n") conn_f.flush() print "SEND [%s]\n" % message, try: sendsecno = 0 while True: line = conn_f.readline().rstrip("\r\n") print "%s" % (line) m = re.match('^(\d+):(\w+)=(\d+)(.*)', line) if m: # イベント受信 bufID = m.group(1) eventName = m.group(2) seqno = m.group(3) arg = m.group(4) #print "==========> bufID=[%s] eventName=[%s] secno=[%s]" % (m.group(1), m.group(2), m.group(3)) if eventName == "fileOpened": filePath = arg.split()[0] print "filePath = [%s]" % filePath # bufID をセット sendToVim(1, "putBufferNumber!", filePath) # バッファの長さを取得 sendToVim(1, "getLength/") # バッファの0バイト目に文字列挿入 sendToVim(1, "insert/", '0 "Hello from NetBeans!"') except socket.error: pass finally: conn.close()
実行:
1. netbeans.py 起動
$ python netbeans.py
2. gvim 起動
.\gvim -u NONE -N -nb:localhost:3219:mypass
3. gvim 側で手動で vimrc を開く。
バッファに "Hello from NetBeans!" が挿入される。
キーボードから適当に挿入するとその都度イベントが送られる。
Connected by ('127.0.0.1', 2352) AUTH mypass 0:version=0 "2.4" 0:startupDone=0 0:fileOpened=0 "C:\\ao\\dl\\vim72-kaoriya-w32j\\vimrc" T F filePath = ["C:\\ao\\dl\\vim72-kaoriya-w32j\\vimrc"] SEND [1:putBufferNumber!1 "C:\\ao\\dl\\vim72-kaoriya-w32j\\vimrc"] SEND [1:getLength/2 ] SEND [1:insert/3 0 "Hello from NetBeans!"] 2 9306 3 1:insert=3 21 "\n" 1:remove=3 21 0 1:insert=3 21 "m" 1:remove=3 21 1 1:insert=3 21 "me" 1:remove=3 21 2 1:insert=3 21 "m" 1:remove=3 21 1 1:insert=3 21 "" 1:remove=3 21 0 1:insert=3 21 "メ" 1:remove=3 21 2 1:insert=3 21 "メッ" 1:remove=3 21 4 1:insert=3 21 "メッセ" 1:remove=3 21 6 1:insert=3 21 "メッセー" 1:remove=3 21 8 1:insert=3 21 "メッセージ" 1:remove=3 21 10 1:insert=3 21 "メッセージは" 1:insert=3 34 "" 1:insert=3 34 "\n" 1:remove=3 21 13 1:remove=3 21 12 1:insert=3 21 "メッセージはU" 1:remove=3 21 13 1:insert=3 21 "メッセージはUT" 1:remove=3 21 14 1:insert=3 21 "メッセージはUTF" 1:remove=3 21 15 1:insert=3 21 "メッセージはUTF-" 1:remove=3 21 16 1:insert=3 21 "メッセージはUTF-8" 1:remove=3 21 17 1:insert=3 21 "メッセージはUTF-8で"
何か面白い使い方を考えたいけど、Vim 側でのコマンド実行をほとんど拾えないので、IDE との統合以外にはあまり使えないような気がする。