В vim я могу сделать это в командном режиме, набрав 'o', что добавит новую строку под курсором и войдет в режим вставки.
Есть ли эквивалент в Emacs?
В vim я могу сделать это в командном режиме, набрав 'o', что добавит новую строку под курсором и войдет в режим вставки.
Есть ли эквивалент в Emacs?
Команда C-o open-line
, которую предложили другие, не совсем такая же, как o в vi, поскольку она разделяет текущую строку и позволяет курсору оставаться в текущей строке.
Вы получаете тот же эффект, что и vi o, с двумя штрихами: C-e RET, который перемещает курсор в конец текущей строки, а затем вставляет новую строку, которая оставляет курсор в начале этой строки.
Вы можете связать эту последовательность с собственным ключом (возможно, переопределив существующее определение C-o), но я сомневаюсь, что это стоит проблемы.
(Кстати, симметричная последовательность C-a RET дает вам эффект капитала vi o, вставляя строку перед текущей строкой.)
Вы решили свою проблему?
Я просто решил эту проблему. Не стесняйтесь использовать этот код:)
Вы можете привязать к каждой клавише, которая вам нравится в global-set-key
, а также заменить newline-and-indent
на newline
в случае, вам не понравится новая строка отступа.
;; newline-without-break-of-line
(defun newline-without-break-of-line ()
"1. move to end of the line.
2. insert newline with index"
(interactive)
(let ((oldpos (point)))
(end-of-line)
(newline-and-indent)))
(global-set-key (kbd "<C-return>") 'newline-without-break-of-line)
Я использую prelude, а S-RET эквивалентно vi o, а C-S-RET эквивалентно vi o.
Попробуйте C-o, он введет новую строку, где находится курсор, и оставьте курсор на линии.
C-o будет запускать open-line
, который вставляет пустую строку после курсора. По умолчанию emacs уже находится в режиме "вставки", если только вы не находитесь в буфере только для чтения.
Эта конфигурация может помочь:
(defun newline-without-break-of-line ()
"1. move to end of the line.
2. open new line and move to new line"
(interactive)
(end-of-line)
(open-line 1)
(right-char))
(global-set-key (kbd "<M-return>") 'newline-without-break-of-line)
Я использую следующие привязки клавиш, которые схожи с vim o и O:
<pre>
;; vi-like line insertion
(global-set-key (kbd "C-o") (lambda () (interactive)(beginning-of-line)(open-line 1)))
(global-set-key (kbd "M-o") (lambda () (interactive)(end-of-line)(newline)))
</pre>
Я использую emacs 25
, и у меня есть что-то вроде этого:
;; Insert new line below current line
;; and move cursor to new line
;; it will also indent newline
(global-set-key (kbd "<C-return>") (lambda ()
(interactive)
(end-of-line)
(newline-and-indent)))
;; Insert new line above current line
;; and move cursor to previous line (newly inserted line)
;; it will also indent newline
;; TODO: right now I am unable to goto previous line, FIXIT
(global-set-key (kbd "<C-S-return>") (lambda ()
(interactive)
(beginning-of-line)
(newline-and-indent)
(previous-line)))
Надеюсь, это поможет:)