我是 emacs 的新手(来自 vim,我无法让 idris-vim 工作)并通过 el-get 安装了这些软件包:
ace-jump-mode installed A quick cursor location minor mode for emacs.
el-get installed Manage the external elisp bits and pieces you depend upon.
evil-leader installed Add <leader> shortcuts to Evil, the extensible vim emulation layer
evil-numbers installed Increment/decrement numbers in Evil, the extensible vim emulation layer. Like C-a/C-x in vim. After installation, you will need to add a key-binding for evil-numbers. For example: (define-key evil-normal-state-map (kbd "C-c +") 'evil-numbers/inc-at-pt) (define-key evil-normal-state-map (kbd "C-c -") 'evil-numbers/dec-at-pt)
evil-surround installed Emulate Tim Pope's surround.vim in evil, the extensible vim emulation layer for emacs
evil installed Evil is an extensible vi layer for Emacs. It emulates the main features of Vim, and provides facilities for writing custom extensions.
goto-chg installed Goto the point of the most recent edit in the buffer.
haskell-mode installed A Haskell editing mode
idris-mode installed Major mode for the Idris language
j-mode installed Emacs major mode for editing J code.
linum-relative installed Display relative line number in the left margin
undo-tree installed Treat undo history as a tree
我的 ~/.emacs.d/init.el 看起来像这样:
(add-to-list 'load-path "~/.emacs.d/")
(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories "~/.emacs.d//ac-dict")
(ac-config-default)
(setq mouse-wheel-scroll-amount '(1 ((shift) . 1)))
(setq mouse-wheel-progressive-speed nil)
(setq mouse-wheel-f 't)
(setq scroll-s 1)
(add-to-list 'load-path "~/.emacs.d/lojban")
(autoload 'lojban-parse-region "lojban" nil t)
(autoload 'lojban-mode "lojban-mode" nil t)
(add-to-list 'load-path "~/.emacs.d/el-get/el-get")
(unless (require 'el-get nil 'noerror)
(with-current-buffer
(url-retrieve-synchronously
"https://raw.github.com/dimitri/el-get/master/el-get-install.el")
(goto-char (point-max))
(eval-print-last-sexp)))
(add-to-list 'el-get-recipe-path "~/.emacs.d/el-get-user/recipes")
(el-get 'sync)
(add-to-list 'load-path "~/.emacs.d/j-mode/")
(autoload 'j-mode "j-mode.el" "Major mode for editing J files" t)
(add-to-list 'auto-mode-alist '("\\.ij[rstp]$" . j-mode))
;(custom-set-face
; '(j-verb-face ((t (:foreground "cornflower blue"))))
; '(j-adverb-face ((t (:foreground "goldenrod"))))
; '(j-conjunction-face ((t (:foreground "olive drab"))))
; '(j-other-face ((t (:foreground "Black")))))
(require 'evil-leader)
(global-evil-leader-mode)
(add-to-list 'load-path "~/.emacs.d/evil")
(require 'evil)
(evil-mode 1)
;(require 'lalopmak-evil)
(define-key evil-normal-state-map "," 'evil-ex)
(define-key evil-motion-state-map ":" 'evil-repeat-find-char-reverse)
(define-key evil-window-map "j" 'evil-window-left)
(define-key evil-window-map "J" 'evil-window-move-far-left)
(define-key evil-window-map "k" 'evil-window-down)
(define-key evil-window-map "K" 'evil-window-move-very-bottom)
(define-key evil-window-map "h" 'evil-window-up)
(define-key evil-window-map "H" 'evil-window-move-very-top)
(define-key evil-motion-state-map "j" 'evil-backward-char)
(define-key evil-motion-state-map "J" 'evil-window-top)
(define-key evil-motion-state-map "k" 'evil-next-line)
(define-key evil-motion-state-map "h" 'evil-previous-line)
(define-key evil-motion-state-map (kbd "C-n") 'evil-scroll-line-up)
(define-key evil-normal-state-map (kbd "M-x") 'execute-extended-command)
由于我使用的是 evil,并且 idris-mode 具有适用于 evil 的绑定,因此我尝试遵循 vim 的案例拆分示例。从新的会话开始,会发生以下情况:
- 我打开 vadd.idr 文件,该文件已经包含 3 行(其中 1 行是空白的)。
- 我移到最后一行并按
\d
。 - 我收到一条很长的错误消息,在我阅读之前它就消失了。
- Idris REPL 在新的拆分窗格中打开。
- 命令行(在窗口底部)显示
Buffer vadd.idr has no process
. 我还尝试了 REPL,在插入模式下输入。按回车后,我得到Buffer *idris-repl* has no process
,没有进一步的反应。
在 Linux shell 中,echo $PATH
生成/home/james/bin /home/james/.cabal/bin /home/james/bin /usr/local/sbin /usr/local/bin /usr/bin /usr/bin/vendor_perl /usr/bin/core_perl
,并按idris
预期从 shell 工作。
退出 emacs 时(通过几个ZZ
s),我被告知存在活动进程。这是我显示的进程列表:
Process Status Buffer TTY Command
idris run *idris-process* /dev/pts/3 idris --ideslave-socket
因为它可能已连接,所以这是我使用 idris-vim 从 vim 中的同一文件得到的错误:
:call IdrisReload(0)
"vadd.idr" 3L, 62C written
Uncaught error: connect: does not exist (Connection refused)
Press ENTER or type command to continue
我使用 ex 命令是因为领导绑定不起作用(我遇到的另一个问题)。
很抱歉提出这么长的问题。我想包括最相关的信息,即使这意味着添加不相关的东西。
编辑:更多;我找到了调试器(从菜单中设置“出错时输入调试器”)。
我按\d
,然后在缓冲区中看到这个:
Debugger entered--Lisp error: (file-error "make client process failed" "connection refused" :name "Idris Ideslave" :buffer "*idris-connection*" :host "127.0.0.1" :service 0 :nowait nil)
make-network-process(:name "Idris Ideslave" :buffer "*idris-connection*" :host "127.0.0.1" :service 0 :nowait nil)
open-network-stream("Idris Ideslave" "*idris-connection*" "127.0.0.1" 0)
idris-connect(0)
idris-process-filter(" ____ __ _ \n / _/___/ /____(_)____ \n / // __ / ___/ / ___/ Version 0.9.12\n _/ // /_/ / / / (__ ) http://www.idris-lang.org/ \n /___/\\__,_/_/ /_/____/ Type :? for help \n\n")
comint-output-filter(#<process idris> " ____ __ _ \n / _/___/ /____(_)____ \n / // __ / ___/ / ___/ Version 0.9.12\n _/ // /_/ / / / (__ ) http://www.idris-lang.org/ \n /___/\\__,_/_/ /_/____/ Type :? for help \n\n")
accept-process-output(#<process idris> 3)
idris-run()
idris-ensure-process-and-repl-buffer()
idris-load-file-sync()
idris-add-clause(nil)
call-interactively(idris-add-clause nil nil
并在 ex 命令行中看到
make client process failed: connection refused, :name, Idris Ideslave, :buffer, *idris-connection*, :host, 127.0.0.1, :service, 0, :nowait, nil
我不知道它想做什么。
编辑:这是 vadd.idr 的缓冲区状态行的右端(正确的术语?):
(Idris (Not loaded) ElDoc Ind Undo-Tree)
Not loaded
看起来很担心,但我不知道更多。
编辑:回到 Vim 问题,我跑了
$ vim -V9vimlog vadd.idr
:call IdrisReload(0)
ZZ
$ ack idris vimlog
日志中的所有内容看起来都很正常,直到最后(由错误引起):
Calling shell to execute: "(idris --check vadd.idr) &> /tmp/vbKELys/1"
Error detected while processing function <SNR>38_BufWritePostHook..<SNR>38_UpdateErrors..<SNR>38_CacheErrors..16..15..SyntaxCheckers_idris_idris_GetLocList..SyntasticMake:
Calling shell to execute: "(idris --client ':l /mnt/sda9/home/james/Documents/idris/vadd.idr') >/tmp/vbKELys/2 2>&1"
所以,我发现日志文件包括
Calling shell to execute: "(idris --check vadd.idr) &> /tmp/vbKELys/1"
Error detected while processing function <SNR>38_BufWritePostHook..<SNR>38_UpdateErrors..<SNR>38_CacheErrors..16..15..SyntaxCheckers_idris_idris_GetLocList..SyntasticMake:
line 66:
E380: At bottom of quickfix stack
error list 1 of 1; 1 errors
Calling shell to execute: "(idris --client ':l /mnt/sda9/home/james/Documents/idris/vadd.idr') >/tmp/vbKELys/2 2>&1"
Uncaught error: connect: does not exist (Connection refused)
从 shell 运行这些 shell 命令,我得到:
$ idris --check vadd.idr
$ idris --client ':l /mnt/sda9/home/james/Documents/idris/vadd.idr'
Uncaught error: connect: does not exist (Connection refused)
$ idris --client vadd.idr
Uncaught error: connect: does not exist (Connection refused)
顺便说一句, Plainidris vaddr.idr
可以正常工作。