我目前正在玩emacs,对其中的大部分概念都很满意。但我真的很喜欢这三个vim命令的便利性:dd,o,O希望你能告诉我如何在emacs中镜像它们:)
dd-删除整行,包括新行,无论光标在哪里。
我找到了类似的东西来做这个把戏:
C-a C-k C-k
当C-a
将光标移动到行首时,第一个C-k
删除文本,第二个删除换行符。唯一的问题是,这在空行上不起作用,我只需要键入C-k
,这是相当不方便的,因为我必须对同一任务使用不同的命令:删除一行。
o / O-在光标下方/上方创建一个新的空行,并将光标移动到新行,正确缩进
C-a C-o
与O
非常相似,只是缺少标识。C-e C-o
在当前行下方创建一个空行,但不移动光标。
有没有更好的解决方案来解决我的问题,或者我必须学习Lisp并定义新的命令来满足我的需要?
8条答案
按热度按时间thigvfpy1#
对于
o
和O
,下面是我多年前编写的几个函数:您可以将
vi-open-line
绑定到 M-insert,如下所示:对于
dd
,如果您希望删除的行进入删除环,可以使用以下函数 Packagekill-line
:为了完整起见,它接受一个前缀参数,并将其应用于
kill-line
,这样它可以删除比“当前”行更多的内容。您还可以查看
viper-mode
的源代码,以了解它如何实现等效的dd
、o
和O
命令。jq6vz3qz2#
根据the emacs manual docs。这会得到一个新行和缩进。
zu0ti5jz3#
对于dd,请使用“kill-whole-line”,在Emacs的最新版本中,默认情况下它绑定到“C-S-backspace”。
我应该补充一点,我自己更经常使用whole-line-or-region.el,因为
C-w
比C-S-backspace
更容易键入。jgzswidk4#
你可以创建一个macro和bind it to a key sequence。还不需要学习任何emacslisp。
mzmfm0qo5#
下面是我如何解决Emacs缺少类似vi的“O”命令的问题:
有了这个,我就再也不需要vi的“o”命令的相应版本了。
至于“dd”命令,一开始有点刺耳,但我最终还是采用了Emacs的方法。(C-a C-SPC,转到我想删除的文本的另一端,C-w)。或者,如果我能看到我想删除的行数,我将用M-9 C-k一次删除九行。
ioekq8ef6#
我知道,这个回答并不是直接的,但是像一个Vim用户一样,我发现Spacemacs是从Vim迁移到emacs的功能最强的emacs入门包。你可以将它配置为类似Vim、类似emacs或混合。
http://spacemacs.org/
给予看。
1cklez4t7#
只要使用Viper-mode,Vimpulse或Vim Mode,Emacs的键绑定就不符合人体工程学。
yjghlzjz8#
经过几次搜索和实验,我根据其他答案得出了以下结论:
dd
命令:Emacs上的C-S-backspace
o
命令:Emacs上的C-e C-j
O
命令:Emacs上的C-a C-j C-p
是的,emacs有时候有一些“富有表现力的”命令组合来做一些事情,但是它们有时候确实很有意义!
如果你想一想,emacs有时也会简化一些事情,而vim没有。当你想选择一个文件中的整个文本时,你在Vim上做
ggVG
,而在Emacs上只是C-x h
!