Как переключить точку на предыдущую строку после ввода}?
Я работаю с emacs24 с cc-mode, я хочу знать, как сделать мой emacs более "умным". После того, как я введу}, он автоматически вставит новую строку и сделает отступ, как указано. Я хочу знать, как переключить точку на предыдущую строку. Например, когда я определяю функцию, теперь мое поведение emacs:
void f()
{
}
//point
"// точка" - это позиция курсора после ввода}. Но я хочу это:
void f()
{
//point
}
Я надеюсь, что положение курсора может переключиться на предыдущую строку и сделать отступ автоматически. Я знаю, что emacs может сделать это, но я не знаю, как это сделать, кто мне может помочь?
4 ответа
Я думаю, что вы после этих.. C-M-u
, C-M-d
, C-M-f
а также C-M-b
Немного потренируйтесь... Они являются глобальными и ведут себя контекстуально практически во всех режимах.
ОБНОВИТЬ:
ооо... кажется, что вы хотите поместить курсор автоматически.. на самом деле в более общих Emacs поможет вам не печатать }
совсем. Я имею в виду, что emacs может автоматически вставлять закрывающую пара
Есть встроенный режим одной электрической пары
сторонний autopair.el
Взгляните на системы шаблонов, такие как yasnippet: http://www.emacswiki.org/emacs/CategoryTemplates
Я не доверяю ничему электрическому, поэтому я написал эту функцию.
(defconst insert-logical-brackets-logical-bracket-begin "{")
(defconst insert-logical-brackets-logical-bracket-end "}")
(defconst insert-logical-brackets-default-style 0)
(make-variable-buffer-local 'logical-bracket-begin)
(make-variable-buffer-local 'logical-bracket-end)
(make-variable-buffer-local 'insert-logical-brackets-default-style)
(defun insert-logical-brackets(&optional style)
"If STYLE = 0(default, according to `insert-logical-brackets-default-style' value), make a newline before opening bracket, if line is not empty. Make a newline after closing bracket, if there is something after this bracket. Make two newlines in the middle.
If STYLE = 1, don't make newlines before opening a bracket(one of c styles).
If STYLE = 2, don't make newlines before opening and after closing bracket.
If STYLE = 3, allways make all newlines.
If STYLE is not nil, don't make newlines between brackets(still makes before/after lines)."
(interactive "P")
(when (eq style nil)
(setq style insert-logical-brackets-default-style))
(funcall indent-line-function)
(unless (or (eq 1 style) (eq 2 style))
(when (or (/= (point) (save-excursion (back-to-indentation) (point))) (eq 3 style))
(newline)
(funcall indent-line-function)))
(unless (and (integerp style) (= 2 style))
(when (or (not (looking-at "\n")) (eq 3 style))
(newline)
(funcall indent-line-function)
(forward-line -1)
(goto-char (point-at-eol))))
(insert logical-bracket-begin)
(funcall indent-line-function)
(let ((return-point (point)))
(when (or (not style) (or (eq 0 style) (eq 1 style) (eq 2 style) (eq 3 style)))
(newline)
(funcall indent-line-function)
(setq return-point (point))
(newline))
(insert logical-bracket-end)
(funcall indent-line-function)
(goto-char return-point)))