概要
neovimのプラグインが、pythonでコーディングできるということなので、試してみる
環境
- mac
- python3
インストール
brew install neovim
pip3 install neovim
プラグインの作成
ファイルの作成場所
neovimのruntimepathフォルダー以下の、rplugin/python3/にpythonファイルを作成する
自分の場合
~/.config/nvim/rplugin/python3/test_plugin.py
を作成した
Neovim allows python3 plugins to be defined by placing python files or packages in rplugin/python3/ (in a runtimepath folder). Python2 rplugins are also supported and placed in rplugin/python/, but are considered deprecated.
引用先: https://github.com/neovim/python-client#remote-new-style-plugins
ファイルの内容
公式のサンプルをコピペ
importneovim@neovim.pluginclassTestPlugin(object):def__init__(self,nvim):self.nvim=nvim@neovim.function("TestFunction",sync=True)deftestfunction(self,args):return3@neovim.command("TestCommand",range='',nargs='*')deftestcommand(self,args,range):self.nvim.current.line=('Command with args: {}, range: {}'.format(args,range))@neovim.autocmd('BufEnter',pattern='*.py',eval='expand("<afile>")',sync=True)defon_bufenter(self,filename):self.nvim.out_write("testplugin is in "+filename+"\n")
プラグインの登録
vimのコマンドラインモードで、下記を実行
:UpdateRemotePlugins
- vimの再起動が必要かも
プラグインが登録されているか確認
~/.local/share/nvim/rplugin.vim を調べて、作成したプラグインが登録されているかを確認
実行
とりあえず、TestFunctionとTestCommandを試してみる
自作プラグイン
pythonの強力なライブラリを使ったコマンドが一瞬でできそうなので、とりあえず作成してみる。
コマンドは、testcommand関数を応用して作っていきます。
@neovim.command("TestCommand",range='',nargs='*')deftestcommand(self,args,range):self.nvim.current.line=('Command with args: {}, range: {}'.format(args,range))
今回のコマンドの処理内容は下記の感じ
1. 前提として、ある文書をyankして、clipboardに挿入
2. コマンドを実行し、clipboardに存在する文書を形態素解析して、各形態素とその頻度を計算
3. 現在のカーソルの位置から、頻度を降順に並び替えて、paste
ちょっと、形態素解析のところが適当に書かれてるのですが、大目に見て下さい ><
事前準備
- pythonでmecabを使う
- pyperclipのinstall
importneovimimportpyperclipimportsubprocessimportsysimportMeCabfromcollectionsimportCounter@neovim.pluginclassTestPlugin(object):def__init__(self,nvim):self.nvim=nvim@neovim.function("TestFunction",sync=True)deftestfunction(self,args):return3@neovim.command("TestCommand",range='',nargs='*')deftestcommand(self,args,range):self.nvim.current.line=('Command with args: {}, range: {}'.format(args,range))@neovim.autocmd('BufEnter',pattern='*.py',eval='expand("<afile>")',sync=True)defon_bufenter(self,filename):self.nvim.out_write("testplugin is in "+filename+"\n")@neovim.command("WordCount",range='',nargs='*')defwordcountcommand(self,args,range):m=MeCab.Tagger("-Ochasen")# クリップボードから文書を取得sentence=pyperclip.paste()# 形態素解析out="\n".join([w+"\t"+str(cnt) \
forw,cntin \
Counter([l.split("\t")[0]forlinm.parse(sentence).strip().split("\n")]).most_common()])# クリップボードへ挿入pyperclip.copy(out)# クリップボードからpasteself.nvim.command("put")
自作プラグインの登録
vimのコマンドラインモードで、下記を実行
:UpdateRemotePlugins
- vimの再起動が必要かも
自作プラグインの実行
wikipediaから「オアシス」の概要をコピーしてきて、形態素解析をかけてみました。
感想
強力なツールのvim ✖️強力なpythonのライブラリ = 無限大の幸せ 笑
世の中には、人の時間を大量に搾取する恐ろしい問題がたくさんあるので、適当にプラグインを作っていきながら戦っていきたいですねー
参考文献
- python clientのgithub
- neovimのプラグインの作成方法を書いている、まとまっている資料
- めちゃんこ助けられたissue
- 忘れた、思い出したら貼る