在等号(或其他)符号的两侧转置文本

transpose text on two sides of an equals (or other) sign

我有一堆形式的文本

grid = par1.grid;
M3d = par1.M3d;
alpha = par1.alpha;
gamma = par1.gamma;

我想调换每一行,这样等号右边的内容现在就在等号左边,反之亦然。所以上面的文字看起来如下。

par1.grid = grid;
par1.M3d = M3d;
par1.alpha = alpha;
par1.gamma = gamma;

有没有在 emacs 中执行此操作的简单方法?我已经想出如何转置单词,但这似乎不是我想要的。

编辑:我在 matlab 模式下。

修改=的语法条目,使其不是符号成分或单词成分。假设 . 是一个符号成分或一个单词成分,而 ; 不是,就像在 Emacs-Lisp 模式中一样,那么您可以只使用 C-M-t (转置 sexps)之前的点(或之后) =.

例如,在 Emacs-Lisp 模式下,在 = 之前尝试 C-M-t,然后评估此:

(modify-syntax-entry ?= ".")

在任何模式下(假设至少字母具有单词构成语法):

 (modify-syntax-entry ?=  ".") ; `=' is punctuation
 (modify-syntax-entry ?\; ".") ; `;' is punctuation
 (modify-syntax-entry ?.  "_") ; `.' is a symbol char

使用 C-M-% (a.k.a.M-x query-replace-regexp) 与正则表达式 \(.*\) = \(.*\); 和替换 = ;.

答案取决于您正在编辑的主要模式:如果您的主要模式使用 SMIE 进行缩进,那么 C-M-t(在 = 符号上加上点)应该可以解决问题。