如何执行Ctrl+;插入模式下Vim中的Del?

如何执行Ctrl+;插入模式下Vim中的Del?,vim,command,editor,keyboard-shortcuts,Vim,Command,Editor,Keyboard Shortcuts,有人知道如何在Vim的插入模式下删除光标前面的单词吗?大多数系统使用Ctrl+Del来执行此操作 我知道在插入模式下删除Vim中光标后面的单词是Ctrl+w,但我不知道如何向前删除 将其添加到您的~/.vimrc(对于VIM或GVIM): imap Xlbce ; 1 2 3 4 5 ; 只是一个评论,以便进一步描述 (在GVIM中,也起作用。) 描述 在插入模式下,在Ctrl+D上设置以下绑定 添加虚拟字母以处理最初仅包含一个字符的单词 离开插入模式。(光标现在位于添加

有人知道如何在Vim的插入模式下删除光标前面的单词吗?大多数系统使用
Ctrl+Del
来执行此操作


我知道在插入模式下删除Vim中光标后面的单词是
Ctrl+w
,但我不知道如何向前删除

将其添加到您的
~/.vimrc
(对于VIM或GVIM):

imap Xlbce
;   1      2  3  4 5   ; 只是一个评论,以便进一步描述
(在GVIM中,
也起作用。)

描述
  • 在插入模式下,在
    Ctrl+D
    上设置以下绑定
  • 添加虚拟字母以处理最初仅包含一个字符的单词
  • 离开插入模式。(光标现在位于添加的字母上。)
  • 移动到当前单词的开头
  • 将字符从当前位置移到单词的下一个结尾(即从当前单词的第一个字符移到最后一个字符)。然后再次进入插入模式
  • 行为
    • 如果光标位于单词的某个字符上或紧跟在单词的最后一个字符之后(但不在当前行的末尾),则该单词将被删除
    • 否则,如果左边有一个单词(在同一行上),那么它将被删除(没有任何空白字符)
    • 否则(当没有下一个词时)行为是未定义的。(请随时更新答案以涵盖这些情况。)

    如果删除了某个单词,则光标将与该单词的第一个字符位于相同的位置。

    将其添加到
    ~/.vimrc
    (对于VIM或GVIM):

    imap Xlbce
    ;   1      2  3  4 5   ; 只是一个评论,以便进一步描述
    
    (在GVIM中,
    也起作用。)

    描述
  • 在插入模式下,在
    Ctrl+D
    上设置以下绑定
  • 添加虚拟字母以处理最初仅包含一个字符的单词
  • 离开插入模式。(光标现在位于添加的字母上。)
  • 移动到当前单词的开头
  • 将字符从当前位置移到单词的下一个结尾(即从当前单词的第一个字符移到最后一个字符)。然后再次进入插入模式
  • 行为
    • 如果光标位于单词的某个字符上或紧跟在单词的最后一个字符之后(但不在当前行的末尾),则该单词将被删除
    • 否则,如果左边有一个单词(在同一行上),那么它将被删除(没有任何空白字符)
    • 否则(当没有下一个词时)行为是未定义的。(请随时更新答案以涵盖这些情况。)

    如果删除了某个单词,则光标将与该单词的第一个字符所在的位置相同。

    在插入模式下使用单个正常模式命令。

    要在插入模式下执行此操作,请键入

    Ctrl+o
    
    这会告诉vim接受1个命令,就像它是正常模式一样。然后按

    dw
    

    删除一个单词。

    在插入模式下,使用单个正常模式命令。

    要在插入模式下执行此操作,请键入

    Ctrl+o
    
    这会告诉vim接受1个命令,就像它是正常模式一样。然后按

    dw
    

    删除一个单词。

    接受的解决方案不完全正确,对吗?它确实向后删除,但不向前删除

    在nvim中,这项工作:
    imap Xce

    接受的解决方案并不完全正确,对吗?它确实向后删除,但不向前删除

    在nvim中,这项工作:
    imap Xce

    您也可以将下面的内容添加到您的
    .vimrc

    inoremap <C-Del> <C-o>dw
    
    inoremap-dw
    
    您也可以将以下内容添加到您的
    .vimrc

    inoremap <C-Del> <C-o>dw
    
    inoremap-dw
    
    @jmargolisv链接的解决方案一次只删除一个单词的一个字符,我希望用一个键盘命令删除整个单词。谢谢您的建议。@jmargolisv链接的解决方案一次只删除一个单词的一个字符,我希望用一个键盘命令删除整个单词。谢谢你的建议。出于某种原因,当我将它映射到“
    ”时,但当我将它映射到“
    ”时,你知道为什么会这样吗?@YoursTruly我使用了
    gvim
    ,所以我在那里测试了绑定。在
    vim
    xterm(1)
    terminator(1)
    下,
    确实不起作用,尽管
    Ctrl+Delete
    terminator
    的配置/文档中没有列为绑定(并且
    Ctrl+Delete
    在Unix上不是标准的组合键)。根据
    :help:map特殊键
    man termcap
    ,类似于
    imap
    (但不完全是这样)的功能可能会起作用。对于行首的单字符单词失败,在这种情况下,它将删除以下单词,因为
    esc
    不会将光标向后拉到左侧一个位置,意思是
    e
    将移动到下一个单词的末尾(即使它在下一行)。用
    l
    将光标向右移动一步可能会解决这个问题,因为您将无法移动到EOL之外,而
    esc
    将再次将光标移回…@Jangari感谢您的观察。我已经根据你的建议更新了答案。但是请注意(关于“您将无法超越EOL”),如果某个命令(如
    l
    )失败,那么将不会执行绑定的进一步命令,这将在当前解决方案中留下一些未定义的行为。就我个人而言,我对这个功能不感兴趣(我有时在非VIM编辑器中使用
    Ctrl+Backspace
    ,但在阅读这个问题之前,我甚至不知道
    Ctrl+Delete
    ),所以欢迎对进一步的发现进行编辑。请告诉我们,当我