Как добавить новую строку, не прерывая текущую строку? - PullRequest
32 голосов
/ 05 мая 2011

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

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

Ответы [ 8 ]

37 голосов
/ 16 декабря 2011

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

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

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

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

20 голосов
/ 07 января 2013

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

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

Я использую прелюдию, и S-RET эквивалентно vi's o , а CS-RET эквивалентно vi's O .

1 голос
/ 09 января 2017

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

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

1 голос
/ 05 апреля 2016

Я использую следующие привязки клавиш, чтобы они работали аналогично o и O vim:

<code><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)))
1 голос
/ 05 апреля 2016

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

(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)
1 голос
/ 12 декабря 2011

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

1 голос
/ 05 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...