Kar*_*arl 15 emacs haskell elisp alignment
我在Haskell工作,经常遇到类似以下的代码:
func i j | i == j = i
| otherwise = j
Run Code Online (Sandbox Code Playgroud)
我想使用align-regexp对齐'='字符,但没有elisp技巧.我试过只做"="而没有引号,但这会在每个'='之前插入一个不需要的空格字符.我在这里找到了一个建议的解决方案,但我似乎无法做任何事情.
请帮我写一个函数或硬编码的宏,这将允许我为此设置一个键绑定.
phi*_*ils 18
C-u M-x align-regexp RET \(\s-*\) = RET 1 RET 0 RET n
(在'='之后有一个空格,但不是很明显.)
这就是说......
使用前缀参数告诉align-regexp您要求您提供比默认情况下更多的参数.
查看C-h f align-regexp并C-h v align-rules-list了解详情,但简而言之:
\(\s-*\)是删除/扩展的默认"组".我们将我们的模式添加到结尾:'='.(注意,这\s-是用于空白的Emacs regexp语法.)
1简单地指括号组1(如上所述).这是默认值.
0用于在线的两个部分之间使用的间距.默认情况下,这是1,这就是您最终获得额外空间的原因.
n 在每行中的第一个之后不对齐任何后续模式匹配.
编辑:实际上,你链接到的Q&A几乎相同,在Emacs 23.2.1上对我来说很好,所以这是重复的,但要继续并回答键绑定方面:
您可以通过键盘宏绑定该(或任何)序列.这是最终结果,您可以将其添加到您的init文件中,但我建议您自己完成此过程.使用任何你喜欢的代替C-c a钥匙.C-c (letter)并且F5-F9保留给最终用户随意绑定,因此其中一个将不会被模式的键映射破坏.
(global-set-key (kbd "C-c a") (lambda (&optional arg) "Keyboard macro." (interactive "p") (kmacro-exec-ring-item (quote ([21 134217848 97 108 105 103 110 45 114 101 103 101 120 112 return 32 61 32 return return backspace 48 return 110] 0 "%d")) arg)))
Run Code Online (Sandbox Code Playgroud)
我是这样做的:
align-regexp上述操作(小心地逐字键入所有内容,而不是使用迷你缓冲区历史记录或yanking).1align-single-equals RET 给宏命名insert-kbd-macro RET align-single-equals RET 获得口齿不清(lambda)表达式包装表达式(global-set-key)来绑定它.(尽管您也可以使用(fset 'align-single-equals ...)提供的代码,然后将密钥绑定到该符号.1如果在录制复杂的宏时出错,请不要担心 - Emacs提供了一个非常好的宏编辑器,您可以使用它来修复完成录制后的任何错误(只需键入C-x C-k e),这样您就不需要完美了.
编辑2:也可以根据评论添加一个函数示例.
(defun my-align-single-equals ()
"Align on a single equals sign (with a space either side)."
(interactive)
(align-regexp
(region-beginning) (region-end)
"\\(\\s-*\\) = " 1 0 nil))
(global-set-key (kbd "C-c a") 'my-align-single-equals)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1547 次 |
| 最近记录: |