Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Neovim × リアルタイムチャット
Search
higashi
December 28, 2020
1
180
Neovim × リアルタイムチャット
higashi
December 28, 2020
Tweet
Share
More Decks by higashi
See All by higashi
Go! Go! WebAssembly!!
higashi000
0
75
Can we use Slack on Vim?
higashi000
1
330
VimでSlackがしたい
higashi000
0
990
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.1k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
120
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
410
The Curse of the Amulet
leimatthew05
1
10k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
300
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
64
52k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.2k
Rails Girls Zürich Keynote
gr2m
96
14k
Discover your Explorer Soul
emna__ayadi
2
1.1k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.7k
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