Vim 什么是与emacs';ctrl-k?

Vim 什么是与emacs';ctrl-k?,vim,Vim,如何在vim的插入模式下从当前光标位置删除到行尾 我知道您可以在命令模式下使用D执行此操作,并且我知道您可以在插入模式下使用ctrl-u从光标位置删除到行的开头,因此我猜这应该是可能的。如果您在插入模式下,想要执行单个正常模式命令,可以按: Ctrl+o 执行正常模式命令后,将返回到插入模式。因此,可以这样使用D: Ctrl+oD在VIM中没有内置的方法,但是您可以使用此映射在VIM中使用Ctrl+k,就像在Emacs中一样: inoremap <C-k> <Del>

如何在vim的插入模式下从当前光标位置删除到行尾


我知道您可以在命令模式下使用
D
执行此操作,并且我知道您可以在插入模式下使用ctrl-u从光标位置删除到行的开头,因此我猜这应该是可能的。

如果您在插入模式下,想要执行单个正常模式命令,可以按:

Ctrl+o

执行正常模式命令后,将返回到插入模式。因此,可以这样使用D:


Ctrl+oD在VIM中没有内置的方法,但是您可以使用此映射在VIM中使用Ctrl+k,就像在Emacs中一样:

inoremap <C-k> <Del>
inoremap

但是,如果您想使用VIM的内置有向图功能来编写特殊字符,则应使用不同的键绑定,如。

据我所知,没有内置的等效项

插入模式的最简单方法是使用

如果您想将其映射到更容易记住的内容,您可能希望创建一个,该命令将允许您删除光标下的字符,直到行尾:

:inoremap <Leader>k <C-O>D
:inoremap k D
假设是默认的
\
,您将在插入模式中键入\k以调用映射

正如Kent在评论中指出的那样,插入模式映射并非没有缺点,但确实有其用途


用于进入Vim。我建议您不要尝试重新映射它,尽管使用上述技术是可能的。

如果您还想在命令行模式下绑定
终止行,您可以使用
getcmdline()
getcmdpos()
函数:

cnoremap <C-k> <C-\>e(" ".getcmdline())[:getcmdpos()-1][1:]<CR>
cnoremap e(“.getcmdline())[:getcmdpos()-1][1:]

嗯,是的,是
D
。问题是什么?我想要D,但在插入模式下。我认为最好的解决方案是通过
ESC
C-O
返回正常模式,如果你真的想留在插入模式下。不要害怕离开插入模式。你只需要在那里插入,大多数时候你应该保持正常。否则,INSERT应称为NORMAL.:)我不会使用此映射,它禁用了默认的
有向图
,然后使用不同的映射。提问者要求使用CTRL+k,但您可以使用任何其他映射,如CTRL+d。。。但是如何让
删除当前pos和EOF之间的内容?顺便说一句,插入模式下的
ctrl-d
甚至比
ctrl-k
更有用,因为它处理缩进。@Kent这不是问题所在。问题是“从当前光标位置到行尾”。在VIMs命令模式下,您可以通过点击DG来实现从当前光标位置到行尾的删除。@Munen是否执行从当前光标位置到行尾的删除操作?或者我遗漏了什么?这可以简化为使用
inoremap D
(我想)的单键组合,正如@Kent所说,Ctrl+k对对角图很有用,所以其他一些映射可能是更好的主意。上次使用有向图是。。。什么时候?我实际上经常使用,但我想这取决于操作!没错,这是你一直在使用的东西之一,或者你几乎不知道它的存在。@downvoter:你能指出我可以如何改进我的答案吗?我不会对任何答案投反对票,但我想你的答案中有一些问题。1、使用
C-O
,您不需要映射中的
ESC
。使用
ESC
,您将恢复正常。2、对于插入映射,我总是很小心,有时很难找到合适的插入模式映射。例如,您的
k
如果
Leader
`,则有人想键入/编辑windows路径:
c:\\some\path\kill bill\…`我想您看到了问题所在。另外,如果您的领导是
,(逗号)
,则在Insert中也可以经常使用k
。@Kent:谢谢。不知道为什么我添加了
。那已经被移除了。您对插入模式映射的缺点的担忧绝对是正确的!