专栏首页Python七号这个方法,让 Vim 输入中文成为一种享受

这个方法,让 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

本文分享自微信公众号 - Python七号(PythonSeven),作者:somenzz

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-09-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出 现的次数。

    MickyInvQ
  • 写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数。

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明...

    cwl_java
  • 跟我一起学习VIM - The Life Changing Editor

    前两天同事让我在小组内部分享一下VIM,于是我花了一点时间写了个简短的教程。虽然准备有限,但分享过程中大家大多带着一种惊叹的表情,原来编辑器可以这样强大,这算是...

    bear_fish
  • 最受欢迎的Linux发行版, Manjaro折腾全记录(超长超详细)

    原文链接: https://distrowatch.com/table.php?distribution=manjaro

    zhaoolee
  • Ubuntu Server 第九章 文件服务

    在文件服务之前,先提下网络。网络是一个意外的产物,最早在美国国防部提出,出于战争的需要,担心军事指挥中心被摧毁,设计了一套去中心化的系统(APPAnet)。NS...

    天钧
  • Vim漫游键,为什么不设定左手?介绍一种5x倍速漫游方式

    老家的一个小孩,习惯用左手吃饭,就连擦屁股,都是用左手拿纸。结果,这个习惯,被他粗心的奶奶发现了,不知出于什么原因,暴躁如虎。

    xjjdog
  • TW洞见 | 浅谈快捷键

    文章作者及视频来自ThoughtWorks:王健,部分图片来自网络。 又是一个小的分享,落笔成文。开始其实是想做一个文本编辑器的分享,不过在准备过程中,发现编...

    ThoughtWorks
  • 学习Vim的四周计划

    小小科
  • 受用一生的高效 PyCharm 使用技巧(六)

    从第一篇开始,一直到本篇,一共更新了6篇文章,每篇 5 个小技巧,总计 30 个。

    1480
  • Linux基础(day57)

    14.4 exportfs命令 exportfs命令 常用选项 -a 全部挂载或者全部卸载 -r 重新挂载 -u 卸载某一个目录 -v 显示共享目录 以下操作在...

    运维小白
  • SOAR的IDE插件——您的贴身DBA保镖

    SOAR(SQL Optimizer And Rewriter)是小米近期开源的SQL智能优化改写工具,开源第一周就取得了2000+星的成绩。我们开发SOAR的...

    DevOps云学堂
  • 腾讯云Terraform应用指南(一)

    《腾讯云Terraform应用指南》系列文章旨在帮助腾讯云用户借助Terraform,轻松使用简单模板语言来定义、预览和部署云基础结构,让用户通过IaC,基于腾...

    生态产品团队
  • Vim激荡30年发展史

    导语:众所周知,Vim 是从 vi 发展出来的一个文本编辑器。其拥有代码补全、编译及错误跳转等丰富的功能特性,在程序员群体中广受欢迎。

    AI科技大本营
  • Flink部署及作业提交(On YARN)

    在上一篇 Flink部署及作业提交(On Flink Cluster) 文章中,我们介绍了如何编译部署Flink自身的资源分配和管理系统,并将作业提交到该系统上...

    端碗吹水
  • Cygwin环境下vim配置

    vim是Linux发行版的标配编辑器。为什么还要使用cygwin?因为,不可能所有软件/开发都在linux下进行。许多的开发者还在windows下进行。而要使用...

    程序员小助手
  • 将 Vim 设置为 Rust IDE

    Rust 语言旨在以 C++ 开发人员熟悉的方式实现具有安全并发性和高内存性能的系统编程。它也是 Stack Overflow 的 2019 年开发人员调查中最...

    用户8639654
  • 开源代码编辑器横评:为什么 VS Code 能拔得头筹?

    2015 年 4 月 29 日的 Build 大会上,微软发布了 Visual Studio Code 第一个预览版本。短短四年时间里,VS Code 高速成长...

    GitHubDaily
  • 适用于键盘流、懒人、强迫症患者以及码农的究极Mac使用指南

    再次声明:本文是给一些喜欢折腾提升效率的、希望成为键盘流选手的、懒惰得不愿意多移动手指的、有严重的强迫症的人提供一些经验和帮助的。所以意义党、不分青红皂白党、键...

    何时夕
  • 教你几招,让你vim编辑器变得友善起来~

    Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

    谭庆波

扫码关注云+社区

领取腾讯云代金券