$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Neovim × リアルタイムチャット
Search
higashi
December 28, 2020
1
170
Neovim × リアルタイムチャット
higashi
December 28, 2020
Tweet
Share
More Decks by higashi
See All by higashi
Go! Go! WebAssembly!!
higashi000
0
70
Can we use Slack on Vim?
higashi000
1
320
VimでSlackがしたい
higashi000
0
960
Featured
See All Featured
GraphQLとの向き合い方2022年版
quramy
50
14k
The Cost Of JavaScript in 2023
addyosmani
55
9.3k
Code Reviewing Like a Champion
maltzj
527
40k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
3k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Being A Developer After 40
akosma
91
590k
GitHub's CSS Performance
jonrohan
1032
470k
Why Our Code Smells
bkeepers
PRO
340
57k
Navigating Team Friction
lara
191
16k
How GitHub (no longer) Works
holman
316
140k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
A designer walks into a library…
pauljervisheath
210
24k
Transcript
Neovim × リアルタイムチャット @higashi136_2
名前 : higashi 職業 : 高専 4 年生 好きなもの :
Vim, Golang, プログラミング GitHub : higashi000 Twitter : @higashi136_2 自己紹介
Vim 関係で関わったもの ・sarahck.vim →Vim で Slack をするプラグイン ・sleahck.vim →Vim で
Slack をするプラグイン ・vimdoc-ja-working →ドキュメントの翻訳プロジェクト ・slacklog-generator → vim-jp の log を HTML 化するプロジェクト
こう思ったことは ありませんか?
Vim(Neovim) で .* がしたい!!
.* の幅はとても広い... なんでも Vim でやりたくなってしまう... でもスライド一本で .* すべてを Vim でできるようにするのは厳しい...
.* の幅はとても広い... なんでも Vim でやりたくなってしまう... でもスライド一本で .* すべてを Vim でできるようにするのは厳しい...
→「 Vim で .* がしたい」 のうち 1 つを紹介
今回やりたいこと Vim で リアルタイムチャットが したい!!
Vim で WebSocket を使えるようにしよう リアルタイムチャットをするために
Vim で WebSocket を使えるようにしよう → if_python3 使えば行ける...? リアルタイムチャットをするために
Vim で WebSocket を使えるようにしよう → if_python3 使えば行ける...? → websocket-client というライブラリを使うことにした
リアルタイムチャットをするために
単純に while True で recv 関数を呼び出してみると... メッセージ受信中は Vim で他の動作ができない リアルタイムチャットをするために
単純に while True で recv 関数を呼び出してみると... メッセージ受信中は Vim で他の動作ができない -
メッセージも送信できない リアルタイムチャットをするために
単純に while True で recv 関数を呼び出してみると... メッセージ受信中は Vim で他の動作ができない -
メッセージも送信できない →非同期で動かしてあげたい リアルタイムチャットをするために
単純に while True で recv 関数を呼び出してみると... メッセージ受信中は Vim で他の動作ができない -
メッセージも送信できない →非同期で動かしてあげたい 非同期処理をうまく実装できなかった;; リアルタイムチャットをするために
諦めるわけには行かない なんとかしてリアルタイムチャットがしたい
諦めるわけには行かない なんとかしてリアルタイムチャットがしたい →Neovim の Remote Plugin !!
Vim で リアルタイムチャットが したい!!
Neovim で リアルタイムチャットが したい!!
WebSocket でのメッセージ受信部分 Remote Plugin を使うことで受信しながら他の動作を行えるようになった
WebSocket でのメッセージ受信部分 Remote Plugin を使うことで受信しながら他の動作を行えるようになった が
メッセージの送信ができない
メッセージの送信ができない send という関数を使用してメッセージを送信する予定だった
メッセージの送信ができない send という関数を使用してメッセージを送信する予定だった 実行してもメッセージを受信する関数が終了しないと送信されない
メッセージの送信ができない send という関数を使用してメッセージを送信する予定だった 実行してもメッセージを受信する関数が終了しないと送信されない →いくつかのプラグインのソースコードを読むも解決方法がわからず...
メッセージ送信をなんとかしよう VimScript で書いた関数は実行できた
メッセージ送信をなんとかしよう VimScript で書いた関数は実行できた →system で外部コマンドを実行すればメッセージの送信ができるのでは...?
curl でメッセージを POST して あとはサーバーに任せる!
クライアント側 従来の実装 Neovim logo by Jason Long, and license: CC3.0 サーバー
メッセージの受信 Python: recv() 他クライアントからのメッ セージ送信 メッセージの送信 Python: send() メッセージ受信 他クライアント 他クライアント 他クライアント
クライアント側 従来の実装 Neovim logo by Jason Long, and license: CC3.0 サーバー
メッセージの受信 Python: recv() 他クライアントからのメッ セージ送信 メッセージの送信 Python: send() メッセージ受信 他クライアント 他クライアント 他クライアント
クライアント側 従来の実装 Neovim logo by Jason Long, and license: CC3.0 サーバー
メッセージの受信 Python: recv() 他クライアントからのメッ セージ送信 メッセージの送信 system() + curl メッセージ受信 他クライアント 他クライアント 他クライアント
クライアント側 従来の実装 Neovim logo by Jason Long, and license: CC3.0 サーバー
メッセージの受信 Python: recv() 他クライアントからのメッ セージ送信 メッセージの送信 system() + curl メッセージ受信 他クライアント 他クライアント 他クライアント
サーバー側の改良に着手 元々 Go で実装していたのでそれを改良する
サーバー側の改良に着手 元々 Go で実装していたのでそれを改良する → リクエストを受け取ったら接続済みクライアントにメッセージを流す
サーバー側の改良に着手 元々 Go で実装していたのでそれを改良する → リクエストを受け取ったら接続済みクライアントにメッセージを流す すんなり終わった
完成...? ・メッセージの受信 ・メッセージの送信 ともに実装完了 これで試してみることに
デモ https://noa.higashi.dev というページを事前に作成しました QR コードの作成には https://qr.quel.jp/ というサイトを使わせていただきました
デモ ↑部屋の ID を入力します 今回は gorillavim という ID を使います 入力後,ボタンを押し,部屋に移動します
デモ ←表示名 ←発言 ↑送信
Neovim クライアントについて GitHub にて公開しています higashi000/noachat.nvim pynvim と websocket-client を pip
でインストール必要があります ぜひお試しください
現在の課題点 ・メッセージ受信中は他の Remote Plugin が使えない →使おうとすると Neovim が固まる ・別のバッファに移動すると固まる ・Vim
非対応
このプラグインを活かしてできそうなこと ・共同編集 ・Slack RTM API を使用したプラグイン
Neovim × リアルタイムチャット @higashi136_2