Подтвердить что ты не робот

Как добавить новую строку без нарушения текущей строки?

В vim я могу сделать это в командном режиме, набрав 'o', что добавит новую строку под курсором и войдет в режим вставки.

Есть ли эквивалент в Emacs?

4b9b3361

Ответ 1

Команда C-o open-line, которую предложили другие, не совсем такая же, как o в vi, поскольку она разделяет текущую строку и позволяет курсору оставаться в текущей строке.

Вы получаете тот же эффект, что и vi o, с двумя штрихами: C-e RET, который перемещает курсор в конец текущей строки, а затем вставляет новую строку, которая оставляет курсор в начале этой строки.

Вы можете связать эту последовательность с собственным ключом (возможно, переопределив существующее определение C-o), но я сомневаюсь, что это стоит проблемы.

(Кстати, симметричная последовательность C-a RET дает вам эффект капитала vi o, вставляя строку перед текущей строкой.)

Ответ 2

Вы решили свою проблему?

Я просто решил эту проблему. Не стесняйтесь использовать этот код:) Вы можете привязать к каждой клавише, которая вам нравится в 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)

Ответ 3

Я использую prelude, а S-RET эквивалентно vi o, а C-S-RET эквивалентно vi o.

Ответ 4

Попробуйте C-o, он введет новую строку, где находится курсор, и оставьте курсор на линии.

Ответ 5

C-o будет запускать open-line, который вставляет пустую строку после курсора. По умолчанию emacs уже находится в режиме "вставки", если только вы не находитесь в буфере только для чтения.

Ответ 6

Эта конфигурация может помочь:

(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)

Ответ 7

Я использую следующие привязки клавиш, которые схожи с 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>

Ответ 8

Я использую 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)))

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