Команда Emacs для вставки и отступа строки над курсором - PullRequest
11 голосов
/ 07 марта 2009

Я часто нахожу себя печатающим в строке, когда я понимаю, что мне нужно (ed) определение переменной (или что-то подобное) в строке выше. То, что я хотел бы, чтобы

  1. нажмите клавишу C-return из любой точки строки и переместите курсор на вновь вставленную пустую строку выше с правильным отступом (или, по крайней мере, таким же, как исходная строка).
  2. иметь возможность дергать любой текст ...
  3. и C-u C-space для возврата в исходное положение

Мне удалось сделать # 1, но мой emacs-fu не достаточно силен, чтобы сделать все остальное.

Ответы [ 3 ]

8 голосов
/ 09 марта 2009

Вот мое скромное решение:

(defun my-insert-before-line ()
  (interactive)
  (save-excursion
    (beginning-of-line)
    ; I've changed the order of (yank) and (indent-according-to-mode)
    ; in order to handle the case when yanked line comes with its own indent
    (yank)(indent-according-to-mode)
    ; could be as well changed to simple (newline) it's metter of taste
    ; and of usage
    (newline-and-indent)))

Надеюсь, это поможет.

3 голосов
/ 08 марта 2009

Вероятно, дурной ответ на мой собственный вопрос, но ответ Cheeso побудил меня заняться программированием на lisp второй раз за десять лет (моей оригинальной версией был именованный макрос клавиатуры, но он перешагнул через kill / mark-rings ). Вот что я придумал

(defun insert-and-indent-line-above ()
  (interactive)
  (push-mark)
  (let* 
    ((ipt (progn (back-to-indentation) (point)))
     (bol (progn (move-beginning-of-line 1) (point)))
     (indent (buffer-substring bol ipt)))
    (newline)
    (previous-line)
    (insert indent)))

(global-set-key [ (control return) ] 'insert-and-indent-line-above)

вероятно, есть много лучших способов сделать это, но два часа хакерских взломов вряд ли можно назвать потерянным временем: -)

3 голосов
/ 07 марта 2009

Вот что вы можете сделать, если вы не являетесь мастером дзен-мастера Emacs.

В Emacs есть запись-макрос, kmacro-start-macro и kmacro-end-macro.

После записи макроса выполните name-last-kbd-macro. затем зайдите в .emacs и выполните insert-kbd-macro.

Затем у вас есть оператор fset, который определяет ваш макрос. Это может выглядеть смешно, и это не так легко обслуживать, как elisp, но если вы добавите его в свой .emacs, этот макрос (с таким именем) будет доступен для любого из ваших сеансов редактирования. И вы можете связать его с последовательностью клавиш.

...