当我在emacs lisp中缩进if-then-else构造时,else块不会正确缩进.我得到的是:
(defun swank-clojure-decygwinify (path)
"Convert path from CYGWIN UNIX style to Windows style"
(if (swank-clojure-cygwin)
(replace-regexp-in-string "\n" "" (shell-command-to-string (concat "cygpath -w " path)))
(path)))
其他形式没有缩进到与当时形式相同的级别.有没有明显的方法来解决这个问题?
Boz*_*sov 17
这是适当的缩进.手册中的引用:
"else"这个词不是用Lisp代码写的; "if"表达式的else部分位于then-part之后.在编写的Lisp中,else-part通常被编写为从它自己的一行开始,并且比当前部分缩进:
(if TRUE-OR-FALSE-TEST
ACTION-TO-CARRY-OUT-IF-THE-TEST-RETURNS-TRUE
ACTION-TO-CARRY-OUT-IF-THE-TEST-RETURNS-FALSE)
Run Code Online (Sandbox Code Playgroud)
例如,以下if表达式4 is
not greater than 5!以通常的方式计算消息时打印消息:
(if (> 4 5) ; if-part
(message "4 falsely greater than 5!") ; then-part
(message "4 is not greater than 5!")) ; else-part
Run Code Online (Sandbox Code Playgroud)
请注意,不同级别的缩进可以轻松区分then-part和else-part.(GNU Emacs有几个命令可以自动缩进if表达式.*注意GNU Emacs帮助您键入列表:键入列表.)
这是一个功能,而不是一个bug :-)
我没有方便的相关文档,但这似乎做你想要的:
(put 'if 'lisp-indent-function nil)
Run Code Online (Sandbox Code Playgroud)
另外,你误用了"正确"这个词; 根据定义,但emacs缩进是"正确的":)
默认样式是正确的 - 对于Emacs Lisp.对于Common Lisp和其他类型的Lisp,"else"子句应该在"then"子句下面对齐.要获得Common Lisp的修正,你必须做这样的事情:
(set (make-local-variable lisp-indent-function)
'common-lisp-indent-function)
Run Code Online (Sandbox Code Playgroud)
要自动执行此操作,您可以执行以下操作:
(add-hook 'lisp-mode-hook
'(lambda ()
(set (make-local-variable lisp-indent-function)
'common-lisp-indent-function))))
Run Code Online (Sandbox Code Playgroud)
但请注意,Lisp-Emacs交互包(如Slime)可能会覆盖缩进行为,在这种情况下,上述操作可能无效.以上应该在基本的Emacs中工作.
| 归档时间: |
|
| 查看次数: |
2118 次 |
| 最近记录: |