一套适合 vim 和 macOS 用户的输入法切换方案

2023-09-17 17:19:05 +08:00
 kxccc

需求

日常工作中经常使用 neovim 码代码和写文档,有时也在别的编辑器上使用 vim 插件,如果没有特殊设置,vim 模式会和中文输入法“打架”

因此我需要实现下面的特殊功能:

  1. caps 键替换成 esc ,方便切换回 normal 模式
  2. 按下 esc 键后,输入法切换成英文,方便之后敲指令
  3. shift 键切换中英文输入
  4. 切换到不同应用自动切换中英文输入

有了这些功能可以大幅的提升 vim 的输入体验

尝试使用鼠须管(最后放弃)

鼠须管自带的功能能满足后 3 点的需求,对于第 1 点需求可以在 macOS 的设置中实现。刚开始的时候感觉很完美,但在实际的使用过程中发现,鼠须管没有长句联想能力,很影响输入效率(即使使用了几个月还是不能适应),鼠须管的 shift 切换在一些情况下也有 bug ,对我来说是高频触发。因此在我发现另一种方法后,就放弃了使用鼠须管。

使用 Karabiner

无意中在 V2EX 上搜到这篇 帖子,根据帖子的配置,我用 Karabiner 实现了以上的需求。

前提条件

只设置以上两种输入法,因为不使用第三方输入法的英文状态,所以我们需要关闭第三方输入法的 shift 切换功能,确保不会切换过去。shift 在之后会被 Karabiner 用来控制 ABC 输入法和第三方输入法之间的切换(即中英文切换)

使用方法

  1. 对于上面的第一点需求,在 Karabiner 的 Simple Modifications 设置 caps 映射为 esc 即可
  2. 对于第 2 、3 点需求,可以导入这个放在 GitHub 上的 Complex Modifications 配置
    它的实现原理是:当单击 esc 键后,如果当前不是英文输入法,会模拟单击一次 F18 键;当单击 shift 键后,会模拟单击一次 F18 键。因此,我们只需在 系统设置-键盘-键盘快捷键-输入法 里,将输入法切换的快捷键设置为 F18 就能实现单击 esc 或 shift 进行切换。
  3. 对于第 4 点需求,可以在 App Store 上搜索“自动切换输入法”,这个软件的付费版挺好用的(可能也有别的替代)
2132 次点击
所在节点    Apple
11 条回复
gpt5
2023-09-17 17:40:32 +08:00
用系统快捷键切换输入法,不知道你是摸索过后选了这种方法,还是无意中选对了。
karabiner 有命令可以直达某种输入法( 2 种以上语言切换时很方便),但是这种方法对中文输入法有 bug ,时常是图标边成中文了,但实际上输入法没变。我当时琢磨了好久,才想到判断当前语言然后模拟系统快捷键来切换😂
LinYaXuan
2023-09-17 18:05:47 +08:00
推荐一下这个配置方案 https://github.com/Vonng/Capslock
lanlanye
2023-09-17 18:15:59 +08:00
https://github.com/ybian/smartim 这个插件就可以解决吧,normal 模式使用英文,insert 模式切换回之前的输入法
EyebrowsWhite
2023-09-17 18:49:20 +08:00
im-select
kxccc
2023-09-17 19:38:52 +08:00
vim 的插件也尝试过,但不能支持其他编辑器上的 vim 模式(比如 xcode )。用 shift 切换输入法也还得用 Karabiner 来实现,干脆就用 Karabiner 了。
imkerberos
2023-09-18 07:43:12 +08:00
最根本的办法是抄 emacs-rime 的方案, 写一个 vim 的 rime 客户端.
zwyyy456
2023-09-18 09:12:14 +08:00
@kxccc 建议把 capslock 设置成 ctrl ,然后用 ctrl + [ 来执行 esc
YYYMagic
299 天前
如果我输入法里面还有一个日语输入法,每次 f18 切换的下一个输入法都是日语,楼主有好办法吗
YYYMagic
299 天前
@YYYMagic 找到办法了,按 ESC 的时候不改为按下输入法切换键,而是直接改为设置输入法为英文,json 配置在这里:
https://gist.github.com/binc4t/c698b1a6933071e9c07f7fecad12e573
d3George
249 天前
@zwyyy456 insert 模式下 把 jj 映射成 esc 是比较普遍的方案
jackiexiao
44 天前
来试一下 [MacVimSwitch]( https://github.com/Jackiexiao/macvimswitch/) ( ps:目前我在 mac m1 上测试运行没问题)

- 按 ESC 键时自动切换到 ABC 英文输入法
- 内置 Shift 键切换 ABC 英文输入法和中文输入法
- 重要提示:使用前请先关闭输入法中的"使用 Shift 切换中英文"选项
- 如需关闭可在状态栏菜单中设置
- 温馨提示:如果你不想使用 Shift 键切换输入法,在 Mac 上,CapsLock 短按可以切换输入法,长按才是锁定大写

感谢 AI 编程技术的进步,这个仓库没有一行代码是我自己写的哈哈哈(都是 Cursor 生成的),尽管生成的时候 bug 很多,调试了好多次 orz..

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/974601

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX