lambdalisue 1日 01:14:16 Slack
https://twitter.com/__syumai/status/1366050682004926470?s=21

ベンダリングとか使ってて流石という感じだった
twitter
syumai @__syumai
なんか合ってるかわからんけど、denops.vimを使ってVim上からGo Playground叩くところまでは出来てそう。
https://github.com/syumai/goplayground-vim https://pbs.twimg.com/media/EvUuejDVgAgt1vQ.png
Twitter
  • warau6
twitter
Λlisue @lambdalisue
@__syumai vim-jpのSlackで質問投げると、画像みたいな感じで、Vimmerの皆さんが優しく教えてくれますよ https://pbs.twimg.com/media/EvU3aknUYAEjIf3.jpg
Twitter
いつ見てもこの画像じわじわくる
lambdalisue 1日 01:18:32 Slack
むっちゃ的を得てますしねw
この人がkkiyama117 さんだと今日知った
https://twitter.com/muskuarede
  • me-too2
  • majika2
  • warau1
The latest Tweets from 緋村罵倒斎 (@Muskuarede). ウィンナーコーヒーを飲むの下手クソ勢。 後こんな名前でごめんなさい……. ピーターパンシンドローム
なんかキャラ違くないw
  • fukaikousatsu1
アイコンと背景のキャラが濃すぎるw
イメージ全然違うw
ଳ (kato) 1日 18:41:33 Slack
Githubから飛んだときめっちゃびびった
  • naruhodo1
twitter
緋村罵倒斎 @Muskuarede
という訳で駄文を生成しました

Rustでvim plugin(with deno)|kkiyama117 https://zenn.dev/kkiyama117/articles/2021-03-01-denops-rust #zenn
Twitter
で、お前だれやねん!人の記事を自分で書いたように紹介すんなや!って思って一応確認したら本人だったw
  • warau7
このギャップ好きです。めっちゃ笑ってますw
zenn側で連携済みなので特に疑われないと思ったけど、やっぱ印象って大事なのか
ひがし 1日 18:47:41 Slack
リアルとネットのギャップがすごいはよく見聞きしますけどTwitterとSlackのギャップがすごい人初めてみましたw
話飛んですみません。
昨日のGoでやってたみたいにdenopsでTypeScript Playgroundにバッファを流し込む何かあるとよさそうって思ったんですけど、TypeScript PlaygroundってURL生成するAPIみたいなのってあるんですかね?
ちょっとだけ調べたけど分からなかった
URLだけどうにか生成できればいいではあるんだけど
An extension which improves working with the TypeScript playground - orta/vscode-typescript-playground
これでひとまず動くっぽい
  • subara2
一番最初の課題に丁度いい感じがする(そもそもdenopsで書く必要性)
通信が主体であれば :ari: そう
Vim scriptからcurlするより好き
URIEncodeしてURL生成してregisterに入れて終わりの予感がしている
通信する必要あるかなぁこれ
今ソース見た、Vim scriptで書いちゃうなこれはw
なかったですね、はい
Hello World的なプラグインだ
encodeURIをVim scriptでやるのは面倒か
Deno Playgroundがほしいのと、Denoに汎用的なopen browserがあればもしかしたらちょっと便利かもくらい
Open is a package for opening URLs, files and executables with Deno. Inspired by sindresorhus' open. - skoshx/deno-open
この辺importできるのが便利ポイントなんですかねやっぱり
早くて型がつくのは便利
今ならこういう短くて強いネームスペースを取れるんだなあ笑
ネームスペースが強すぎるのは思いました
async取った人もいましたねw
  • majika1
deno-fzf取れそう
kkiyama117 1日 19:14:58 Slack
https://deno.land/x/sleep@v1.2.0 とか https://deno.land/x/delay@v0.2.0 は公式の https://deno.land/std@0.88.0/async/delay.ts と全く同じ事をしていて「やめて〜」となりました
  • totemoturai2
  • wakaru1
いや誰でも取れるんか…
ଳ (kato) 1日 19:17:55 Slack
Work in progressなのか…
  • ayashii2
なんかパッケージ名でグローバルに管理する弊害がどんどん…
一応denoland以外にも置けるんですけどね
  • naruhodo1
npmとかもそんなもんかと思ってたんですけど、他の言語だと管理方法違うんです?
せめてxの下にユーザーかorgの名前入れるべきだったのでは
npmはもう仕方ないとして、denoはGo風にしてるからGoと同じ管理方法だと思ってた、のだが…
やろうと思えばnpmに放り込んでunpkgから拾うとかも可能
へー、Goは違うんですね
完全に知らなかった
Tsuyoshi CHO 1日 19:20:13 Slack
npmの教訓...名前空間ェ...
import "github.com/hajimehoshi/ebiten/ebitenutil" みたいに基本的にはほぼURLの指定ですね
Go全く中央集権リポジトリないです
githubのrawからも拾える?
拾えますね、VCSが対応してればGitHub以外も
そういえば、パッケージを GitHub みたいに {userId}/{repo_name} で管理する方法は殆ど見たことないな(URL はあるけど)。なにか理由があるのかな
  • tashikani2
色々と担保するためのProxyはある
npmは一応namespace切れるけど・・・
UserID覚えづらい問題がある
  • sorena2
twitter
ドッグ @Linda_pp
個人的にはパッケージは名前じゃなくて場所(URL)で扱うべきだと思うけどどうなんだろう.Go の仕組みが一番しっくりくる気がする
Twitter
twitter
ドッグ @Linda_pp
@ubnt_intrepid Russ Cox も言ってますが,使う側がちゃんとレビューするしかないと思います.その上で,パッケージに問題が起きた時はすぐそのパッケージを捨てられるように抽象化したレイヤーを間に挟んでおくなど,問題が起きる前提で対策するしかないかなと https://research.swtch.com/deps
Twitter
prabirshresthaとか(彼には失礼だけど)素で打てない人多いのでは
> パッケージを GitHub みたいに {userId}/{repo_name} で管理する方法
もしかしてvim plugin
Vim plugin はパッケージの指定はそれでいけるけど、その後の名前空間がわかれてくれなくてつらい
  • gunnyari2
一応deinは分けてくれるはず・・・
  • sasu3
vim-plugは分けてくれないですね
Vimの仕組みとして衝突を回避するのは無理では
deinは分けてくれるというのは何のことだろう
たしかに。プラグインである以上、少なくとも「機能」はどうあがいても衝突しうるので、あまり気にしないほうが良いのかな
同じ名前のプラグインがインストールできるかどうかですね
ଳ (kato) 1日 19:25:13 Slack
名前?…
  • sumanu-taimingu-warukattakamo-desu1
plugも名前変えられたような
vim-plugはfoo/a.vimbar/a.vim がインストールできないはず
session.vim とか複数ある気がする
あ、plugもできるんだ
中身はどのプラグインマネージャも無理ではないですかね
deinと違って変える必要があるのは確か
中身のvimファイルは確かに死んだ記憶がある
fzf.vim の衝突問題・・・
Tsuyoshi CHO 1日 19:27:00 Slack
merged = 0にするしかないですね、fzfは
merged指定しないとですね
Tsuyoshi CHO 1日 19:27:36 Slack
同じファイル名で同じ位置にあるのは、どうしようもない(merge cache的に)
🌺 Minimalist Vim Plugin Manager. Contribute to junegunn/vim-plug development by creating an account on GitHub.
長いパッケージ名を覚えるのがだるい問題、それこそファジーファインダーってやつでなんとかしてくれないかな、と思いますね
若干不便そう
!FFVI
FFで思い出したけどdenopsの規模ならmarket作ってcocみたいにこんな感じで入れれそう
https://vim-jp.slack.com/files/U8996GYBF/F01D77RFMND/kapture_2020-10-19_at_13.42.22.mp4
  • subara4
習作です!ノリで作れて楽しかったです
https://twitter.com/__syumai/status/1366415244206084099?s=20
  • goodpoem5
  • 🎉6
twitter
syumai @__syumai
VimからThe Go Playgroundを呼び出すPluginを作りました!
GoPlayGetコマンドと言う、Go Playgroundからソースを取得するコマンドなどがありわりと便利だと思います。
話題のdenops.vimを使って作ってみました!
https://github.com/syumai/goplayground-vim
Twitter
3 件の返信 最終返信:09:56:57
#←
チャンネルにも投稿済
lambdalisue 2日 09:16:44
何点か気になったので

1. execute() は全プラグイン共通の場所に展開するので s:goplayground_show_all_lines() のようにプラグイン名のプレフィックスをつけた方が良いです(あと Vim script は基本 snake_case)
2. vendor ディレクトリにベンダリングしていますが Vim plugin は全てのプラグインが同じディレクトリに展開されても動くように作るべきなので vendor/goplayground-vim/...denops/goplayground/vendor など、ディレクトリ構造内部にプラグイン名を入れた方がいいです
3. (好みですが)denops で受け取るより vim で受け取った方が誤解が少ないと思います(内部的に denops というインスタンスをラップして vim というインスタンスにして各プラグインに配るので)
syumai 2日 09:29:18
なるほど、直します!ありがとうございます!
GoPlayRun の結果を複数行で表示したいけど、 ^@ になっちゃうとこで詰まってますが今日は一旦投げちゃいました
echoの仕方が良くないのかな〜とか思ってますが
改行化けるのなんだろう
echomで出すと化けるな
echoで出そうとするとそもそも再描画で消えるという
通信の都合で再描画してる副作用として、Vim8ではechoが出なくなっているな
複数行のechoか
行分けてやってechoしたらいいんですかね
この辺詰まるとTypeScriptの範疇から外れてくるんで若干つらみ
なんか前作った事があった気がする。
Contribute to mattn/vim-gorun development by creating an account on GitHub.
あ、これじゃない。
go playground for vim. Contribute to mattn/goplayground-vim development by creating an account on GitHub.
これか?
完全に一緒っぽそうですねw
playground、よく仕様変わるのでもう動かなそう。
9 years ago…すごいw
deno で生き返った。
  • 🙌4
自分がやるならバッファ作ってそこに流し込むかなぁ
:echomsg で出すなら文字列を改行で split して、それぞれを順番に :echomsg に渡せばよいです
  • god2
やっぱりsplitしてあげるのがよいですかね…。
新しいバッファに流し込むのも良さそう、悩みます
とりあえずsplitして流す形でやってみます
denopsは原理上Vimと非同期でやりとりしていて、Vim8の方だと非同期処理が下手っぴなので再描画をかけてるんですが、その影響で複数行のechoがdenops経由でできないっぽいです
  • naruhodo3
これ回避めっちゃ難しいのでは…
意外とムズいポイントを踏んでいたのか…
非同期処理と再描画って何か関係あるんですっけ?
受信した物の反映に時間がかかるのでredrawかけてるという話です
反映とは何を指してます?
受信した物が画面に反映されるのが遅いので通信にとても時間がかかっているように見える問題がありまして
channel-commands なんて使ってるのか
それでredrawをかけるようにしてるんですが、その副作用でechoしても消えるようになったという
channel-commands じゃないといけない理由がなんかある?
個人的には無いと思ってる
@lambdalisue さんに聞くしかなさそう
個人的には使ったことがない。応用が効かなすぎてつかい勝手が悪い
  • wakaru1
とりあえず、denopsから返ってきた結果をsplitして表示する関数を作って回避できました!
https://github.com/syumai/goplayground-vim/pull/1/files
  • 🎉3
個人的には解決しました、ありがとうございます
インポートパスを分離するの筋が良さそう、自分もやってみよう
  • 👍1
Vimに仮想DOMを持ち込むという話をいくつか観測してるけど、Vim scriptに閉じていたらこの発想は生まれなかったよなと思う
  • naruhodo1
lambdalisue 2日 08:52:19 Slack
https://vim-jp.slack.com/archives/C01N4L5362D/p1614615945413600

少しでも処理をC側に倒したいってだけですね。

ただechoの問題はVimscriptだけでtimer_startを使った場合も起こるので、そもそも非同期だからダメ感
channel-commands じゃないといけない理由がなんかある?
slacklog
lambdalisue 2日 08:55:13 Slack
あ、たぶん違う話してるな
lambdalisue 2日 08:56:46 Slack
redrawやってるから複数行できない訳ではないと思います。多分Neovimでもechoを各業RPCすると複数行できない
lambdalisue 2日 08:56:56 Slack
(多分
lambdalisue 2日 08:57:44 Slack
複数行を出すにはRPC関係なくsplitして同期的に一気にechoすふ必要があるだけって話かと
lambdalisue 2日 09:16:44 Slack
何点か気になったので

1. execute() は全プラグイン共通の場所に展開するので s:goplayground_show_all_lines() のようにプラグイン名のプレフィックスをつけた方が良いです(あと Vim script は基本 snake_case)
2. vendor ディレクトリにベンダリングしていますが Vim plugin は全てのプラグインが同じディレクトリに展開されても動くように作るべきなので vendor/goplayground-vim/...denops/goplayground/vendor など、ディレクトリ構造内部にプラグイン名を入れた方がいいです
3. (好みですが)denops で受け取るより vim で受け取った方が誤解が少ないと思います(内部的に denops というインスタンスをラップして vim というインスタンスにして各プラグインに配るので)
  • ❤️1
このスレッドに返信しました : 習作です!ノリで作れて楽しかったです < ...
lambdalisue 2日 09:46:06 Slack
Vimプラグイン開発の敷居が下がってるっぽくて、とても嬉しい😆
denops-util的なので簡単なのならVim scriptにほぼ触らなくよくなるみたいになっていくとよさそう
lambdalisue 2日 09:48:06 Slack
良さそう
lambdalisue 2日 09:48:45 Slack
stdで近いレベルまで提供できると良いなー
今回でいうと改行含めたstringを一括echomするのが入ってると便利だったんですかね
  • yosasou2
作り方が従来と全然違うので、慣れないとぽんぽんコードを書けない
  • wakaru1
Gamou Tatsumi 2日 09:51:08 Slack
主要な関数とかコマンドは早いとこwrapした方が便利そうですね
vim.fn で型まで提供できるのが理想ですけど難しそう
  • wakaru1
lambdalisue 2日 09:51:13 Slack
まだベストプラクティス探ってる段階ですしね
lambdalisue 2日 09:52:10 Slack
ですね。kuuさんが一覧作るのはやってくれてたので、あとはそこから呼び出しコード自動生成とかゴニョゴニョでいけそう
TS勢がvim.call使わなくてもVim plugin書けるようになったら凄そう
  • 👍1
  • sorena1
Vim script、実際触ったことないと大分キツい言語ですよねぇ
  • sorena1
vimrc程度なら書けてもプラグインでやりたいことになるとある程度慣れないとってイメージ
lambdalisue 2日 10:02:52 Slack
Vim/Neovimの違いもDenopsでなるべく吸収したいですしね
  • ❤️3
完全に適当なこと言いますけど、Vimのbufferももう一段階抽象化してGoのFile的にio.Reader / Writer使って簡単に入出力出来るようになってて欲しい
エディタの提供するAPIですし、行指定で簡単に更新できるんで便利ですけど
Plugin作ってみた感想としては、Vim scriptって言うよりEx commandの概念を知らないとムズいなと言う印象でした
  • sorena2
lambdalisue 2日 10:07:56 Slack
Reader/Writerは面白いですね。vimbufioみたいなdenoモジュール作るのが良さそう
  • ❤️1
lambdalisue 2日 10:08:13 Slack
Exコマンドむずいわかる
インタフェースがよく分かってないんですが、その抽象されてたら例えばfernのツリーのレンダリングとかも楽になる?
差分計算して再レンダリングして欲しい気持ち出てきそう(Vim scriptでのパフォーマンスとかよく分かってない)
lambdalisue 2日 10:11:10 Slack
差分再レンダリングにはちょっと使い勝手が悪そうです
lambdalisue 2日 10:12:00 Slack
差分再レンダリングは Vim script だと「なにを馬鹿な」ですが TypeScript なら実現可能な気がします
やはり𝓥𝓲𝓻𝓽𝓾𝓪𝓵 𝓓𝓞𝓜
react-denopsだ
Gamou Tatsumi 2日 10:14:13 Slack
Vim pluginをTSXで書く記事が現れそう
Line以外コンポーネント存在しなさそう
floatwinをtsxで制御したい気持ちはかなりあります
仮想DOMとCSSの概念を導入して画面全体をTSXで描画したい
  • 👍2
  • wakaru1
こうして新しいエディタが出来上がるw
  • warau2
Gamou Tatsumi 2日 11:54:34 Slack
つまりElectron系エディタでは?
Oni...
  • sorena1
kkiyama117 2日 11:55:31 Slack
elecronにneovimエンジン ...
  • vscode1
  • neovim1
そういやOnivim試すとかいってcloneして放置してるな
VSCode Neo Vim「呼んだ?」
  • warau1
Vim (Neovim) ベースの GUI エディタ、現在どういう状況なのか全然追えてない
  • me-too1
denops、仕組み的にVSCodeに持っていけたりするのかなぁ
Vim scriptの自由度が比較的高くてできてるのがあるからJSON設定が基本だとちょっときついか
JSXじゃなくてもいいけど(仕様と書き味的にJSXに落ちそうだけど)宣言的に書いてバッファをレンダリングするのはあると嬉しいですね
  • wakaru1
ファイラとかで絶対欲しくなると思ってるんだけど、再帰的な木構造をいい感じに補助する型定義とかどこかに落ちてるんだろうか
木くらいなら自分で書きそう、幸いTSの型は再帰の落とし穴そんなにない気がするし
内部的にはファイルのデータ全部ツリー構造で持ってて open={boolean} とかでJSXで書きたい、最初に全部取得するのが重すぎる気はする
fdコマンド叩くとかでそんなに遅くないからいけるのかな
propsのopenが切り替わったタイミングで非同期に再レンダリングが走るの理想っぽい気がする
その時点でのファイルリストが欲しいからopen切り替わったタイミングでファイル取得したらいいか、useEffectだ・・・
ファイルエクスプローラーなら全取得は確かに無駄かも
色々適当だけどイメージこんなのでファイラを書きたい
  • naruhodo1
[[ダウンロード: 無題(TypeScript)]]
const Directory: FC<{ node: DirectoryNode, isOpen: boolean, setIsOpen: (isOpen: boolean) => void }> = ({ node, isOpen, setIsOpen }) => {
  const [childNodes, setChildNodes] = useState<Array<DirectoryNode | FileNode> | null>(null)
  useEffect(() => {
    setIsOpen(!isOpen);

    if (isOpen) {
      setChildNodes(getChildNodes(currentPath))
    } else {
      setChildNodes(null)
    }
  }, [isOpen]);

  return (
    <>
      <Line>{currentPath}</Line>
      {isOpen && childNodes.map(node => node.type === "directory" ? <Directory node={node} /> : <File node={node} />)}
    </>
  );
};
気持ちは伝わりそう
lambdalisue 2日 12:58:09 Slack
ケースバイケースでしょうが、部分適用より全体更新の方が多分たいていのケースで早い。
lambdalisue 2日 12:58:34 Slack
10000行のバッファ、とかなら転送コストありそうですが
lambdalisue 2日 12:59:07 Slack
Neovim だけなら部分的用の方が早いかもしれませんが...
転送自体のオーバーヘッドはそこまでクリティカルじゃないと思います、多分・・・
この辺何故かvital-vsとcoc, remote pluginで結構パフォーマンス違ってるのが気になる部分ですね
lambdalisue 2日 13:09:24 Slack
Vim script が関与するか?の違いでは?
あれ、denopsって通信後のデータVim scriptでどう処理してるんですかね?
lambdalisue 2日 14:18:30 Slack
callは直接処理してますね
lambdalisue 2日 14:18:40 Slack
他はvimscript経由です
内部的にRPCとかそういうの経由してないってことですかね、中身知らなすぎるな・・・
lambdalisue 2日 14:20:19 Slack
まあdenops自体大きくないので読んでみると良いかもです
lambdalisue 2日 14:20:35 Slack
stdは読む必要ないし
kkiyama117 2日 14:23:04 Slack
個人的にはautoloadのserver.vimとdenopsの中のserver.tsを起点に読むと分かりやすかったです
呼び出しの順が図になってる、みたいなものがあると分かりやすいんですかね?
全然目を通してなかったけど見るのよさそう
あとそれとは別に数万行とか送りつけてパフォーマンス確認ですかね
fzf-util的なの作っちゃってそこの測定まではすぐできそう
lambdalisue 2日 14:27:04 Slack
アーキテクチャ図は作りたい...
個人的にややこしいと思うのは、denops-deno がプラグインでも使われていて、本体でも使われている点でした。(まあこれは仕組み的に当たり前なのですが。。。)
  • wakaru1
ややこしいというか、ただこんがらがるだけで妥当だと思っています!
A Vim plugin to add commands to call The Go Playground from Vim. - syumai/goplayground-vim
そういえば、スクリプトスコープはどういう扱いになるんだろう
他と衝突の可能性は考えなくて良いのかなと思いました
lambdalisue 2日 15:32:31 Slack
考える必要があります
うーむやはり
denopsプラグインで共通になってしまいますよね
lambdalisue 2日 15:39:42 Slack
ここはコストかけて仕組みで解決するより運用でカバーですね
lambdalisue 2日 15:39:57 Slack
(そもそも仕組みで解決できるかもわからないし、できたとしてもオーバーヘッドになるだろうし)
Tsuyoshi CHO 3日 21:15:26 Slack
lsp安定化...
#lang-rust からきました
  • 👍3
deno が最近 vim-jp ではやってますが何ができるか全く知りません
deno ランタイムで動く TypeScript で Vim プラグインが書ける? でしたっけ?
lambdalisue 4日 00:03:42 Slack
Yes
  • sugoi1
denopsにdeopleteを移植しようと考えてるのだけど
既存の処理をどうやって持ってくるか悩ましい
そのままコードを持ってくると改善にならないが、機能が足りないだろうし
  • nanido2
どこまで変えるかリライトするか
従来のプラグインとは規模が違うので
  • naruhodo1
kkiyama117 4日 17:02:19 Slack
使う人が居そうならdenops-rust-stdみたいなものを作ろうと思っているんですがrustで書く奇特な方いらっしゃいますか?
  • 👀4
  • yosasou2
そんなことができるんですか?!
1 件の返信 最終返信:17:10:31
#←
チャンネルにも投稿済
kkiyama117 4日 17:10:31
ここの皆さんのお陰様で出来るようになりました
https://vim-jp.slack.com/archives/CGZTGR6E6/p1614772430436000
use wasm_bindgen::prelude::*;

// When the `wee_alloc` feature is enabled, use `wee_alloc` as the global
// allocator.
#[cfg(feature = "wee_alloc")]
#[global_allocator]
static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;

#[wasm_bindgen(module = "<https://deno.land/std/log/mod.ts>")]
extern "C" {
#[wasm_bindgen(js_name = log)]
fn log(s: &str);
}

#[wasm_bindgen]
pub fn greet() -> JsValue {
unsafe {
log("Hello, denops, from rust!");
}
JsValue::from_str(&format!("{}", "Hello, denops-rust!"))
}

これでいちおう https://deno.land/std/log/mod.ts の log を実行するコードが吐かれました。 @kkiyama117
slacklog
lambdalisue 4日 17:09:37 Slack
あれば使う人が出てくるかもw
  • naruhodo1
kkiyama117 4日 17:10:31 Slack
ここの皆さんのお陰様で出来るようになりました
https://vim-jp.slack.com/archives/CGZTGR6E6/p1614772430436000
  • sugoi2
このスレッドに返信しました : そんなことができるんですか?!
use wasm_bindgen::prelude::*;

// When the `wee_alloc` feature is enabled, use `wee_alloc` as the global
// allocator.
#[cfg(feature = "wee_alloc")]
#[global_allocator]
static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;

#[wasm_bindgen(module = "<https://deno.land/std/log/mod.ts>")]
extern "C" {
#[wasm_bindgen(js_name = log)]
fn log(s: &str);
}

#[wasm_bindgen]
pub fn greet() -> JsValue {
unsafe {
log("Hello, denops, from rust!");
}
JsValue::from_str(&format!("{}", "Hello, denops-rust!"))
}

これでいちおう https://deno.land/std/log/mod.ts の log を実行するコードが吐かれました。 @kkiyama117
slacklog
プロトコルは RPC なので実質どの言語でも ok のはず?
  • naruhodo1
kkiyama117 4日 17:12:04 Slack
多分wasm挟まなくてもdenops-denoの部分を実装してしまえばどの言語でもって気はします
  • naruhodo1
Tsuyoshi CHO 4日 17:13:49 Slack
実質wasmでポータブルなネイティブライブラリみたいなことになりそう
計算力がいりそうなライブラリとか使いやすくなるといいよね
リアルタイム絞り込みみたいなのが向いてるんでしょうね。
Tsuyoshi CHO 4日 17:20:12 Slack
つまり...
!FF
僕はとにかく Worker 境界をどう乗り越えるかでずっと止まっていますw
kkiyama117 5日 12:43:42 Slack
ひとまず最低限denopsのrustでの呼び出しの実装を定義してみました、大概JSValueでズルしているのでそれを一つ一つ職人の手作業で定義して確認するのが次の目標になるかと思います

https://github.com/kkiyama117/denops-rust
  • subara8
  • nukumori2
WIP. Contribute to kkiyama117/denops-rust development by creating an account on GitHub.
ゴリラ 6日 12:06:25 Slack
やっとdenops触り始めた
ゴリラ 6日 12:06:32 Slack
そして、早速躓いている
ゴリラ 6日 12:06:57 Slack
vim-lspでdeno-lspを使っているが、これもしかして定義ジャンプとかできないやつかな …
ଳ (kato) 6日 12:08:24 Slack
最近できるようになったとかならなかったとか…
URL Import部分からまあしょうがなさそう、heavenshellさんがそのへんいじってた記憶はあるけど
ଳ (kato) 6日 12:09:00 Slack
heavenshellさんがそこらへんやってたような
ゴリラ 6日 12:09:09 Slack
なるほど
ゴリラ 6日 12:09:20 Slack
      return await Promise.resolve(text);
ゴリラ 6日 12:09:35 Slack
Promise.resolve を試しに定義ジャンプしようとしてみたらできなくて唸っている
それも型定義内蔵してますからね
たしか別のコマンドが生えてますね
  • otxu1
ゴリラ 6日 12:11:40 Slack
E605: Exception not caught: Error: Failed to call 'echo' with [1]: Error: 'text' attribute of 'echo' in helloworld must be string^@    at Session.echo (file:///Users/skanehira/.vim/pack/plugins/start/dps-docker.vim/denops/helloworld/mod.ts:7:15)^@    at Session.dispatch (https:
//deno.land/x/msgpack_rpc@v2.6/session.ts:83:43)^@ at <https://deno.land/x/msgpack_rpc@v2.6/session.ts:92:29^@> at Session.handleRequest (<https://deno.land/x/msgpack_rpc@v2.6/session.ts:98:7)^@> at Session.listen (<https://deno.land/x/msgpack_rpc@v2.6/session.ts:123:16)^@>
at async Promise.all (index 0)^@ at Session.call (<https://deno.land/x/msgpack_rpc@v2.6/session.ts:156:13)^@> at async Service.dispatch (file:///Users/skanehira/.cache/dein/.cache/.vimrc/.dein/denops/denops/service.ts:23:14)^@ at async dispatch (file:///Users/skanehir
a/.cache/dein/.cache/.vimrc/.dein/denops/denops/host/vim.ts:56:12)^@ at async Session.<anonymous> (file:///Users/skanehira/.cache/dein/.cache/.vimrc/.dein/denops/denops/host/vim.ts:28:14)
ゴリラ 6日 12:11:50 Slack
んー、エラーメッセージが改行されないな
あ、ほんとだ
ゴリラ 6日 12:12:08 Slack
バグっぽい
LspDenoDefinitionとか生えてる
ゴリラ 6日 12:13:31 Slack
🐜 An ecosystem of Vim/Neovim which allows developers to write plugins in Deno - vim-denops/denops.vim
ゴリラ 6日 12:13:37 Slack
このあたりかなぁ
ゴリラ 6日 12:13:42 Slack
> LspDenoDefinition
なる!
ゴリラ 6日 12:13:44 Slack
ためしてみます
ゴリラ 6日 12:14:04 Slack
LspDenoDefinition コマンドが無い…
プラグイン更新しないとだめとか?
ゴリラ 6日 12:14:46 Slack
vim-lspか
vim-lsp-settingsな気がする
ゴリラ 6日 12:16:16 Slack
* Add deno goto definition and cache file install * Fix reviewdog's review * Fix * Fix enable to goto with split buffer
ゴリラ 6日 12:16:17 Slack
これか
ゴリラ 6日 12:18:12 Slack
ゴリラ 6日 12:18:40 Slack
更新して LspInstallServer deno してもだめだ
ゴリラ 6日 12:20:23 Slack
んー、
ゴリラ 6日 12:20:35 Slack
LspStatus 見たら、denoが上がっていない
なんだろう
ゴリラ 6日 12:23:00 Slack
deno: not running
Tsuyoshi CHO 6日 12:23:08 Slack
パスにいない?
ゴリラ 6日 12:23:16 Slack
あります
ゴリラ 6日 12:23:22 Slack
skanehira@MacbookPro13 dps-docker.vim % which -a deno                                                                             INSERT
/opt/homebrew/bin/deno
LspInstallしてもそれというのは不思議だ
ゴリラ 6日 12:23:51 Slack
そうなんすよね…
Tsuyoshi CHO 6日 12:23:53 Slack
じゃあそれが古いとか?
InstallしたらInstallのほうが優先されるはずだけど
階層の上の方にnode_modulesがあるとか?
判定条件はそれだけのはず
ゴリラ 6日 12:24:27 Slack
ないすね
ゴリラ 6日 12:24:30 Slack
node_modules
ゴリラ 6日 12:24:43 Slack
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 153 100 153 0 0 520 0 --:--:-- --:--:-- --:--:-- 520
100 637 100 637 0 0 1094 0 --:--:-- --:--:-- --:--:-- 1094
100 26.3M 100 26.3M 0 0 11.3M 0 0:00:02 0:00:02 --:--:-- 20.0M
Archive: deno-darwin.zip
inflating: deno
ゴリラ 6日 12:24:53 Slack
これ、成功しているのか失敗しているのかが、わからんな。。。
ゴリラ 6日 12:25:23 Slack
curl -L -o "deno-$os.zip" "<https://github.com/denoland/deno/releases/latest/download/$filename>"
unzip "deno-$os.zip"
ゴリラ 6日 12:25:27 Slack
unzipしているだけか
ゴリラ 6日 12:25:44 Slack
どこにunzipされるんだろ
Tsuyoshi CHO 6日 12:29:01 Slack
vim-lsp-settingsのインストールディレクトリはhelpみればいいかと思う
brewで入ってるdenoが古そう
ゴリラ 6日 12:29:21 Slack
denoは1.18すけど、最新じゃないのかな
1.8.0が最新ですね
ゴリラ 6日 12:30:33 Slack

1.8すね
ゴリラ 6日 12:30:38 Slack
skanehira@MacbookPro13 .dein % deno -V
deno 1.8.0
あれー?なんだろう。。
ゴリラ 6日 12:31:11 Slack
skanehira@MacbookPro13 .dein % cd ~/.local/share/vim-lsp-settings/servers
skanehira@MacbookPro13 servers % ls -la INSERT
total 0
drwxr-xr-x 8 skanehira staff 256 Mar 6 12:24 .
drwxr-xr-x 3 skanehira staff 96 Jan 31 12:40 ..
drwxr-xr-x 4 skanehira staff 128 Mar 6 12:24 deno
drwxr-xr-x 3 skanehira staff 96 Feb 7 11:30 efm-langserver
drwxr-xr-x 3 skanehira staff 96 Jan 31 12:40 gopls
drwxr-xr-x 5 skanehira staff 160 Mar 6 12:02 terraform-lsp
drwxr-xr-x 6 skanehira staff 192 Feb 7 11:28 vim-language-server
drwxr-xr-x 6 skanehira staff 192 Feb 7 11:29 vls
skanehira@MacbookPro13 servers % ll deno INSERT
total 203664
drwxr-xr-x 4 skanehira staff 128 Mar 6 12:24 .
drwxr-xr-x 8 skanehira staff 256 Mar 6 12:24 ..
-rwxr-xr-x 1 skanehira staff 75762657 Mar 3 09:18 deno
-rw-r--r-- 1 skanehira staff 27586289 Mar 6 12:24 deno-darwin.zip
skanehira@MacbookPro13 servers % INSERT
ゴリラ 6日 12:31:26 Slack
あるなぁ…
後はもうvim-lspのログを読んでみるしか…
ゴリラ 6日 12:32:01 Slack
skanehira@MacbookPro13 servers % ./deno/deno -V                                                                                   INSERT
deno 1.8.0
ゴリラ 6日 12:32:06 Slack
ふうむ
ゴリラ 6日 12:32:50 Slack
一旦lspはいいっか。。。
ゴリラ 6日 12:33:37 Slack
ちなみに自分で定義するとちゃんとrunningになるんすよね…
if executable('deno')
au User lsp_setup call lsp#register_server({
\ 'name': 'deno-lsp',
\ 'cmd': {server_info->['deno', 'lsp']},
\ 'allowlist': ['typescript'],
\ })
endif
ゴリラ 6日 12:33:38 Slack
deno-lsp: running
念のための確認で申し訳ないですが、vim-lsp-settingsは最新まで上げてますよね?
Tsuyoshi CHO 6日 12:35:38 Slack
あー、let g:lsp_settings_filetype_typescript = ['deno', 'typescript-language-server'] 的なのが必要かもしれない
  • hee2
Tsuyoshi CHO 6日 12:36:31 Slack
これやったらdeno動いた
そういやこっちtypescript-language-server入ってなかったな
同じくtsはdenoしか入ってないですね
ゴリラ 6日 12:38:11 Slack
あーーーーーーーーーーーーーーーーーーー
ゴリラ 6日 12:38:21 Slack
それだわ…
yuiture7 6日 12:40:02 Slack
denops って、 dein で on_cmd で遅延することはできないですよね?そんなコマンドないって言われる
原理上無理だと思うししなくていいと思う
yuiture7 6日 12:40:47 Slack
なる
独立してるのでVimの起動への悪影響はないと思いますし
ゴリラ 6日 12:41:26 Slack
deno: running
  • 🎉4
ゴリラ 6日 12:41:31 Slack
来た!
ゴリラ 6日 12:41:38 Slack
定義ジャンプもOK
ゴリラ 6日 12:42:32 Slack
denoのlspってtypescript-lang-serverとどっちがいいんだろ
今両方入れているけど、denoのlspがまともに使えるなら、そっちにしようかな
ゴリラ 6日 12:43:13 Slack
まずdenoをしばらく使ってみるか
1.8で安定扱いになってるんじゃなかったっけ > deno lsp
実際上手く動いてくれてる
1.7.5か
ゴリラ 6日 12:44:56 Slack
ゴリラ 6日 12:45:08 Slack
E73: tag stack empty
ゴリラ 6日 12:45:23 Slack
定義ジャンプしたあと C-t で戻ろうとしたら tag stack empty が出た
ゴリラ 6日 12:45:50 Slack
goplsだとうまく動いているから、denoだけっぽいな
ゴリラ 6日 12:46:36 Slack
            " Same buffer jump
call lsp#utils#tagstack#_update()
ゴリラ 6日 12:46:44 Slack
でもそれっぽいことやっているっぽい
ゴリラ 6日 12:47:44 Slack
お、ちゃんと補完動く
よし
ゴリラ 6日 13:00:47 Slack
dps-helloworld
└── denops
└── helloworld
└── mod.ts

denopsのこのディレクトリ構成
helloworldの部分はかぶらないようにする必要があるんでしたっけ
ですね
そこが呼び出し時の名前になるはず
Lua プラグイン作るときに一度やらかしてしまったので覚えている
ゴリラ 6日 13:01:55 Slack
:rikai:
ゴリラ 6日 13:02:00 Slack
ありがとうございます
いずれにせよ衝突すると死にそう
deinのようにマージするやつだとアウトだろうし
Tsuyoshi CHO 6日 13:04:16 Slack
deno の quickrun 環境を整えた
私も後でやろう
ゴリラ 6日 13:04:49 Slack
lspでこれが出るの、気になるな
ゴリラ 6日 13:05:33 Slack
Async arrow function has no 'await' expression.
ゴリラ 6日 13:06:01 Slack
とりあえずチュートリアル :done:
  • sokudo2
ゴリラ 6日 13:08:40 Slack
ちょうど、docker.vimをneovim対応しようと思っていたので、
せっかくだしdenopsに作り直そうかなと
typescript-language-server と deno は併用する形になると思います。前者は node 専用、後者は node_modules なしで。
Tsuyoshi CHO 6日 13:27:47 Slack
ただ、あるソースにどっちかだけ適用、というのが微妙に設定がむずかしいw
yaegassy 6日 13:36:56 Slack
denoの場合はプロジェクトレベルでローカルコンフィグでtypescript-language-serverを、disableのtrueにするといいかも
Tsuyoshi CHO 6日 13:44:04 Slack
ですね、雑に書いたときはしょーがないか
しかし
> disableのtrueにする
味がある文字列だw
yaegassy 6日 13:57:10 Slack
スマホなのでちゃんとした設定名が(ry
わかる。スマホでアルファベット打つの面倒ですよね。記号はもっと面倒
lambdalisue 6日 14:45:51 Slack
denops触りたいが忙しくて時間取れない...
lambdalisue 6日 14:46:13 Slack
グローバルキャッシュ機能を足す予定
lambdalisue 6日 15:59:28 Slack
denopsを使えばVimがOSに!?(違
  • ultrafastparrot7
  • hiee2
yukimemi 7日 15:47:28 Slack
denops バッファのフルパス取るのどうやればいいです?
ゴリラ 7日 15:49:36 Slack
vim scriptで取るしかないんじゃないかなと
ゴリラ 7日 15:54:56 Slack
  async call(func: string, ...args: unknown[]): Promise<unknown> {
return await this.#denops.call(func, ...args);
}

async cmd(cmd: string, context: Context = {}): Promise<void> {
await this.#denops.cmd(cmd, context);
}

async eval(expr: string, context: Context = {}): Promise<unknown> {
return await this.#denops.eval(expr, context);
}

async execute(command: string | string[]): Promise<void> {
await execute(this.#denops, command);
}
ゴリラ 7日 15:55:11 Slack
evalとcallだけが戻り値を受け取るっぽい
yukimemi 7日 15:59:25 Slack
vimscript 力がなくて eval と call でどう記載すれば取れるかわからない・・・
取りたいのはカレントバッファです?
でしたら call("bufname") でいけないかな
:h bufname()
vim-jp-bot 7日 16:00:42 Slack

bufname([{expr}]) *bufname()*
戻り値はバッファの名前。バッファ名はコマンド ":ls" で表示され
るものと同様。
{expr}が省略された場合は、カレントバッファが使われる。
{expr}が数値ならば、その番号のバッファ名が返される。0は現在の
ウィンドウの代替バッファを意味する。{expr}が文字列ならば、バッ
ファ名に対してファイル名マッチング |file-pattern| を行うパター
ンとなる。このマッチングは常に、'magic' をセットし 'cpoptions'
を空にした状態で行われる。複数マッチしてしまった場合には空文字
列が返される。
"" や "%" は現在のバッファを意味し、"#" は代替バッファを意味す
る。
完全マッチのものが優先され、完全マッチがなければ、バッファ名の
先頭でのマッチ、末尾でのマッチ、中間でのマッチが探される。完全
マッチのみを探すには、パターン先頭に "^" を、末尾に "$" をつけ
る。
まずバッファリストにあるバッファが探される。そこで1個だけマッ
チが見つかればそれを返す。次にバッファリストにないものが探され
る。
{expr}が文字列のときに、それをバッファ番号として使いたいなら
ば、0を足すことによって強制的に数値にすることができる:
echo bufname("3" + 0)
|method| としても使用できる:
echo bufnr->bufname()

バッファが存在しないか名前を持っていない場合には、空文字列が返
される。
bufname("#") alternate buffer name
bufname(3) name of buffer 3
bufname("%") name of current buffer
bufname("file2") name of buffer where "file2" matches.
あ、これ相対パスだと死ぬからカレントバッファであれば call("expand", "%:p:h") の方がいいかな
yukimemi 7日 16:06:13 Slack
いけました!!ありがとうございます!!
ずっと call("expand('%:p:h')") って書いてた・・・
その書き方ならevalの方かな(合ってるか不明)
あ、 :h 間違って付けてしまってたけど、これだとカレントバッファの親ディレクトリが取れますね…
ごめんなさい
  • ❤️1
kkiyama117 7日 18:26:04 Slack
型が取れていないと勘違いしてやらかしました、ごめんなさい
https://github.com/vim-denops/denops-std-deno/issues/4
  • iinoyo1
kkiyama117 7日 18:26:07 Slack
やらかしたついでに質問なのですが、
やらかした原因がリストの中の型を取れなかったからなんですが、
https://gist.github.com/kkiyama117/88ac9bd1b5725d87b43103bd1ab7d94d#file-denops-demo-ts
の様にリストの中の型が分からない際に型をobjectではなくArrayと判別したり何のArrayか確定するにはどうしたら良いんでしょう
配列自体の判定がこれでできるのは知ってるけど https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray
  • naruhodo1
Array.isArray() メソッドは、渡された値が Array かどうかを判断します。
中身は多分地道に判定するバリデーション関数を書くでもするしかなさそう
kkiyama117 7日 18:32:23 Slack
a = vim.g.get(hoge)(hogeはlist)とした時に
typeof aがobjectになるのは意図した挙動なんでしょうか? 
msgpackにはarrayもあると思っていたんですが……
こちらも残念ながらそういうものなんですよね… https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/typeof
  • majika1
typeof 演算子は、未評価のオペランドの型を示す文字列を返します。
kkiyama117 7日 18:34:31 Slack
なるほど、修行し直してきます……
typeofはプリミティブにしか使えないし、null「objectです!」処理系「 :yoshi: 」してくるから面倒
  • totemoturai1
  • doushite2
TypeScriptは万能なわけではなく、JavaScriptを引きずっているので結局JSも覚えないといけないという
typeof 演算子は、未評価のオペランドの型を示す文字列を返します。
denopsを使っていようがVim scriptを覚える必要があるのと似ていますね
  • naruhodo1
はい
yukimemi 7日 22:10:54 Slack
vim.g.get("hoge")) で、 g:hoge が定義してある時は問題ないですが、定義してない時にエラーになるです。 neovim だとなって、 vim だとエラーならない・・・。おま環かなぁ・・・。

[denops] Unexpected error occured in ‘foo’ Error: Failed to call ‘eval’ with [“g:hoge”,{}]: Error: Failed to call ‘nvim_call_function’ with [“denops#api#eval”,[“g:hoge”,{}]]: [0,“Vim(return):E121: Undefined variable: g:hoge”]
lambdalisue 7日 23:56:19 Slack
Vim/Neovim の違いっぽい
ゴリラ 8日 09:04:22 Slack
そこはdenopsで吸収したほうが良さそうな気もしますね
kkiyama117 8日 11:04:29 Slack
errorではなくてnullを返せばいい感じでしょうか?
kkiyama117 8日 11:06:01 Slack
https://github.com/vim-denops/denops.vim/blob/911b9b6e826778883c8dca05e3e28c480c081113/denops/denops/host/nvim.ts#L16

    try {
return await this.#session.call("nvim_call_function", fn, args);
} catch {
return null;
}

にすればとりあえずnullが返ってくることを確認しました
🐜 An ecosystem of Vim/Neovim which allows developers to write plugins in Deno - vim-denops/denops.vim
lambdalisue 8日 11:07:40 Slack
いえ、エラーを握りつぶすという選択肢はないです
  • naruhodo1
lambdalisue 8日 11:09:25 Slack
Vim でエラーが起こらないってことが異常。ただ、互換性を考えると仕方ないので「vim.X.get() 経由の変数取得時に変数がなくてもエラーにしない」という方向の修正になるかなと思います
  • rikai1
lambdalisue 8日 11:09:52 Slack
エラーを握りつぶす状況を可能な限り小さくする、って感じです
lambdalisue 8日 11:10:05 Slack
Or Vim でもエラーになるように頑張るか...
Tsuyoshi CHO 8日 11:12:31 Slack
先に有無をチェックする処理して、ないならエラーをかえす?
lambdalisue 8日 11:13:47 Slack
そのパターンですね。無駄な処理が入るので避けたいですが...
Tsuyoshi CHO 8日 11:16:27 Slack
行って返ってがやだったら、pollyfill的なのをVim側に書いて、それを1度呼ぶだけにしたほうが効率はいいかな?
lambdalisue 8日 11:18:15 Slack
まぁ「無い場合は null が帰る」という仕様にしてしまえば、それで解決なのでそっちかなぁーと思ってます
lambdalisue 8日 11:18:45 Slack
Vim No error Neovim Error like below denops] Unexpected error occured in ‘foo’ Error: Failed to call ‘eval’ with [“g:hoge”,{}]: Error: Failed to call ‘nvim_call_function’ with [“denops#api#eval”,[“...
lambdalisue 8日 11:18:50 Slack
issue にしておいた
Tsuyoshi CHO 8日 11:21:06 Slack
まあ、これならnullでいいよねはあるもんね
TSでとるならundefinedの方がいいとかないです?
  • 👍1
これは正しい意味のundefined感
Tsuyoshi CHO 8日 11:26:15 Slack
nullが設定されてるのありえるし、そうですね
あ、上で書いてるvimでの挙動のせいで実現できない可能性ある?
いや、実現はできるけど互換性問題か
lambdalisue 8日 11:28:32 Slack
関数の戻り値として undefined は避けた方がいいかなという所感です
なるほど、確かに感覚的に気持ち悪いかも
否定するとかじゃないんですが、なんかその辺プラクティスとして書いてるものってあります?
lambdalisue 8日 11:29:55 Slack
vim.g.get({name}[, {default}]) というインターフェースにして defaultnull という感じがいいかなーと思ってます
  • 👍2
lambdalisue 8日 11:30:20 Slack
> 否定するとかじゃないんですが、なんかその辺プラクティスとして書いてるものってあります?
経験から来る勘です... 🙇‍♂️
区別したい場合はdefaultにundefinedセットしたらいいのかな
lambdalisue 8日 11:31:21 Slack
undefined というものが存在する言語ってあまりないので JS/TS だけで閉じない denops では互換性の観点から避けた方がいい、という感じ
lambdalisue 8日 11:31:59 Slack
たとえば vim.g.get を別の言語で表現する時に undefined を使っていたら、それを表現するための特殊なコードが必要になります
考えてるとnullが渡るのを考慮して一律落とすでもいい気はしますねー
  • 👍1
nullが区別できないデメリットを将来的にどう見るか・・・
lambdalisue 8日 11:33:27 Slack
区別する必要がない場所だと思いますよ
lambdalisue 8日 11:33:45 Slack
区別が必要なら has を足す
実装レベルで対応は確かにできるか
Tsuyoshi CHO 8日 11:34:48 Slack
あー、なるほど
lambdalisue 8日 11:34:58 Slack
本来は Error にするべきところを default を返すという仕様にした段階で区別は別で考えるべきという感じですね
defaultがあればそれで十分そう
ゴリラ 8日 11:42:10 Slack
default いいすね
ゴリラ 8日 11:42:16 Slack
そっちのが使いやすい
エラー起こすようなコードはそもそも書くべきでないという観点からするとdefaultを書くという方が自然だと思うし
yukimemi 8日 16:14:51 Slack
おぉ!いつの間にか進んでた…issueすれば良かったですね、あざます!
  • 👍1
Gamou Tatsumi 17日 09:57:27 Slack
昨日からdenopsでGhostTextやろうと思っていろいろやってたんですけど、バッファを双方向で変化させる実装がなかなかしんどい
  • goodjob2
  • totemoturai3
お、それができたら移行しようかな(Python版のGhostTextは依存パッケージをいちいち入れるのが若干面倒なので)
Gamou Tatsumi 17日 10:05:45 Slack
たぶんGhostText自体は単純なWebSocketだからいいんですけど、バッファとの紐付けをどう管理したものか悩んでます
Python版の実装はだいたいどれもpynvimゴリゴリなので参考にしづらい……
Gamou Tatsumi 17日 10:06:16 Slack
とりあえず夜まで体力残ってたら続きやりますかね
lambdalisue 17日 11:03:16 Slack
もう少し具体的な問題に落とし込めるとアドバイスできるかもしれません
Deno.run でプロセス起動した後に、 await status() すると、 neovim だとちゃんと終わるのですが、 vim だと戻ってこないす……また neovim と vim の差かなぁ
lambdalisue 17日 13:10:32 Slack
どうやって呼んでます? notifyrequest の違いかと邪推しています
lambdalisue 17日 13:11:49 Slack
いや違うか...再現コードが欲しいです〜
はい、仕事中なので、また時間できた時に!
  • me-too1
  • 🙇‍♂️1
lambdalisue 17日 13:16:52 Slack
はい、ちなみに、精査できるのは土日になると思います〜
あ、あげてました!
https://github.com/yukimemi/dps-asyngrep
Contribute to yukimemi/dps-asyngrep development by creating an account on GitHub.
これ入れると、 Agp コマンド登録されて、起動すると ripgrep で grep して結果が quickfix 出るんですが、 neovim だと出て、 vim だと出ない
lambdalisue 17日 13:24:39 Slack
これバッファが表示されないだけなのか quickfix に結果が出てないのか、どっちでしょうね
lambdalisue 17日 13:24:53 Slack
      await vim.execute("botright copen");
lambdalisue 17日 13:25:04 Slack
これが怪しいかなーと漠然と思ってます
quickfix は vim もちゃんと表示されます。だけどその後の grep 結果が何も出てこず・・・ let g:asyngrep_debug = v:true して、 console.log で stdout を出してるんですが、そこでも表示されないので、 Deno.run した後、プロセスがなんかハングしてる?のかな・・・
lambdalisue 17日 20:43:31 Slack
気がついていなかった
lambdalisue 17日 20:43:42 Slack
:iizo:
フロントで優先度高めのゴリっと作りたいものができてしまってdenopsまだちょっと触れないかもしれない
申し訳ない・・・
  • 🦍4
Tsuyoshi CHO 18日 19:06:04 Slack
ゴリっとでゴリラがmarkされるのがvim-jp
ゴリラ 18日 19:06:54 Slack
これガチの話、ゴリって文字を見るとだいたいゴリラに空目してしまう
  • warau4
https://github.com/emacs-ng/emacs-ng
これって emacs 版 denops ってことかな
  • 👀1
A new approach to Emacs - Including TypeScript, Threading, Async I/O, and WebRender. - emacs-ng/emacs-ng
lambdalisue 19日 12:03:40 Slack
専用 Webpage とかドキュメントとか、このレベルまで作り込みたいですねー
lambdalisue 20日 12:34:27 Slack
Vim No error Neovim Error like below denops] Unexpected error occured in ‘foo’ Error: Failed to call ‘eval’ with [“g:hoge”,{}]: Error: Failed to call ‘nvim_call_function’ with [“denops#api#eval”,[“...
lambdalisue 20日 12:34:32 Slack
取り掛かる
  • otxu3
  • 👍🏾1
lambdalisue 20日 12:35:09 Slack
テストないのが辛い。誰かテスト基盤作ってくれぇ
2 件の返信 最終返信:12:57:44
lambdalisue 20日 12:57:11
基盤自体は作ってあった
https://github.com/vim-denops/denops-deno/pull/5
It worked on local environment but on CI... How to test Install Vim 8.2 or later Install Nvim 0.5 or later Set DENOPS_VIM and DENOPS_NVIM environment variables to vim and nvim executables Run den...
lambdalisue 20日 12:57:44
これを使って denops-deno-std のテスト環境整備と、実テストの記載が必要...
lambdalisue 20日 12:49:43 Slack
Remove 'env' type which is quite different from others Add defaultValue argument to fix behavior difference between Vim/Neovim (#5)
lambdalisue 20日 12:52:43 Slack
Currently Channel/Service servers are sequentially started but it's better to start concurrently while we'll add DenopsRestart command or whatever to restart servers separately.
DenopsRestart restarts all DenopsRestart channel restart channel server DenopsRestart service restart service server DenopsRestart plugin xxxxx restart plugin worker for xxxxx #12 is required
lambdalisue 20日 12:55:02 Slack
https://github.com/vim-denops/denops-deno/pull/8

これ気がついてませんでした 🙇‍♂️
こう言うイベントやるんでよかったらぜひ :deno:
https://deno-ja.connpass.com/event/208138/
## Deno勉強会について 本勉強会は、2018年12月末に数名で始めたもくもく会をベースにしており、今回で9回目となります。 運営は有志で集まったdeno-jaで行っており、 このグループでは、SlackでDenoの近況の話をしたり、技術書典に出展したりなどの活動を行っています。 ## 今回の勉強会の概要 * もくもく会 * 雑談会 の2部構成で行います。 もくもく会、雑談会それぞれだけの参加も大丈夫です! 会場はDIscordです。Discordの招待リンクはこちらです↓ https://discord.gg/cHwDSHx2 (3/27まで有効、またリンク更...
lambdalisue 20日 16:33:56 Slack
lambdalisue 20日 16:35:17 Slack
  • 👍1
twitter
Λlisue@花粉症 @lambdalisue
Twitter
あざます!:deno:
lambdalisue 20日 16:35:57 Slack
Denops 関連の開発進めます(マイクはON にできないかもですが...w
  • ❤️2
Denops布教して参加者みんなVim plugin書いてる、みたいになったら楽しそうすね
  • fuita3
特にネタ無いけどとりあえず参加だけしてみるというのはいいです?
  • yosasou2
lambdalisue 20日 16:38:37 Slack
ネタは後からついてくる
  • naruhodo1
参加Done
  • 🎉3
  • deno1
lambdalisue 20日 17:30:28 Slack
@yukimemi https://github.com/yukimemi/dps-asyngrep/pull/1 Vim でも動くように修正しました。stdin がVim とつながっていて、待ち状態になっていたっぽいです。これ将来的には Denops 側でなんとかするかも(出来るかがかなり怪しいですが
1 件の返信 最終返信:17:55:41
#←
チャンネルにも投稿済
yukimemi 20日 17:55:41
おぉー!!ありがとうございます!!
stdin が問題だったんですね……全然わからんかった……ちなみに解決に至る過程について教えてもらえたりします?自分じゃ全然わからなかったので…
何か走らせる時はstdin無条件で潰すようにしておいたほうがよさそうだな
  • sorena1
lambdalisue 20日 17:32:08 Slack
あえて一行ずつ qflist に追加してるからプロモーション的には気持ちいいな(最終的な速度としては圧倒的に遅いので全部まとめて送った方が実用上は良い)
というか、Deno.runがデフォルトで大本のstdinに繋げるのあんまりよろしくない気がするなー
lambdalisue 20日 17:34:09 Slack
どうでしょう。一般的な挙動な気がします
lambdalisue 20日 17:36:10 Slack
Denops に限ると大元が Vim/Neovim なのでアレですがw
Goだとデフォルトだと自前のパイプに繋がっていた気がして、その方が好みだなーというだけの話なのでよろしくないは言い過ぎな気がした
  • naruhodo1
Goの場合は大本に繋げたかったら cmd.Stdin = os.Stdin みたいな感じにする必要がある
  • yosasou1
lambdalisue 20日 17:45:25 Slack
鯖を分けて起動したりリスタートしたり出来るようにするのが面倒
おぉー!!ありがとうございます!!
stdin が問題だったんですね……全然わからんかった……ちなみに解決に至る過程について教えてもらえたりします?自分じゃ全然わからなかったので…
このスレッドに返信しました : <@UEX9VPSET> <https: ...
lambdalisue 20日 17:56:42 Slack
適当に試して「プロセス待ってるな」からの「grep系プログラムか、入力待ち?」って感じです
  • subara1
lambdalisue 20日 18:00:08 Slack
あと、以前似たようなやつをkuuさんが同じように解決したのを見てたからってのもあります
お、役に立ってよかった
  • god2
lambdalisue 20日 18:02:01 Slack
これグローバルに消せないかなぁ
lambdalisue 20日 18:02:14 Slack
プラグインからするとstdin無意味なんですよねぇ
> Deno.stdin = null
Uncaught TypeError: Cannot assign to read only property 'stdin' of object '#<Object>'
at <anonymous>:2:12

でっすよねー
lambdalisue 20日 18:04:39 Slack
ですよねー
stdinをcloseしてしまうとか考えたけど、入力が閉じてると問題が出る系の対処はできないか
lambdalisue 20日 18:05:03 Slack
Vimで起動するときにそもそもcloseしちゃう?
lambdalisue 20日 18:05:22 Slack
Tsuyoshi CHO 20日 18:05:53 Slack
denoがネットワークとかの権限を設定するみたいに ---disallow-stdin とかあるといいのにね
前に送ったPRの案件がまさにそれだったんですよね、CIだと/dev/nullみたいなのに繋がってるから死ぬって
lambdalisue 20日 18:06:13 Slack
セキュリティ的に旨みがないからなさそう?
なので明示的にpipedに繋いだ
lambdalisue 20日 18:06:30 Slack
なる
lambdalisue 20日 18:06:55 Slack
なんかプラグインはきにしなくてすむようにしたいですね
ただ、Deno.stdinをcloseするとどうなるかは試してないので試す価値はありそう
Tsuyoshi CHO 20日 18:07:09 Slack
まあそうなんですが、ログ汚染という意味では意味あるし、もっててくれてもいいのにーとは思いましたw
CI(GHAなど)でstdoutで設定とかあるし...
  • naruhodo1
lambdalisue 20日 18:07:11 Slack
良さそう
lambdalisue 20日 18:07:59 Slack
ちょうど先のプラグインで挙動は試せる
[非同期にGrep検索する (denops.vim)](https://zenn.dev/yukimemi/articles/2021-03-21-dps-asyngrep)
ありがとうございました〜〜
  • goodpoem7
Tsuyoshi CHO 21日 18:32:43 Slack
あ、あれが参考なの?、だいぶほったらかしなんなけどw
Tsuyoshi CHO 21日 18:33:57 Slack
引数とユーザー設定はやりたかったのあるところだし、便利そうですね!
はい、実はあれが参考なんです!すいません勝手に…
toml で設定書いたりとか考え方まるパクリしちゃってるごめんなさいm(_ _;)m
ただ、細かい所は全然真似できてないんですけどね
Tsuyoshi CHO 21日 19:01:15 Slack
いえ、問題ないです。
むしろ嬉しいですよw。
  • subara1
Deno挟まってるので、API叩きってやっぱ向いてるよな https://zenn.dev/omochice/articles/67922b4970c32ec0899a
  • goodpoem2
  • naruhodo1
(遠慮無くここで共有してもらっても構わないですよ)
4 件の返信 最終返信:20:53:55
Omochice 26日 20:26:50
すみません。vim scriptもDenoもTypeScriptも全くわからない状態から書いたので型とかがメチャクチャです。何かあればご指摘いただければ幸いです。
ほぼ初心者目線ですが、ざっと読んだ感じ
・Zennのコードの最初が途切れている
・fetchAPIのTOKENをanyで受けているのが気になる&全部大文字なのが気になる(これは好み?)
vim.cmd("bo new") の部分は略さない方が好き
くらい?
Deno.env.get 未定義だった時にundefined返ってくるので検査は TOKEN === "" よりも !TOKEN とか TOKEN === undefined の方がいいかもです
Omochice 26日 20:53:55
ありがとうございます。記事に関する部分は修正しました。
Tsuyoshi CHO 26日 12:15:17 Slack
APIはforkしたほうでやってたけど、楽になるならいいねえ
https://github.com/tsuyoshicho/codic-web.vim
Codic search Vim Plugin;It forked from koron/codic-vim, modified at to use Codic Web API - tsuyoshicho/codic-web.vim
lambdalisue 27日 04:15:13 Slack
https://twitter.com/muskuarede/status/1375322320873549827?s=21

これ FF 系とかフィルタ部分を Rust で書いて WASM にしてやると無茶苦茶速いしメモリ効率も良いって感じにできるのでは
  • wakaru1
  • 👀2
twitter
緋村罵倒祭 @Muskuarede
denops + rust、きっちりspawnしたりPromise返したりするとアホみたいに早くなるな
(denops-rust-exampleにデモを足した)
Twitter
Makefile直書きしてたけど、ちゃんとタスクランナーあるのか
(json書くくらいならMakefile書きたい)