转置非单词函数参数



在Emacs中编写Haskell代码时,我经常会遇到这样的情况:

(foo, [])

([], foo)

如果Emacs将[]识别为一个单词,那么我可以使用M-ttranspose-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)))

最新更新