结构化Haskell模式[SHM]:如何通过<backspace>或<del>删除单括号或字符串引号?
Structured Haskell Mode [SHM]: How to delete single bracket or string quote by <backspace> or <del>?
假设我想删除某些表达式周围的括号,例如我想打开 (not True)
.
- 在光标紧跟在右括号后按
<backspace>
不会删除它,但光标会跳到括号内(运行 shm/del
)。
- 当光标放在左括号上时按
<delete>
会删除里面的所有内容,包括括号本身(运行 delete-char
)。
字符串双引号分隔符、大括号、方括号也是如此,我相信还有其他东西。
在 SHM 中是否有一些预定义的函数来展开表达式?或者我应该用一些手动键覆盖此行为 bindings/actions?
structured-haskell-mode
深受 paredit
的影响,这是它获得基本移动和编辑绑定的地方。您可以通过在 Emacs 帮助系统中查找(最简单的方法:打开 lisp 缓冲区,启用 paredit,C-h m
)或使用此 handy cheatsheet(其中看起来很合理,但我没读过)。
此外,这个 video introduction 到 paredit
for Lisp 可能值得一看。
对于您的具体问题:M-s
删除当前的嵌套级别。在 paredit
中,这适用于圆括号、方括号或引号,但目前看来 shm 仅支持圆括号。您可以在表达式内的任何位置调用它:
((a |b c) d e f)
M-s
(a b c d e f)
编辑:正如@ReinHenrichs 指出的那样,在使用 M-s
删除周围的括号之前,您必须使用 M-a
将选择范围扩展到整个节点,这就是它不起作用的原因早点给我。
与此同时,一个不错的解决方法是将 DEL
重新绑定到 haskell-indentation-delete-backward-char
之类的东西(或任何适合您的设置的东西),以便您可以像以前一样删除结构字符。从一些实验来看,shm
似乎可以优雅地针对未正确解析的代码进行降级,因此这并不太不方便。
将此键绑定放入您的 emacs
配置文件中:
(global-set-key (kbd "C-c C-d") 'delete-pair)
现在您可以将点放在对的开始部分(括号、方括号、引号等)之前,或者在 SHM 中使用 M-a
转到下一个外部对并按 C-c C-d
删除对。
假设我想删除某些表达式周围的括号,例如我想打开 (not True)
.
- 在光标紧跟在右括号后按
<backspace>
不会删除它,但光标会跳到括号内(运行shm/del
)。 - 当光标放在左括号上时按
<delete>
会删除里面的所有内容,包括括号本身(运行delete-char
)。
字符串双引号分隔符、大括号、方括号也是如此,我相信还有其他东西。
在 SHM 中是否有一些预定义的函数来展开表达式?或者我应该用一些手动键覆盖此行为 bindings/actions?
structured-haskell-mode
深受 paredit
的影响,这是它获得基本移动和编辑绑定的地方。您可以通过在 Emacs 帮助系统中查找(最简单的方法:打开 lisp 缓冲区,启用 paredit,C-h m
)或使用此 handy cheatsheet(其中看起来很合理,但我没读过)。
此外,这个 video introduction 到 paredit
for Lisp 可能值得一看。
对于您的具体问题:M-s
删除当前的嵌套级别。在 paredit
中,这适用于圆括号、方括号或引号,但目前看来 shm 仅支持圆括号。您可以在表达式内的任何位置调用它:
((a |b c) d e f)
M-s
(a b c d e f)
编辑:正如@ReinHenrichs 指出的那样,在使用 M-s
删除周围的括号之前,您必须使用 M-a
将选择范围扩展到整个节点,这就是它不起作用的原因早点给我。
与此同时,一个不错的解决方法是将 DEL
重新绑定到 haskell-indentation-delete-backward-char
之类的东西(或任何适合您的设置的东西),以便您可以像以前一样删除结构字符。从一些实验来看,shm
似乎可以优雅地针对未正确解析的代码进行降级,因此这并不太不方便。
将此键绑定放入您的 emacs
配置文件中:
(global-set-key (kbd "C-c C-d") 'delete-pair)
现在您可以将点放在对的开始部分(括号、方括号、引号等)之前,或者在 SHM 中使用 M-a
转到下一个外部对并按 C-c C-d
删除对。