模仿emacs CTL-K的Vim键绑定

Yin*_*ong 3 vim emacs editor

我正在尝试创建一个模仿emacs CTL-K的vim键绑定:

  1. 如果在一行的末尾使用它,则会终止行结束换行符,将下一行合并到当前行中(因此,完全删除空行).
  2. 否则,Ck会从点到终点杀死所有文本;
  3. 如果point最初位于该行的开头,则会将该行留空.

我在https://unix.stackexchange.com/a/301584/137686上看到了一个答案,建议如下

inoremap <C-K> <Esc>lDa
Run Code Online (Sandbox Code Playgroud)

它似乎适用于案例2,但不适用于案例1(它不会删除换行符)或3(它会将第一个字符留在行中).关于如何改进映射以实现所有三个的任何建议?

Ken*_*ent 7

expr试试这个映射:

inoremap <expr> <c-k> '<c-o>'.(col('.')==col('$')?'J':'D')
Run Code Online (Sandbox Code Playgroud)

它检查你当前的光标位置,决定做一个DJ.

c-o 确保在操作后返回插入模式.

注意

插入模式ctrl-k对于输入有向图非常有用.如果要使用映射禁用该功能,请三思而后行.