通过仔细检查文档,我了解到Emacs haskell-mode提供了三种不同的,互斥的自动缩进方法.他们被称为haskell-indentation,haskell-indent和haskell-simple-indent.谁能解释这些方法是如何相似的以及它们是如何不同的?我不仅对个人特征感兴趣,而且如果一个是事实上的标准,或者如果不再保留一个或两个,我感兴趣.
我安装haskel-mode在emacs中.然后我写了我的.emacs:
(load "~/.emacs.d/haskell-mode/haskell-site-file")
(add-hook 'haskell-mode-hook 'turn-on-haskell-doc-mode)
(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)
(add-hook 'haskell-mode-hook 'haskell-font-lock-symbols t)
(put 'downcase-region 'disabled nil)
Run Code Online (Sandbox Code Playgroud)
我必须在我的conf文件中添加哪些内容,emacs可以为Haskell自动完成?还是Haskell模式没有这种可能性?
我刚刚haskellmode-vim从我的插件配置中禁用.基本上这有三个原因:
neocomplcache我的自动完成需求.cabal我希望有人跳进坑中并指出我只是错误配置了整个事情(就像我在自述文件中配置了最基本的东西).提出这个问题:
是否可以设置haskellmode,以便......
这是我的场景:
我正在开发一个包含以下目录/模块的项目:
|--proj
|-- src
|-- Foo
|-- FooModule1.hs
|-- FooModule2.hs
|-- Bar
|-- BarModule1.hs
Run Code Online (Sandbox Code Playgroud)
BarModule1.hs 看起来像这样:
module BarModule1 where
import Foo.FooModule1
...
Run Code Online (Sandbox Code Playgroud)
我还有一个.cabal文件指定src为hs-source-dirs当然,其中列出了两个模块.
当我BarModule1.hs在Emacs 中的文件中时,我这样C-c C-l说:
proj/src/Bar/BarModule1.hs:3:8:
Could not find module `Foo.FooModule1'
Use -v to see a list of the files searched for.
Failed, modules loaded: none.
Run Code Online (Sandbox Code Playgroud)
我也想使用hlint,flymake-haskell-multi-load如果我激活该模式M-x flymake-haskell-multi-load,hlint将始终显示它无法找到模块的错误Foo.FooModule1,因为它不知道该.cabal文件,我在其中指定hs-source-dirs: src.
所以我的问题是:我如何制作haskell-mode和flymake …
在haskell-mode的emacs中,我想更改命令
至
从以下提示:Haskell.org:Emacs/Keybindings和简单用法我尝试将以下变体插入.emacs文件但它们不起作用.关于如何实现上述功能的任何建议都将受到欢迎!谢谢.
变式1
(defun haskell-hook ()
(define-key haskell-mode-map (kbd "C-x C-s") (kbd "C-x C-s C-c C-l"))
(add-hook 'haskell-mode-hook 'haskell-hook)
Run Code Online (Sandbox Code Playgroud)
变体2
(defun haskell-hook ()
(define-key haskell-mode-map (kbd "C-x C-s") 'my-haskell-mode-save-buffer)
(defun my-haskell-mode-save-buffer ()
(interactive)
(execute-kbd-macro [?\C-s ?\C-x ?\C-c ?\C-l return]))
(add-hook 'haskell-mode-hook 'haskell-hook)
Run Code Online (Sandbox Code Playgroud)
[编辑1] @Tikhon Jelvis:这绝对是一个很好的学习练习!谢谢.使用帖子中列出的方法,我将您的功能更改为:
(defun my-haskell-mode-save-buffer ()
(interactive)
(save-buffer)
(inferior-haskell-load-file)
(other-window 1))
Run Code Online (Sandbox Code Playgroud)
最后一行以编程方式将光标切换到交互式窗口.谢谢.
[EDIT2]其他变种包括:
(defun my-haskell-mode-save-buffer ()
(interactive)
(execute-kbd-macro (read-kbd-macro "C-c C-l"))
(other-window 1))
Run Code Online (Sandbox Code Playgroud)
并且:
(defun my-haskell-mode-save-buffer ()
(interactive)
(execute-kbd-macro …Run Code Online (Sandbox Code Playgroud) 嗨,我开始使用haskell,并尝试设置我的emacs进行开发.
我已经haskell-mod和ghc-mod在最新的emacs 24.3.1.GHC是7.6.3
我创建了一个haskell文件first.hs,当我这样做时C-c C-l
问:
start a new project named haskell ? y or n
Run Code Online (Sandbox Code Playgroud)
我的目录名是haskell.我按了y
Set the cabal directory
Run Code Online (Sandbox Code Playgroud)
我已尝试使用〜/ .cabal和我当前的目录命名 haskell
Set the current directory
Run Code Online (Sandbox Code Playgroud)
只需按下输入,因为它有haskell目录
它显示错误消息:
haskell-process-start: cl-ecase failed: cabal-rep, (ghci quote cabal-repl quote cabal-ghci quote cabal-dev quote)
Run Code Online (Sandbox Code Playgroud)
如何获得repl?
我读到我可能需要降级ghc版本才能使其正常工作.那是好的解决方案吗?
方案:
我custom-set-variables在init.el中有多个,它导致了问题.
我正在尝试为haskell设置emacs.我用el-get下载了haskell-mode,有些部分正在工作(比如缩进,启动ghci等),但我无法让代码生成 工作.
Hasktags已安装,并
(load "~/.emacs.d/el-get/haskell-mode/haskell-site-file")已添加到我的init文件中.
hasktags是否需要在某个目录中?(我添加了目录PATH,但没有成功.)
该haskell-process-generate-tags功能不可用M-x.当我(load "~/.emacs.d/el-get/haskell-mode/haskell-process.el")手动添加到init文件时,该功能可用但不生成TAGS文件.
(PS:我正在使用带有linux的emacs 24.1)
我目前正在使用Emacs作为我开发Haskell代码的主要IDE,到目前为止我真的很满意.但目前我无法弄清楚一个小细节,即如何自定义缩进宽度为4而不是2.
目前,我已经把上haskell-indentation的haskell-mode,但我想不出我有设置自定义压痕宽度什么变化.到目前为止,我已尝试设置,'(haskell-indent-spaces 4)但这似乎没有任何影响......
请提前获取任何帮助!
helloworld.hs中的代码:
main = do
putStrLn"你好,你叫什么名字?"
name < - getLine
putStrLn("嘿"++名称++",你摇滚!")
终端应用测试:
optimight @ optimight:〜$ ghc --make helloworld
[1 of 1]编译Main(helloworld.hs,helloworld.o)
链接helloworld ...
optimight @ optimight:〜$ ./helloworld
你好,你叫什么名字?
约翰
嘿约翰,你摇滚!
在emacs中加载helloworld.hs - haskell主要模式:
GHCi,版本7.4.1:http ://www.haskell.org/ghc/:?求助于
加载包ghc-prim ...链接...完成.
加载包integer-gmp ...链接...完成.
加载包基...链接...完成.
Prelude>:load"/home/optimight/helloworld.hs"
[1/1]编译Main(/home/optimight/helloworld.hs,解释)
好的,模块已加载:Main.
*主要>
现在,如何(程序是什么?)在emacs - haskell模式环境中测试它?(我相信,当我使用emacs - haskell模式时,不需要切换到终端.)
当我在vim中构建一个cabal项目时,使用
:set makeprg=cabal\ build
:make
Run Code Online (Sandbox Code Playgroud)
haskellmode-vim似乎没有找到类型信息.否则_t,当光标在foo给我的"福键入不知道".
如何让haskellmode-vim从cabal构建中获取类型信息?