Neovim 终端仿真器中的 Ctrl-h 映射

Ctrl-h mapping in Neovim's terminal emulator

我在 init.vim 中启用了以下映射:

tnoremap <Esc> <C-\><C-n>
tnoremap <C-h> <C-\><C-n><C-w>h
tnoremap <C-j> <C-\><C-n><C-w>j
tnoremap <C-k> <C-\><C-n><C-w>k
tnoremap <C-l> <C-\><C-n><C-w>l

nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l

这些大大改进了 windows 在 Vim 中的导航。

但是,我注意到 C-h 在终端缓冲区中执行时没有按预期工作。在通常的终端会话中尝试此操作会导致 Backspace 操作。所以可能它似乎是这些替代组合键之一,例如 C-i 代表 TabC-[ 代表 Esc。但是有没有办法让 C-h 根据我的绑定在 Neovim 的终端会话中工作?

谢谢!

这个问题已经被广泛讨论here。原始 Vim 不依赖于 terminfo 并包含其自己的补丁以正确处理 C-h 序列。不过,Neovim 确实会查看 terminfo

简单地说,修复是在 shell:

中执行这些命令
infocmp $TERM | sed 's/kbs=^[hH]/kbs=\177/' > $TERM.ti
tic $TERM.ti