nvim-hs, 用于Haskell插件以及插件提供者的Neovim API

分享于 

9分钟阅读

GitHub

  繁體 雙語
Neovim API for Haskell plugins as well as the plugin provider
  • 源代码名称:nvim-hs
  • 源代码网址:http://www.github.com/neovimhaskell/nvim-hs
  • nvim-hs源代码文档
  • nvim-hs源代码下载
  • Git URL:
    git://www.github.com/neovimhaskell/nvim-hs.git
    Git Clone代码到本地:
    git clone http://www.github.com/neovimhaskell/nvim-hs
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/neovimhaskell/nvim-hs
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    nvim-hs

    用于Haskell插件以及插件提供程序的Neovim API。 这个库和可执行文件应该为开发插件提供一个基础。 这个包应该只包含广泛有用的接口,以便在haskell中为neovim编写插件。 设计目标是创建一个易于使用的API,避免大多数样板,同时仍然保持一些可靠性和类型安全。 由于模板Haskell用于生成neovim绑定,并且避免了一些样板方便的工作,一些异常操作系统和体系结构。

    Build StatusHackage versionnvim-hs on latest Stackage LTSnvim-hs on Stackage Nightly

    如果我现在使用它,该怎么办?

    在github上查看问题列表。

    我怎么开始使用这个工具?

    首先,你必须决定如何管理你的插件。 本章的每一部分都描述了管理插件的另一种方法。 它从一个优点和缺点列表开始,然后解释一下你需要做什么以及如何安装 nvim-hs -compatible plguin。 通用库文档位于( hackage ) 上的haddocks中。 如果你对Haskell开发是新的,或者你并不真正心理如何管理插件,我( saep ) 推荐堆栈模板方法。

    通过模板的

    的优点

    • 由于模板的原因,易于设置
    • 灵活的依赖管理;所有堆栈支持都可以完成,这包括stackage上的包。hackage上的包。本地包和存储库
    • Reprobucible ;如果它工作一次,它将在未来工作
    • 在neovim插件中使用堆栈,并且有相同的( 类似的) ( 长期支持) 版本,你将在初始设置时保存编译时间。

    • 一些详细信息;如果不在stackage快照中,则必须添加两次依赖项

    安装

    首先,你必须安装 stack。

    必须安装neovim并且可以执行 nvim 必须在路径上。 ( API代码生成调用 nvim --api-info。)

    然后,你将 switch 配置为neovim配置文件夹( 典型 ~/.config/nvim ),你必须创建插件项目。

    cd ~/.config/nvim

    堆栈新 my-nvim-hs https://raw.githubusercontent.com/neovimhaskell/nvim-hs/master/stack-template.hsfiles --bare --omit-packages --ignore-subdirs

    现在你必须把所有的东西。

    堆栈设置

    堆栈生成

    如果没有错误( 不应该有任何),你只需要告诉neovim如何启动这个。 将以下内容添加到 init.vim:

    ifhas('nvim')" This way, you can also put this in your plain vim config" function which starts a nvim-hs instance with the supplied namefunction!s:RequireHaskellHost(name)" It is important that the current working directory (cwd) is where" your configuration files are.returnjobstart(['stack', 'exec', 'nvim-hs', a:name.name], {'rpc': v:true, 'cwd': expand('$HOME'). '/.config/nvim'})
     endfunction" Register a plugin host that is started when a haskell file is openedcallremote#host#Register('haskell', "*.l?hs", function('s:RequireHaskellHost'))" But if you need it for other files as well, you may just start it" forcefully by requiring itlet hc=remote#host#Require('haskell')endif

    如果现在启动 neovim,则可以使用模板中的预定义函数。

    :NextRandom ( )

    应该打印随机数字。

    从Hackage安装插件

    让我们以 nvim-hs-ghcid为例。 我们也假设它不是在stackage上。 我们必须在 my-nvim-hs.cabal 文件和 stack.yaml 文件中声明依赖项。 在 .cabal 文件中,将 nvim-hs-ghcid 添加到 build-depends 部分。 它应该是这样的:

    
     build-depends: base> = 4.7 && <5
    
    
    , nvim-hs> = 0.2.0 && <1.0.0
    
    
    , nvim-hs-ghcid
    
    
    
    

    你可以省略版本号,因为你必须在 stack.yaml 文件中定义它,并且你要管理你的依赖项。 stack.yamlextra-deps 部分应该如下所示:

    extra-deps:
    - nvim-hs-ghcid-0.2.0

    如果 nvim-hs-ghcid 依赖于其他不在stackage上的包,那么你就必须在那里添加这些依赖项。 stack build的输出应该告诉你必须添加哪些内容。 不需要将这些传递依赖项添加到 Cabal 文件的build-depends,因为你没有直接从这些包访问任何内容。

    添加所有这些显式版本似乎是使用堆栈的缺点。 但是,好处是将来会有一个可以重复的构建,并且不必为每一个依赖项寻找一组版本边界。 现在做一些工作会节省你更多的时间 !

    使用插件,将它添加到 ~/.config/nvimnvim.hs 文件的插件列表中:

    importNeovimimportqualifiedNeovim.Example.PluginasExampleimportqualifiedNeovim.GhcidasGhcidmain::IO()main =do neovim defaultConfig
     { plugins = plugins defaultConfig ++ [ Example.plugin
    , Ghcid.plugin
     ]
     }

    如果要更新依赖项/插件,则必须手动增加 stack.yaml 文件中的版本号,并可能修复出现的编译错误。 如果你想要一个插件的滚动版本,遵循从git安装插件的说明。

    从git安装插件

    这种方法最适合更新大量的插件,并且你需要最新版本的最新版本。 这也适用于没有hackage版本的插件。 如果你不打算在插件库中工作,你可以将它添加到插件管理器的插件列表中( 比如。 这个方法可以更新所有正常的vim插件。 为了保持上一节的示例,我们再次使用 nvim-hs-ghcid 插件。

    将插件添加到插件管理器( 以vim插头为例):

    Plug 'saep/nvim-hs-ghcid', { 'for': ['haskell'] }

    一旦vim插入或者更新了存储库,将插件添加到 stackage.yaml 文件的包列表中。 软件包列表应如下所示:

    packages:
    - .- plugged/nvim-hs-ghcid # or the appropriate relative path the folder you configured

    如果你的存储库中有存储库,你不需要把它指定为依赖,你仍然需要将插件的依赖项添加到 stack.yaml 文件中,尽管这样做仍然很困难。 它看起来像这样:

    extra-deps:
    - some-dependency-0.2.4- and-another-one-13.8.5.2

    将插件添加到 nvim.hs的插件列表中,与前一章结尾所描述的方式相同。

    这种方法的缺点是,编译时间越长,你所包含的插件就越多。

    你可以从neovim调用自己的函数

    栈模板为你生成了一些文件,你可以使用它们作为模板来编写自己的插件。 如果你编辑它们并犯了Haskell编译器可以检测到的错误,则应该出现一个in列表项。 除非从 nvim.hs 中删除 plugins defaultConfig,否则。

    文档。错误修复和类似的内容几乎总是被合并。

    如果你希望为与neovim交互提供新特性或者便利库,你应该先创建一个问题。 这个( Cabal ) 项目的特性应该保持较小,因为这有助于减少开发时间。 在测试过程中,如果你需要在 cabal install的项目中解决一般问题,那么可以在hs的库项目中自由地打开一个问题: nvim-hs-contrib


    plugin  API  Provider  插件  Haskell  neovim  
    相关文章