如何在Vim/Neovim中永久进入digraph模式
实现Vim连续输入Digraph字符的方法
默认Vim里Ctrl+K只能单次输入digraph字符,要实现连续输入特殊字符(比如整句希腊字母、多语言字符),可以用以下两种方法:
方法1:自定义连续Digraph输入模式
在你的~/.vimrc(Neovim用户用~/.config/nvim/init.vim)里加这段配置:
" 把Ctrl+K改成触发连续digraph模式(替换默认单次行为) nnoremap <C-K> :call EnterContinuousDigraph()<CR> inoremap <C-K> <C-O>:call EnterContinuousDigraph()<CR> function! EnterContinuousDigraph() " 先存好当前的回车、Esc映射,后面要恢复 let s:original_cr = maparg('<CR>', 'i', 0, 1) let s:original_esc = maparg('<Esc>', 'i', 0, 1) " 插入模式下,输入双字符自动解析成digraph,按回车/Esc/Ctrl+K退出 inoremap <buffer> <CR> <C-O>:call ExitContinuousDigraph()<CR><CR> inoremap <buffer> <Esc> <C-O>:call ExitContinuousDigraph()<CR><Esc> inoremap <buffer> <silent> <C-K> <C-O>:call ExitContinuousDigraph()<CR> echo "进入连续Digraph模式:输双字符生成特殊字符,按回车/Esc/Ctrl+K退出" endfunction function! ExitContinuousDigraph() " 恢复原来的回车、Esc映射 if !empty(s:original_cr) exe 'inoremap <buffer> <CR> ' . s:original_cr.rhs else iunmap <buffer> <CR> endif if !empty(s:original_esc) exe 'inoremap <buffer> <Esc> ' . s:original_esc.rhs else iunmap <buffer> <Esc> endif iunmap <buffer> <C-K> echo "退出连续Digraph模式" endfunction
使用方式:
- 正常/插入模式按
Ctrl+K进入连续模式 - 直接敲digraph双字符组合,比如
a*出α、e*出ε,每输两个字符自动转成对应特殊字符 - 按回车、Esc或再按
Ctrl+K就能退出
方法2:简化版临时映射
如果不需要完整的模式切换,也可以用临时映射让插入模式下的双字符自动解析为digraph:
" 开启连续digraph(正常模式按\dg,默认leader是反斜杠) nnoremap <leader>dg :inoremap <silent> <buffer> <C-K> <NOP><CR>:set digraph<CR>:echo "连续Digraph已开,输双字符自动转换,用\udg关闭"<CR> " 关闭连续digraph(正常模式按\udg) nnoremap <leader>udg :iunmap <buffer> <C-K><CR>:echo "连续Digraph已关"<CR>
使用方式:
- 正常模式敲
\dg开启,插入模式直接输双字符就自动转特殊字符 - 敲
\udg关闭,恢复默认输入行为
补充提示
- 所有digraph组合可以在Vim里敲
:digraphs查看完整列表,比如中文“好”对应hh、日语“あ”对应aA - 不建议默认启动Vim就进入连续模式,会影响日常输入,按需触发更实用
内容的提问来源于stack exchange,提问作者Hamza Zubair
相关产品推荐
相关产品推荐

