You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 19:03:25