假设我想删除某些表达式周围的括号,例如我想打开 (not True)
.
- 按下
<backspace>
光标位于右括号后不会删除它,但光标会跳到括号内(运行shm/del
)。 - 按下
<delete>
当光标放在左括号上时,删除里面的所有内容,包括括号本身(运行delete-char
)。
字符串双引号分隔符、大括号、方括号也是如此,我相信还有其他东西。
在 SHM 中是否有一些预定义的函数来展开表达式?或者我应该使用一些手动键绑定(bind)/操作来覆盖此行为吗?
最佳答案
structured-haskell-mode
深受 paredit
的影响,这是它从中获取基本移动和编辑绑定(bind)的地方。您可以通过在 Emacs 帮助系统中查找它来查看 paredit
提供的命令(最简单的方法:打开 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
重新绑定(bind)到 haskell-indentation-delete-backward-char
之类的东西(或任何适合您的设置的东西)这样您就可以像以前一样删除结构字符。从一些实验来看,shm
似乎可以优雅地针对未正确解析的代码进行降级,因此这并不太不方便。
关于haskell - 结构化 Haskell 模式 [SHM] : How to delete single bracket or string quote by <backspace> or <del>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28369920/