Neovim终端模式下如何插入digraph二合字符?
默认情况下CTRL-K触发digraph输入的逻辑仅在普通插入模式、命令行模式生效,终端模式下该按键会被直接透传给终端内运行的程序,因此无法直接调用digraph功能,可通过以下方案实现:
方案1:自定义终端模式映射(最稳定,推荐)
该方案不需要切换模式,通过Neovim内置函数读取按键、查询digraph映射后直接将对应字符发送给终端进程,不会打断终端内运行的程序。
将以下配置加入你的Neovim配置文件(init.vim或init.lua均可,以下为Vim脚本示例):function! TerminalDigraph() let first_char = nr2char(getchar()) let second_char = nr2char(getchar()) let target_char = digraph_get(first_char, second_char) " 若输入的组合无对应digraph,直接发送原两个字符 if target_char == 0 call chansend(&channel, first_char .. second_char) else call chansend(&channel, nr2char(target_char)) endif endfunction " 将<C-K>绑定为终端模式下的digraph触发键,和插入模式行为一致 tnoremap <C-K> <cmd>call TerminalDigraph()<cr>配置生效后,终端模式下按
CTRL-K再输入两个digraph对应字符,就能和普通插入模式一样输出二合字符。方案2:轻量键序映射(无需自定义函数)
如果不想写自定义函数,可以直接通过键序映射实现效果,将以下配置加入配置文件即可:tnoremap <C-K> <C-\><C-N>i<C-K>该映射的逻辑是:触发快捷键后先从终端输入模式切到终端普通模式,再重新进入终端输入状态触发原生digraph逻辑,输入完成后字符会自动送入终端。少数场景下可能出现模式切换的小卡顿,适合不想写自定义函数的用户。
方案3:临时手动调用(无需改配置)
如果只是偶尔需要输入digraph,不想永久修改配置,可以在终端模式下按<C-\><C-N>切到终端普通模式,执行Ex命令输出对应字符::put =nr2char(digraph_get('输入第一个digraph字符', '输入第二个digraph字符'))执行后对应的二合字符会被直接送入终端输入流,再按
i即可回到正常终端输入状态。
注:终端模式下Neovim默认会将绝大多数按键直接透传给终端内程序,因此除digraph外,其他插入模式下的编辑功能(如自动补全、拼写修正等)默认也不会生效,都可以通过类似的
tmap映射或chansend逻辑自定义调用。
内容的提问来源于stack exchange,提问作者conte Mascetti

