Upgrade to Pro — share decks privately, control downloads, hide ads and more …

好きな言語でNeoVimのプラグイン書きたい!書きたくない?

 好きな言語でNeoVimのプラグイン書きたい!書きたくない?

大LT 2023 春 in Aizuの登壇資料です
https://zli.connpass.com/event/280495/

Reo YAMADA

May 14, 2023
Tweet

Other Decks in Programming

Transcript

  1. 自己紹介
 @n04ln
 • のあって呼んでください
 • noahのleet文字列です
 所属
 • 株式会社サイバーエージェント
 •

    新卒4年目
 • 大学はここ、ヅ大(24期生)
 • 部署はAmebaブログ
 ◦ GCP, AWS, Go, Java etc…
 はじめて触ったエディタはVim
 @n04ln
 @n04ln

  2. vimscriptのクセあるとこ(1)
 • 変数のprefixが癖あるなと(個人的意見)
 ◦ a: 関数の引数
 ◦ l, g: ローカルorグローバル変数


    ◦ b, t, w: バッファ, タブ, ウィンドウでのスコープ変数
 ◦ v: vimの定義済み変数。真偽値はv:trueなど
 • モダンな言語にあるような機能がなかったり、追加されたのが最近 だったり。

  3. NeoVim - Remote Plugin
 • NeoVimに付属するRemote Plugin機能
 • 好きな言語で書くプラグインで処理
 ◦

    I/Oは標準入出力を使ってmsgpack rpcを利用
 ◦ NeoVimから扱う関数、コマンドを定義でき、APIを介して操作が できる
 ◦ NeoVim本体とつなぐ部分でチョットだけvimscript
 • 仕組み自体はLSPに似ている
 ▪ クライアントはNeoVim以外に互換はない

  4. NeoVim - Remote Plugin
 nvim_buf_set_lines(buf, 0, -1, true, "てきすと") 


    FuncXXX(YYY, ZZZ)
 処理
 好きな言語で書いた
 プラグインプロセス
 NeoVim
 処理中もAPI呼び出し 

  5. NeoVim - Remote Plugin
 nvim_buf_set_lines(buf, 0, -1, true, "てきすと") 


    FuncXXX(YYY, ZZZ)
 処理
 好きな言語で書いた
 プラグインプロセス
 response
 NeoVim
 関数なので値も返せる 

  6. NeoVim - Remote Plugin
 • 比較的実行速度は早い
 • その言語のエコシステムが使えるので慣れた言語ならシュッとかけ る
 •

    PythonやNodeの場合はそのランタイムが必要
 ◦ Goなどバイナリを吐き出せる言語なら結構楽
 • 仕組みは似ているが、LSPとは違い他エディタでは使えない
 ◦ Vimでももちろん使えない

  7. NeoVim - Remote Plugin
 • いろいろな言語でRemote Pluginのライブラリがある
 ◦ Go
 ▪

    https://github.com/neovim/go-client
 ◦ Node
 ▪ https://github.com/neovim/node-client
 ◦ Python
 ▪ https://github.com/neovim/pynvim
 • もちろん、ライブラリがなくともmsgpackの実装があれば...!