выберите строку для ее перемещения с помощью emacs

Мне нравится TextMate, который может выбрать строку для ее перемещения простым нажатием клавиши.

Command-shift L (select a line) 
Control-Command Arrow(up and down) (move the selected line)

Как я могу сделать то же самое с Emacs?

5 ответов


Итак, пользователь, Sanityinc разработан move-text.el (выписка из basic-edit-toolkit.el-by emakswiki regular, Andy Stewart (lazycat))

посмотреть: перемещение линии / области вверх и вниз в emacs

это делает эту задачу очень хорошо...

M-Up или M-Down для перемещения текущей строки (или целых строк отмеченной области.)

Я добавил его в http://www.emacswiki.org/emacs/MoveText

отредактируйте привязки внизу в соответствии с вашими предпочтениями.


Я просто удаляю строку, а затем возвращаю ее в новое место. C-a C-k C-k (переместить в новое место) C-y


move-line делает это, за исключением выделения, которое должно быть достаточно легко добавить.


стандартная команда C-x C-t привязана к transpose-lines. Это полезно для транспортировать линии через взаимообмен в немного путей.

наиболее очевидным является то, что обменивается линией, в которой точка находится с предыдущей линией.

С аргументом 0 (т. е. M-0 C-x C-t) он меняет местами линию, в которой есть метка, с линией, в которой есть точка.


bbatsov это прелюдия (своего рода стартовый комплект Emacs) включает в себя эту функциональность (см. этот фрагмент кода):

(defun prelude-move-line-up ()
  "Move the current line up."
  (interactive)
  (transpose-lines 1)
  (forward-line -2)
  (indent-according-to-mode))

и связывает его с M-S-up и M-s-down.