


Archive for the 'vim' Category
vimからwordpressに投稿してみる
Author: あきを
前回のコードを単純にvimのbufferから読むようにしただけ
以下ソース
vim2wp.vim
python << EOF
username=‘username‘
password=‘XXXXXXX‘
# xmlrpc.phpのある場所を指定しておく
blog_url=‘http://xxxxx/xmlrpc.php‘
import vim
import xmlrpclib
wp = xmlrpclib.ServerProxy(blog_url)
content=unicode(‘\n‘.join(vim.current.buffer[:]), ‘utf-8‘)
title=unicode(vim.eval("input(’title :’)"), ‘utf-8‘)
if title == ”:
print "cancel post."
else:
category=vim.eval("input(’category :’)")
post={‘title‘:title,‘description‘:content}
categoryList = dict([(x['categoryName'], x['categoryId']) for x in wp.wp.getCategories(0,username,password)])
postID = wp.metaWeblog.newPost(”,username,password,post,1)
if category in categoryList.keys():
wp.mt.setPostCategories(postID, username, password,[{'categoryId':categoryList[category]}])
print "Finish post."
EOF
endfunction
:so vim2wp.vim
で、読み込んで
:call WP_post()
で、実行
title:
と聞かれるのでエントリーのタイトルを入力
何も入力しないとキャンセル
category :
次にカテゴリーを聞いてくるので入力
何も入力しないとデフォルトカテゴリーが適用される
read comments (0)vimでftp
Author: あきを
久しぶりにVimメモ
vimからftpに接続する場合、netrwプラグインが有効ならば
:vi ftp://ftp.xxx.com/
で接続できるけどログインするためには.netrcファイルを作成しておくと便利
書式は以下のような形
machine ftp.xxx.com login username password xxxxxxxx
ところが.netrcはreadableだと機能しないらしいので
chmod 700 .netrc
としておく必要がある。
vimで関数リスト
Author: あきを
vimでMELの関数リストを作るコマンド
:vimgrep '.*proc.*' %|cwin
ctags+taglist.vimを使えばよいのだけど、1行で済んだので
procという変数名がある場合、拾ってしまうのが難点
コマンド作って使ってます
command Funclist :vimgrep '.*proc.*' %|cwin
pythonなら
:vimgrep '^def.*:$' %|cwin
バッファに直でパイプ渡しする前にvimScriptでいろいろ加工すれば
もう少し面白くできそう
vimからmayaにコマンドを送るプラグイン(2)
Author: あきを
コマンド一時保存してsourceコマンドのみを送る仕様に変えてみた
vim2Maya.vim:
function! GetSelRange()
:let tmp = @@
:silent normal gvy
:let selected = @@
:let @@ = tmp
return selected
endfunction
function! Vim2Maya()
python << EOF
import socket
import sys, vim, string
tempPath = "C:/temp/"
fileId= open(tempPath+"v2m.mel","w")
fileId.write(vim.eval("GetSelRange()"))
fileId.close()
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost',8383))
s.send("source \""+tempPath+"v2m.mel\"")
s.close()
EOF
endfunction
これだと4kbの壁も関係なくなった。
で、今度はMayaからVimに結果を送るプラグインを書いてみようと思った。
pythonでsocketモジュールのrecvメンバを使用すればコマンドを受け取ることができるのだけれど、
vimはシングルスレッドなのでrecvしている間応答なしになってしまうわけです。
そのためには非同期通信を行う必要があるわけですが、うーむよくわからんぞ
<追記1>
問題を整理すると
●やりたいこと
Maya->Vimに出力結果をバッファに送りたい
●問題点
Vimはシングルスレッドなので、socketを待ち受け状態にするとタスクをとられてしまい(応答なし)状態になり、再描画すら行われなくなり結果も確認できない。
●解決案
・非同期通信を行う
pythonではselectモジュールを使用してI/Oの監視が可能。なので
まずI/Oをselectによって判別する。ソケットからの入力であれば受信し、標準入力であればバッファに文字を表示する
ただし、window版のPythonでは、selectはソケット入力しか使用できないので他の方法が必要
で、残りはtwistedを使ってみるかな
vimからmayaにコマンドを送るプラグイン(1)
Author: あきを
そんなスクリプトはないのかと
「vim maya」でぐぐったら当ブログが出てきてびびった。
で、一から書いてみた
Vim2Maya.vim:
function! GetSelRange()
:let tmp = @@
:silent normal gvy
:let selected = @@
:let @@ = tmp
return selected
endfunction
function! Vim2Maya()
python << EOF
import socket
import sys, vim, string
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost',8383))
src = vim.eval("GetSelRange()")
# delete line break character
srcT = src.split("\n")
src = string.join(srcT)
s.send(src)
EOF
endfunction
参考:
Digital Matrix
名無しのVIm使い
+python もしくは +dyn/PythonでコンパイルされたVimでしか使えません。
pythonでソケットを作ってコマンドを飛ばします。
改行文字を消しているのは、改行部分でスクリプトが細切れになるのでfor文等が実行できないためです。
vimのpluginフォルダにVim2Maya.vimをおき、VIMを起動。
Mayaの方は以下のMELでコマンドポートを開けておきます
commandPort -n ":8383";
で、VIM上でMayaに送りたい部分を選択して以下のコマンドを入力
:call Vim2Maya()
とすると、Maya上でMELが実行されます。
欲しいなぁと思ってた機能だけど実際はあんまり使えませんね。
アプリケーションが切り替わる感じが個人的にはまだしっくりこない感じです。
選択したスクリプトを直接飛ばしているのだけど
これだとソケットの仕様上4KB(4096B)までしか送れません。
一時バッファとしてどこかに保存にして、MELにはsourceコマンドを飛ばす方法にしたほうが
いい気がします。
あとMayaの出力をVimのバッファに持ってこれたらいいんですけどね
次回に続きます
