如何在不破坏当前行的情况下添加新行?

时间:2011-05-05 13:26:05

标签: emacs

在vim中,我可以通过输入'o'在命令模式下执行此操作,这将在光标下方添加一个新行,并进入插入模式。

emacs中是否有相同的内容?

非常感谢。

9 个答案:

答案 0 :(得分:34)

其他人建议的命令 Co open-line与vi中的 o 不完全相同,因为它会拆分当前行并让光标保持不变在当前行。

你得到与vi的 o 完全相同的效果,有两个笔划: Ce RET ,它将光标移动到当前的末尾然后插入一个新行,将光标留在该行的开头。

您可以将该序列绑定到它自己的键(可能会覆盖 C-o 的现有定义),但我怀疑它是否值得这么麻烦。

(顺便提一下,对称序列 Ca RET 给你vi的大写 O 的影响,在之前插入一行 em>当前行。)

答案 1 :(得分:19)

你解决了问题吗?

我刚刚解决了这个问题。随意使用此代码:) 您可以<{> 1}} 绑定到您喜欢的每个键,也可以global-set-key替换newline-and-indent 以防 比如要缩进的新行。

newline

答案 2 :(得分:7)

我正在使用前奏, S-RET 相当于vi的 o CS-RET 相当于vi的 O

答案 3 :(得分:2)

尝试 C-o ,它会在光标所在位置插入一个新行,并将光标留在该行上。

答案 4 :(得分:1)

C-o 将运行open-line,这将在光标后插入一个空行。默认情况下,emacs已处于“插入模式”,除非您处于只读缓冲区中。

答案 5 :(得分:1)

此配置可能有所帮助:

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

答案 6 :(得分:1)

我使用以下键绑定使其工作类似于vim&#39; s 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>

答案 7 :(得分:1)

我正在使用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)))

希望它会有所帮助:)

答案 8 :(得分:0)

我正在使用Emacs24。将行插入“。 emacs ”文件。

;; Move cursor to end of current line
;; Insert new line below current line
;; it will also indent newline
(global-set-key (kbd "<C-return>") (lambda ()
                   (interactive)
                   (end-of-line)
                   (newline-and-indent)))

;; Move cursor to previous line 
;; Go to end of the line
;; Insert new line below current line (So it actually insert new line above with indentation)
;; it will also indent newline
(global-set-key (kbd "<C-S-return>") (lambda ()
                       (interactive)
                       (previous-line)
                       (end-of-line)
                       (newline-and-indent)
                       ))
  • <C + Return> 表示下面的新行
  • <Ctrl + Enter>

  • <C + S + Return> ,这表示上方新行 <Ctrl + Shift + Enter>

    两者都会缩进。我希望它能起作用。