Closed15

dpp.vimと戯れる

Osmium_1008Osmium_1008

config部分に何を書いていいのかよくわからないのでいろいろ叩いて動かしてみる

とりあえずの目標: skkeletonを導入→認識→動作までさせる

Osmium_1008Osmium_1008

https://github.com/Shougo/dpp.vim/blob/b839d192dd2aee2423acd1cbb978f157e5967900/denops/dpp/base/config.ts#L22-L29
最低でもPlugin[]型の配列は必要 他は必要に応じてという具合か checkFilesやhooksFilesなどが何のためのものなのかはまだ分かっていない

https://github.com/Shougo/dpp.vim/blob/b839d192dd2aee2423acd1cbb978f157e5967900/denops/dpp/types.ts#L46-L91
必須としてマークされているのはnameのみ ただrepo(protocol-gitと話させる用?)あるいはpath(これ書いておけばローカルプラグイン認識してくれる?)は要る気がする 両方もありえる?

Osmium_1008Osmium_1008

local読み込みも遅延読み込みもさせる予定はないのでdpp-ext-tomlの機構でも解析すればよさそう

Osmium_1008Osmium_1008

toml読み出しただけだと基本的にrepoだけ持ったPluginの配列が読み出されるっぽいのでrepo+name+標準設定 があればinstallerやprotocol-gitは認識できる(はず)

Osmium_1008Osmium_1008

MultipleHook: (プラグイン同士は特別依存関係を持たない)複数プラグインに依存する設定コードが存在するとき用に指定したプラグイン全てが読み込まれた(前後)で実行されるコードを設定できる機構 skkeletonがなぜか(プラグインマネージャ上では)nvim-cmpに依存しているみたいな状況を回避できる?
ext-lazyと組み合わせた時に真価を発揮しそう

Osmium_1008Osmium_1008

ひとまず

{depends?, hooks_file?, repo} | {depends?, hooks_file?, local, path}

あたりでリスト列挙してそれを整形して返してみる

Osmium_1008Osmium_1008
dpp_types.ts
type LocalPlugin = {
    depends?: string | string[];
    hooks_file?: string | string[];
    local: true;
    path: string;
    repo?: string;
};

type RepoPlugin = {
    depends?: string | string[];
    hooks_file?: string | string[];
    repo: string;
    path?: string;
};

export type PluginUnformatted = LocalPlugin | RepoPlugin;
dpp_plugs_formatter.ts
import { PluginUnformatted } from "./dpp_types.ts";
import { Plugin } from "jsr:@shougo/dpp-vim@~4.0.0/types";

import { basename } from "jsr:@std/path@~1.0.2/basename";


export function format( unformatted_plugins: PluginUnformatted[], defaultOptions?: Record<string, never> ): Plugin[] {
    const plugins = unformatted_plugins.map((plugin: PluginUnformatted) => {
        return {
            ...defaultOptions,
            ...plugin,
            name: basename( "local" in plugin ? plugin.path : plugin.repo),
        };
    });

    return plugins;
}

こんな感じのものを用意して

dpp_plugspec.ts
import { PluginUnformatted } from "./dpp_types.ts";

export const PluginList: PluginUnformatted[] = [
    { repo: "vim-denops/denops.vim", },
    { repo: "Shougo/dpp.vim", },
    { repo: "Shougo/dpp-ext-installer", },
    { repo: "Shougo/dpp-protocol-git", },
    { repo: "vim-skk/skkeleton", },
];

こんな配列を読ませて帰り値にしてext-installer呼んだら無事skkeletonがインストールされた あとはhookまわりの挙動を思い出せばいい?

Osmium_1008Osmium_1008
dpp_plugspec.ts
~~~
{ 
    repo: "vim-skk/skkeleton", 
    depends: "vim-denops/denops.vim",
    hooks_file: "~/.config/vim/skkeleton.vim",
},
~~~

とかして.config/vim/skkeleton.vimにそれっぽい設定書いたらいつもと同じ具合に使えるようになった
次なにかやるとすれば遅延読み込みを使ってみるとか...?

Osmium_1008Osmium_1008

hooks_fileのパスはなんか自動展開されてほしいかもしれない

Osmium_1008Osmium_1008

自動更新が走るわけではなくて起動時に走らせるautocmdとかを差し込むのに使えるというイメージ?

Osmium_1008Osmium_1008

hooksfilesはhooks_fileまとめておけば勝手にCheckFilesに突っ込んだりその他処理を行ってくれる何かっぽさがある(その他は未確定 確実にhooks_fileをCheckFilesに追加するための機構っぽいしどうも自動生成される)

このスクラップは4ヶ月前にクローズされました