Emacs 如何在不中断当前行的情况下添加新行?

Emacs 如何在不中断当前行的情况下添加新行?,emacs,Emacs,在vim中,我可以在命令模式下通过键入“o”来完成此操作,这将在光标下方添加新行,并进入插入模式 emacs中是否有等效项?C-o将运行,它将在光标后插入一个空行。默认情况下,emacs已经处于“插入模式”,除非您处于只读缓冲区中。其他人建议的命令C-oopen line与vi中的o不完全相同,因为它会分割当前行,并让光标保留在当前行中 使用两个笔划可以获得与vi的o完全相同的效果:C-e RET,它将光标移动到当前行的末尾,然后插入新行,将光标保留在该行的开头 您可以将该序列绑定到它自己的键上

在vim中,我可以在命令模式下通过键入“o”来完成此操作,这将在光标下方添加新行,并进入插入模式

emacs中是否有等效项?

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

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

使用两个笔划可以获得与vi的o完全相同的效果:C-e RET,它将光标移动到当前行的末尾,然后插入新行,将光标保留在该行的开头

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


(顺便说一句,对称序列C-a RET给了你vi的大写字母O的效果,在当前行之前插入一行。)

你的问题解决了吗

我刚刚解决了这个问题。请随意使用此代码:) 您可以绑定到
全局设置键中您喜欢的每个键,也可以将
换行和缩进
替换为
换行
,以防您不喜欢缩进新行

;; 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)
;;换行不换行
(取消换行,不换行()
“1.移动到行的末尾。
2.插入带索引的换行符“
(互动)
(let((oldpos(point)))
(行尾)
(换行和缩进)
(全局设置键(kbd“”)'换行,不换行)

我正在使用prelude,S-RET相当于vi的o,C-S-RET相当于vi的o。

此配置可以帮助:

(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.移动到行的末尾。
2.打开新行并移动到新行“
(互动)
(行尾)
(开放式第1行)
(右半部分)
(全局设置键(kbd“”)'换行,不换行)

我使用以下键绑定使其工作方式与vim的o和o类似:


;; 类vi行插入
(全局设置键(kbd“C-o”)(lambda()(交互式)(行的开头)(开放行1)))
(全局设置键(kbd“M-o”)(lambda()(交互式)(行尾)(换行符)))

我使用的是
emacs 25
,我有这样的东西:

;; 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)
                       ))
;;在当前行下方插入新行
;; 并将光标移动到新行
;; 它还将缩进换行符
(全局设置键(kbd“”)(lambda()
(互动)
(行尾)
(换行和缩进)
;; 在当前行上方插入新行
;; 并将光标移动到上一行(新插入的行)
;; 它还将缩进换行符
;; TODO:现在我无法转到上一行,请修复
(全局设置键(kbd“”)(lambda()
(互动)
(行首)
(换行和缩进)
(上一行)

希望有帮助:)

我正在使用Emacs 24。请在“Emacs文件中插入该行

;;将光标移动到当前行的末尾
;; 在当前行下方插入新行
;; 它还将缩进换行符
(全局设置键(kbd“”)(lambda()
(互动)
(行尾)
(换行和缩进)
;; 将光标移到上一行
;; 走到队伍的尽头
;; 在当前行下方插入新行(因此它实际上会在缩进上方插入新行)
;; 它还将缩进换行符
(全局设置键(kbd“”)(lambda()
(互动)
(上一行)
(行尾)
(换行和缩进)
))
  • 这意味着下面新行的

  • 对于上面的新行,这意味着

    两者也将缩进。我希望它能起作用


这就是emacs的优点:通过省略它,你可以实现你想要的一切。没有限制也没有约束。您可以制作适合您的emacs,因为它是高度可定制的!我只是偶尔在vi中发现这把伟大的钥匙,我确信绑定到C-o是值得的。我想知道,为什么我以前没有想到要这么做。更好的命令是
C-e C-o
,因为如果启用自动填充模式,这将避免包装当前行。更好的是:
M-M C-o
,它可以保持缩进。
;; 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)))
;; 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)
                       ))