[Share Experiences] 如何的vim中切换模式是自动切换输入法
Tofloor
poster avatar
chenyun
deepin
2023-05-07 20:44
Author

使用vim的时候经常需要在不同的“模式”切换。其中最经常的就是在普通模式和插入模式间切换。我们在插入模式中通常输入中文,于是按 Esc切换到普通模式时,输入法往往没有切换到英文模式,这种体验很糟糕。

其实你的输入法框架如果是FCITX或fcitx5,可以将vim设置成退出插入模式输入法自动切换成英文,再次进入插入模式,自动把输入法切换成上次的模式。

以下是设置代码,将代码复制到主目录的 .vimrc中保存即可

" 以下设置离开插入模式时自动关闭中文输入法(输入法框架为fcitx或fcitx5)进入插入模式切换回上一次插入模式时的输入法
if exists('g:fcitx_auto')
    finish
endif
let g:fcitx_auto = 1
let s:r_status = 1
let s:f_status = system("fcitx-remote")
let s:cmd = s:f_status == 1 || s:f_status == 2 ? "fcitx-remote" : "fcitx5-remote"

function s:fcitx2en()  "离开插入模式,自动改变输入法为英文,同时记录输入法状态
    let l:lang = system(s:cmd)
    if l:lang == 2
        call system(printf("%s -c", s:cmd))
        let s:r_status = 2
    else
        let s:r_status = 1
    endif
endfunction

function s:fcitx2back() "进入插入模式的时候,切换回上一次插入模式时的输入法
    if s:r_status == 1
        call system(printf("%s -c", s:cmd))
    else
        call system(printf("%s -o", s:cmd))
    endif
endfunction
autocmd InsertLeave * call fcitx2en()
autocmd InsertEnter * call fcitx2back()
"以上设置离开插入模式自动关闭中文输入法,进入插入模式切换回上一次插入模式时的输入法

参考https://www.cnblogs.com/shengou/p/16884173.html

Reply Favorite View the author
All Replies
安洛
deepin
2023-05-07 20:51
#1

有个插件也可以实现这一点:
https://github.com/lilydjwg/fcitx.vim/

Reply View the author
liwl
deepin
2023-05-07 22:06
#2

like

vim党路过,好文收藏了

vim很强大,但是我喜欢原汁原味的vim,不用插件的那种

Reply View the author
wlly-lzh
deepin
2023-05-07 22:13
#3
liwl

like

vim党路过,好文收藏了

vim很强大,但是我喜欢原汁原味的vim,不用插件的那种

+1

Reply View the author
阿尼樱奈奈
Moderator
2023-05-07 22:22
#4

这个可以。👍

Reply View the author
deepinuser17
deepin
2023-05-08 08:25
#5

Ctrl + Space 键不是很方便吗?

简单的问题用简单的办法解决.

Reply View the author