这个方法,让 Vim 输入中文成为一种享受

我相信,你在 Vim 中输入中文时,一定有过很痛苦的经历:在切换为命令模式时,需要切换为英文输入法,然后在插入模式时,再切换为中文,这两次切换,让原本高效的 Vim 显得笨拙无比,这个麻烦,劝退了很多 Vim 初学者。

现在,这个麻烦不存在了,因为这里有一个方法,可以让 Vim 退出插入模式的时候自动切换为英文输入法,再回到插入模式时自动恢复为原来的输入法。Windows 或 MacOS 都可以实现。现在,只要是涉及文本编辑的,我都用 Vim,输入中文再也不麻烦了,甚至是一种享受。

以下是具体的方法:

Windows

如果你用的是 Windows,我假设你用的是 gVim,因为 Windows 的 cmd 实在太糟糕,用 Vim 不方便也不美观。

Vim 本身有这方面的设置,你可以查看帮助文档,Vim 命令模式下输入 :help iminsert 查看详情。

具体解决方法:

在命令模式中输入 :edit $VIM/_vimrc,在代码最后添加以下代码:

if has('multi_byte_ime')  
 "未开启 IME 时光标背景色  
 hi Cursor guifg=bg guibg=Orange gui=NONE  
 "开启IME 时光标背景色  
 hi CursorIM guifg=NONE guibg=Skyblue gui=NONE  
 "关闭Vim的自动切换 IME 输入法(插入模式和检索模式)  
 set iminsert=0 imsearch=0  
 "插入模式输入法状态未被记录时,默认关闭IME  
 "inoremap <silent> <ESC> <ESC>:set iminsert=0<CR>  
endif

注意,vim 配置语法中,双引号后面的内容为注释。上述配置在本人的 Windows 上电脑亲测有效。

如果无效,你还可以试下网上的方法[1]

if has('gui_running')
  set imactivatekey=C-space  
  inoremap <ESC> <ESC>:set iminsert=2<CR>
endif

MacOS

MacOS 自带 Vim,与 gVim 不同,Vim 则需要借助于 smartim 插件来实现,smartim 依赖 im-select 程序,不过在安装 smartim 时会自动安装 im-select。

smartim 插件依靠 Vim 的 autocmd 机制,就是进入命令模式时先把正在使用的输入法保存起来,然后切换到默认的输入法,进入插入模式时再切换为之前的输入法:

augroup smartim
  autocmd!
  autocmd VimLeavePre * call Smartim_SelectDefault()
  autocmd InsertLeave * call Smartim_SelectDefault()
  autocmd InsertEnter * call Smartim_SelectSaved()
augroup end

以下是具体的安装步骤:

1、先安装 Vim 的插件管理器 Vundle

你可以不安装 Vundle,然后手动安装 smartim,不过不推荐你这样做,因为将文件复制到指定的目录是件麻烦事,而且后面你可能需要更多好用的插件。

git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

2、配置 Vundle,添加 smartim 插件。

打开 Vim,命令模式下输入 :edit $MYVIMRC 编辑 ~/.vimrc 文件,在文件的最开始处添加以下代码:

set nocompatible              " be iMproved, required
filetype off                  " required

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')

" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'
Plugin 'ybian/smartim'
" All of your Plugins must be added before the following line
call vundle#end()            " required
filetype plugin indent on    " required
" To ignore plugin indent changes, instead use:
"filetype plugin on
"
" Brief help
" :PluginList       - lists configured plugins
" :PluginInstall    - installs plugins; append `!` to update or just :PluginUpdate
" :PluginSearch foo - searches for foo; append `!` to refresh local cache
" :PluginClean      - confirms removal of unused plugins; append `!` to auto-approve removal
"
" see :h vundle for more details or wiki for FAQ
" Put your non-Plugin stuff after this line

上述代码中已经加入了 smartim 插件:Plugin 'ybian/smartim'

保存退出 Vim,然后重新打开,配置文件就生效了,这时在命令模式下输入:PluginInstall 等待 smartim 插件完成安装。

安装完成之后,你就可以自由愉快的在插入模式下输入中文,然后一个 ESC 就可以自动切换为英文输入法了。

如果没有生效,请往下看。

修改 smartim 命令模式默认的输入法

我当时这一步做完还不行,因为我的 Mac 英文输入法是 com.apple.keylayout.ABC,手动切换到英文输入法,然后使用 im-select 查看:

❯ pwd
/Users/aaron/.vim/bundle/smartim/plugin
❯ ./im-select
com.apple.keylayout.ABC

而 smartim 默认的命令模式输入法是 com.apple.keylayout.US,因此需要在 vimrc 中指定 smartim 的默认输入法:

let g:smartim_default = 'com.apple.keylayout.ABC'

再试就可以了。

修改 smartim 的延迟

当你使用的过程中会发现,按下 ESC 之后,短暂的时间内输入法还没有切换为英文,这种卡顿让输入比较快的键盘手无法忍受。

解决方法是在 smartim.vim 文件中添加 set timeoutlen=0

❯ pwd
/Users/aaron/.vim/bundle/smartim/plugin
❯ ls
im-select   smartim.vim

在 smartim.vim 文件的最后,添加 set timeoutlen=0

augroup smartim
  autocmd!
  set timeoutlen=0
  autocmd VimLeavePre * call Smartim_SelectDefault()
  autocmd InsertLeave * call Smartim_SelectDefault()
  autocmd InsertEnter * call Smartim_SelectSaved()
augroup end

这样问题解决。不过这会产生一个小问题,就是自定义的快捷键会失效,比如你定义了 jj 表示 ESC

imap jj <Esc>

因为没有了延迟,当你输入第二个 j 的时候,Vim 不会把它当做组合。不过不用 jj 也罢。

如果很纠结这个,可以在函数  Smartim_SelectDefault() 的第一行添加 set timeoutlen=0在函数 Smartim_SelectSaved() 的第一行添加 set timeoutlen=500,不过即使如此,仍会有 500ms 的延迟。

最后的话

本文分享了 Vim 中文输入的痛点解决办法,亲测可用,Linux 可以参考 MacOS 的做法。这样你就可以在 Vim 中自由自在的输入中文了,是不是很爽?

从此,用 Vim 编程和写文档变成一种享受。

如果觉得有帮助,不妨点赞和关注,每天分享一个小技术。

有问题可以留言讨论。

参考资料

[1]

网上的方法: https://www.zhihu.com/question/341748857/answer/796039634

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Linux下使用vim输入中文,需要先安装支持中文输入输入法,比如fcitx或ibus。然后在vim中使用insert模式,按下Ctrl+Space或Ctrl+\来切换输入法,就可以输入中文了。如果还无法输入中文,可以在vimrc文件中添加以下配置: set iminsert= set imsearch= 这样就可以在vim中正常输入中文了。 ### 回答2: 在linux下使用vim输入中文,需要满足以下前提条件: 1. 安装支持中文vim 一般情况下,linux系统自带的vim版本是不支持中文输入的。需要安装支持中文vim。可以使用下面的命令进行安装: sudo apt-get install vim-gnome 2. 安装中文输入法 在linux下,输入中文通常需要安装中文输入法。常用的中文输入法有fcitx、ibus等。以在ubuntu下使用fcitx为例,可以使用下面的命令进行安装: sudo apt-get install fcitx fcitx-table-all 3. 配置vim 安装好支持中文vim中文输入法后,还需要对vim进行一些配置,才能正确输入中文。具体配置如下: 在~/.vimrc文件中添加下面几行: set encoding=utf-8 set fileencodings=utf-8,ucs-bom,gbk,gb2312,cp936 set termencoding=utf-8 set fileformat=unix 在~/.bashrc文件中添加下面几行: export LANG=zh_CN.UTF-8 export LC_ALL=zh_CN.UTF-8 4. 输入中文 经过以上配置后,就可以在vim输入中文了。具体输入方法如下: - 进入插入模式(i或者a) - 按下Ctrl+Space切换到中文输入法 - 输入中文 需要注意的是,vim下的中文输入法与其他输入法略有不同,需要经过一些练习才能熟练使用。 总之,配置好支持中文vim中文输入法后,再进行相应的设置,就可以愉快地在linux下使用vim输入中文了。 ### 回答3: 在Linux下使用vim编辑器时,可以采用以下两种方式输入中文。 一、使用ibus输入法 1. 安装ibus输入法:sudo apt-get install ibus 2. 配置ibus中文输入法:在终端输入 ibus-setup,打开ibus配置窗口,选择输入法选项,添加中文输入法。 3. 启动ibus输入法:在终端输入 ibus-daemon -drx,或使用ibus在系统托盘菜单中的启动选项。 4. 在vim输入中文:进入vim后按下Ctrl+Space键切换输入法为中文模式,此后就可以直接在vim输入中文了。 二、直接在vim输入中文 如果您不想使用第一种方式,也可以直接在vim输入中文。 1. 设置locale环境变量:在终端输入export LC_ALL=zh_CN.UTF-8,使vim能够识别中文编码。 2. 在vimrc文件中添加以下语句:set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936。 以上两步操作可以使用以下命令进行设置:echo -e "export LC_ALL=zh_CN.UTF-8\nset fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936" >> ~/.vimrc。 3. 在vim输入中文:按下i进入vim的编辑模式,使用正常的中文输入输入需要的中文即可。 总结: 以上即为在Linux下使用vim输入中文方法,用户可根据自己的实际需求选择其中一种。使用ibus输入法更为简单方便,不需要设置locale环境变量和vimrc文件,但是需要安装ibus输入法,可能在某些情况下无法正常使用。直接在vim输入中文需要设置locale环境变量和vimrc文件,相对较为复杂,但是比较灵活,可以适应不同的使用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值