如Sublime Text中那样转置两个单词

sha*_*kra 3 emacs emacs24 sublimetext2

我正在观看一个Django的在线课程,老师在Sublime Text中用一个列表的两个值做了一个很好的技巧,它将每个值转换到另一个的位置,例如:

list = ("foo", "bar", "hello")
Run Code Online (Sandbox Code Playgroud)

标记foobar用鼠标然后进行转置,得到以下内容:

list = ("bar", "foo", "hello")
Run Code Online (Sandbox Code Playgroud)

如何在Emacs中实现?

its*_*eyd 7

正如@artscan所说,你正在寻找的命令是transpose-words.它M-t默认是绑定的.它在没有区域的情况下工作(即,您不必"标记"任何东西以使其工作).要转置foobar,指向可以是以下任何字符:

oo", "b

把点之前,他们将转listfoo; 把它放在他们之后将转置barhello.

用于转置其他文本单元的相关命令及其默认键绑定(如果有):

  • transpose-chars(C-t)

  • transpose-lines(C-x C-t)

  • transpose-paragraphs

  • transpose-sentences

  • transpose-sexps(C-M-t)

超越内置

如果要通过单次击键转置不相邻的单词(例如,foohello),则可以定义键盘宏或自定义命令并将其绑定到键:

(defun hop-one-transpose ()
  "Transpose words that are separated by a single word."
  (interactive)
  (transpose-words 2)
  (backward-word 3)
  (forward-char)
  (transpose-words 1))

(global-set-key (kbd "C-x M-t") 'hop-one-transpose)
Run Code Online (Sandbox Code Playgroud)

附录:让Emacs帮助您发现Emacs

如果您发现自己想知道Emacs是否有针对某种类型的操作的命令,请尝试使用command-apropos以查找它:

C-h a <action> RET