为Haskell平台(标准库)生成ctags,专门用于前奏
我已经使用Homebrew在我的Mac上安装了
Haskell,即brew install ghc haskell-platform.
我正在寻找一种方法来生成标准Haskell平台库(模块)的ctags文件,这样我就可以在Vim中编码时浏览源代码.我特别需要Prelude和其他最流行的模块,比如Data.List等. 我知道the source is available on the web via Hoogle,但是出于学习目的,我会更容易在需要时跳转到源代码. >安装Haskell平台时源位于何处?
1)和2)由permeakra在评论中回答.我将通过描述类似于我正在使用的设置来尝试覆盖3).基本库的第一个简单解决方案,然后是一般的Haskell源包的更通用的解决方案.
作为先决条件,我们需要一个为Haskell生成标签文件的工具: cabal install hothasktags 您可以使用自己喜欢的hothasktags而不是hothasktags.参见例如https://github.com/bitc/lushtags页面,其中列举了其中一些. 然后我们需要有可用的基础库源.在这里,我使用GitHub中的那些: cd /space/haskell/sources/ # tweak to your personal taste git clone https://github.com/ghc/packages-base.git 我们可以选择切换到特定分支.例如.: git checkout ghc-7.4 运行git branch -a来查看所有可能性. 现在让我们为基础库生成标签(我没有Mac可用,因此必须假设命令在那里工作或者你能够适当地调整它): cd packages-base export LC_ALL=C # needed for case-sensitive searching find -type f | egrep .hs$|.lhs$| xargs -Ii hothasktags i | sort > tags (关于排序的注意事项:当我不使用排序时,我的Vim会抱怨.对于LC_ALL说明,请参阅例如blog post) 现在我们需要让Vim知道我们生成的标签.最简单的方法可能是将以下行放入$HOME / .vimrc: autocmd FileType haskell setlocal tags+=/space/haskell/sources/packages-base/tags 这样,将为我们打开的每个Haskell文件设置基本库的标记.如果这不可取,我们可以将以下Vim命令放入.vimrc: autocmd FileType haskell command! SetGHCTags setlocal tags+=/space/haskell/sources/packages-base/tags 并致电:按需提供SetGHCTags. 对于适用于所有Haskell源包的更通用的解决方案,我们可以使用以下函数(放入.vimrc或专用于Haskell文件类型的Vim文件): " Add 'tags' of the given package to the current tag stack. The package sources " must be available in "/space/haskell/sources/<package>" and the tags must be " generated for it. fun! s:SetHaskellTags(pathInHaskellSrcDir) "{{{ let tagFile = "/space/haskell/sources/" . a:pathInHaskellSrcDir . "/tags" if filereadable(tagFile) exe "setlocal tags+=" . tagFile else echoerr "File does not exist or is not readable: " . tagFile endif endfunction "}}} command! -nargs=1 SetHaskellTags call <SID>SetHaskellTags(<args>) 例如,为Shelly.hs库使用它: cd /space/haskell/sources/ git clone https://github.com/yesodweb/Shelly.hs.git cd Shelly.hs regenerate-haskell-tags # [1] 在Vim中只需致电: :SetHaskellTags "Shelly.hs" 还有改进空间 – 如果不存在,SetHaskellTags可以生成标签,甚至可以获取源,可配置的Haskell源代码存储,目录完成等等.但现在对我来说已经足够好了.所以至少要分享我的解决方案.如果我完成了一些改进,将会回到这里. [1]:最好将 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- uniq在达尔文炮弹上的奇怪行为
- angularjs – Angular $routeProvider和Controll
- 浅谈WebService开发三(动态调用WebService)
- 【数据结构】3、模拟银行窗口排队叫号系统——C+
- activiti designer源码的研究(四) 之servicetask
- twitter-bootstrap – MVC Bootstrap形成样式问题
- angularjs – 无法将范围传递给角度对话框
- scala – 返回动态数据类型的Apache Spark UDF
- Twitter Bootstrap:如何使用jQuery以编程方式关
- scala – 如何使用封装的源和接收器测试akka流闭