Ory*_*and 8 vim haskell ctags exuberant-ctags
我已经使用Homebrew在我的Mac上安装了Haskell ,就是这样brew install ghc haskell-platform.
我正在寻找一种方法来生成标准Haskell平台库(模块)的ctags文件,这样我就可以在Vim中编码时浏览源代码.我特别需要Prelude和其他最流行的模块一样Data.List.
我知道可以通过Hoogle在网上获得该来源,但是为了学习目的,我可以更轻松地在需要时跳转到源代码.
tags文件放在某处并告诉Vim从中读取.我也明白没有必要重新生成tags文件,因为这些模块非常静态,不经常更新.小智 10
1)和2)由permeakra在评论中回答.我将通过描述类似于我正在使用的设置来尝试覆盖3).基本库的第一个简单解决方案,然后是一般的Haskell源包的更通用的解决方案.
作为先决条件,我们需要一个为Haskell生成标记文件的工具:
cabal install hothasktags
Run Code Online (Sandbox Code Playgroud)
而不是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
Run Code Online (Sandbox Code Playgroud)
我们可以选择切换到特定分支.例如:
git checkout ghc-7.4
Run Code Online (Sandbox Code Playgroud)
跑去git branch -a看所有可能性.
现在,让我们产生基库标签(我没有苹果机用,因此必须承担指挥的作品有,或者您能适当地调整它):
cd packages-base
export LC_ALL=C # needed for case-sensitive searching
find -type f | egrep \.hs$\|\.lhs$ | xargs -Ii hothasktags i | sort > tags
Run Code Online (Sandbox Code Playgroud)
(关于排序的注意事项:当我不使用排序时,我的Vim会抱怨.有关LC_ALL解释,请参阅此博客文章)
现在我们需要让Vim知道我们生成的标签.最简单的方法可能是将以下行放入您的$HOME/.vimrc:
autocmd FileType haskell setlocal tags+=/space/haskell/sources/packages-base/tags
Run Code Online (Sandbox Code Playgroud)
这样,将为我们打开的每个Haskell文件设置基本库的标记.如果这不可取,我们可以将以下Vim命令放入.vimrc:
autocmd FileType haskell command! SetGHCTags
\ setlocal tags+=/space/haskell/sources/packages-base/tags
Run Code Online (Sandbox Code Playgroud)
并: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>)
Run Code Online (Sandbox Code Playgroud)
例如,它用于Shelly.hs库:
cd /space/haskell/sources/
git clone https://github.com/yesodweb/Shelly.hs.git
cd Shelly.hs
regenerate-haskell-tags # [1]
Run Code Online (Sandbox Code Playgroud)
在Vim中只需致电:
:SetHaskellTags "Shelly.hs"
Run Code Online (Sandbox Code Playgroud)
还有改进空间 - SetHaskellTags如果不存在则可以生成标签,甚至可以获取源,可配置的Haskell源代码存储,目录完成等等.但现在对我来说已经足够好了.所以至少要分享我的解决方案.如果我完成了一些改进,将会回到这里.
[1]:最好存放regenerate-haskell-tags在你的$PAHT.
| 归档时间: |
|
| 查看次数: |
1778 次 |
| 最近记录: |