在Emacs中编写Haskell代码时,我经常会遇到这样的情况:
(foo, [])
到
([], foo)
如果Emacs将[]
识别为一个单词,那么我可以使用M-t
到transpose-words
并将它们转换。是否有可能在不破坏其他功能的情况下做到这一点?
需要C-M-t
,它运行transpose-sexps
命令。
从C-M-
开始有相当多的命令运行s-exp命令,而不是类似的基于单词的命令,如C-M-f
/C-M-b
,通过s-exp向前/向后。
还有,Emacs堆栈交换在Emacs . se .
(defun my-transpose-function-args ()
"Assumes to be called between arguments. "
(interactive "*")
(let* ((orig (point))
(end1 (progn (skip-chars-backward " trnf,")
(point)))
(beg1
(progn
(skip-chars-backward "^ trnf,(")
(point)))
(string1 (buffer-substring beg1 end1))
(beg2 (copy-marker
(progn (goto-char orig)
(skip-chars-forward " trnf")
(point))))
(end2 (copy-marker
(progn (skip-chars-forward "^ trnf,)")
(point))))
(string2 (buffer-substring beg2 end2)))
(goto-char beg1)
(delete-region beg1 end1)
(insert string2)
(goto-char beg2)
(delete-region beg2 end2)
(insert string1)))