haskell - 结构化 Haskell 模式 [SHM] : How to delete single bracket or string quote by <backspace> or <del>?

标签 haskell plugins emacs key-bindings

假设我想删除某些表达式周围的括号,例如我想打开 (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/

相关文章:

Haskell 将整数转换为 Int?

c# - Unity3d C++ 插件

javascript - JQuery facebook 订阅插件鼠标事件

haskell - 错误类型类的使用

haskell - 使用堆栈和自定义选项构建Docker容器

c# - .NET 程序集插件安全

emacs - 在特定窗口中从 dired 打开文件

emacs - 如何在emacs中打印所有定义的变量?

github - 如何让 github 在 README.org 文件中显示内联数学

haskell - 使用 haskell monad 理解作用域