Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

neovimのプラグインをpythonで作る

$
0
0

概要

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

ファイルの内容

公式のサンプルをコピペ

test_plugin.py
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の再起動が必要かも

スクリーンショット 2018-04-04 14.02.08.png

プラグインが登録されているか確認

~/.local/share/nvim/rplugin.vim を調べて、作成したプラグインが登録されているかを確認

スクリーンショット 2018-04-04 14.05.39.png

実行

とりあえず、TestFunctionとTestCommandを試してみる
test.gif

自作プラグイン

pythonの強力なライブラリを使ったコマンドが一瞬でできそうなので、とりあえず作成してみる。
コマンドは、testcommand関数を応用して作っていきます。

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

ちょっと、形態素解析のところが適当に書かれてるのですが、大目に見て下さい ><

事前準備

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から「オアシス」の概要をコピーしてきて、形態素解析をかけてみました。

wordcount2.gif

感想

強力なツールのvim ✖️強力なpythonのライブラリ = 無限大の幸せ 笑
世の中には、人の時間を大量に搾取する恐ろしい問題がたくさんあるので、適当にプラグインを作っていきながら戦っていきたいですねー

参考文献


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>