我正在尝试创建一个模仿emacs CTL-K的vim键绑定:
- 如果在一行的末尾使用它,则会终止行结束换行符,将下一行合并到当前行中(因此,完全删除空行).
- 否则,Ck会从点到终点杀死所有文本;
- 如果point最初位于该行的开头,则会将该行留空.
我在https://unix.stackexchange.com/a/301584/137686上看到了一个答案,建议如下
inoremap <C-K> <Esc>lDa
Run Code Online (Sandbox Code Playgroud)
它似乎适用于案例2,但不适用于案例1(它不会删除换行符)或3(它会将第一个字符留在行中).关于如何改进映射以实现所有三个的任何建议?
expr试试这个映射:
inoremap <expr> <c-k> '<c-o>'.(col('.')==col('$')?'J':'D')
Run Code Online (Sandbox Code Playgroud)
它检查你当前的光标位置,决定做一个D或J.
c-o 确保在操作后返回插入模式.
插入模式ctrl-k对于输入有向图非常有用.如果要使用映射禁用该功能,请三思而后行.