emacs - 在 Emacs Paredit 中交换括号和方括号

标签 emacs elisp paredit

如何在 paredit 模式下定义交换括号和方括号的命令?

最佳答案

所以任务是转这个,例如:

(blah
 (a (b)
    c))

进入这个:
(blah
 [a (b)
    c])

使用 paredit 模式,移动到表达式的开头 (a ..)进而:
C-M-SPC [ <right> M-s

没有 paredit,但仍希望在转换期间保持平衡的 parens,移至 a然后按 C-M-SPC多次直到出错,然后(假设 CUA 模式打开):
C-x <timeout> <right> <backspace> <backspace> [ ] <left> C-v

嗯,这很复杂,所以让我们坚持使用 paredit 模式版本,并尝试从中创建一个命令。键盘宏编辑器会告诉您正在使用的命令的名称,因此您至少可以想出以下代码:
(defun my-switch-to-square ()
  "Change (..) to [..]."
  (interactive)
  (mark-sexp --)
  (paredit-open-square --)
  (right-char --)
  (paredit-splice-sexp --))
--表示我们尚未决定的部分代码。阅读代码中每个函数的文档后,您将了解要传递哪些参数,并且无需调用 mark-sexp .重写文档字符串并添加对 left-char 的调用后,你最终得到的代码是:
(defun my-switch-to-square ()
  "Change |(..) to |[..]. | is point position."
  (interactive)
  (paredit-open-square 1)
  (right-char 1)
  (paredit-splice-sexp)
  (left-char 1))

关于emacs - 在 Emacs Paredit 中交换括号和方括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14213173/

相关文章:

Emacs:在 idlwave 主要模式下禁用自动填充次要模式

emacs - emacs cider/paredit/clojure-mode 中的缩进配置

javascript - emacs paredit - 如何删除引号

emacs - 在第一个表达时如何避免多余的空格字符

emacs - 无法更改 Emacs 在 HTML 标签之间的默认缩进

Emacs 子字模式不工作

emacs - 为什么 g++ 不覆盖可执行文件

emacs - emacs lisp 中 nconc 的奇怪行为

emacs - 为什么 add-hook 允许 `hook' 无效?

emacs - 如何重构 Clojure 源代码?