Emacs equivalents of Vim's dd,o,O
For o
and O
, here are a few functions I wrote many years ago:
(defun vi-open-line-above ()
"Insert a newline above the current line and put point at beginning."
(interactive)
(unless (bolp)
(beginning-of-line))
(newline)
(forward-line -1)
(indent-according-to-mode))
(defun vi-open-line-below ()
"Insert a newline below the current line and put point at beginning."
(interactive)
(unless (eolp)
(end-of-line))
(newline-and-indent))
(defun vi-open-line (&optional abovep)
"Insert a newline below the current line and put point at beginning.
With a prefix argument, insert a newline above the current line."
(interactive "P")
(if abovep
(vi-open-line-above)
(vi-open-line-below)))
You can bind vi-open-line
to, say, M-insert as follows:
(define-key global-map [(meta insert)] 'vi-open-line)
For dd
, if you want the killed line to make it onto the kill ring, you can use this function that wraps kill-line
:
(defun kill-current-line (&optional n)
(interactive "p")
(save-excursion
(beginning-of-line)
(let ((kill-whole-line t))
(kill-line n))))
For completeness, it accepts a prefix argument and applies it to kill-line
, so that it can kill much more than the "current" line.
You might also look at the source for viper-mode
to see how it implements the equivalent dd
, o
, and O
commands.
C+e C+j
According to the emacs manual docs. That gets you a new line and indentation.
For dd, use "kill-whole-line", which is bound to "C-S-backspace" by default in recent versions of Emacs.
I should add that I myself use whole-line-or-region.el more often, since C-w
is easier to type than C-S-backspace
.