改善编程体验: IdeaVimExtension介绍

简介: # 改善编程体验: IdeaVimExtension介绍 ## 动机 Intellij IDEA是个非常优秀的开发环境,提供了相当好用的快捷键,让用户有机会脱离鼠标来使用IDE. 另外官方还提供了IdeaVim插件,熟悉vim的用户可以使用几乎与vim相同的方式操作IDEA的编辑器来编写代码.

改善编程体验: IdeaVimExtension介绍

动机

Intellij IDEA是个非常优秀的开发环境,提供了相当好用的快捷键,让用户有机会脱离鼠标来使用IDE.

另外官方还提供了IdeaVim插件,熟悉vim的用户可以使用几乎与vim相同的方式操作IDEA的编辑器来编写代码.但是作为非英文用户,却有一个"输入法切换"的痛点.

考虑如下两种情况:

  1. 编辑器中在insert模式下,编写了一段中文注释,然后需要回到normal模式移动光标到其他位置继续编写代码.
  2. 正在编辑器normal模式下操作,此时突然有紧急邮件或者钉钉消息需要回复,输入法切换为中文回复后再回到编辑器.

类似上面两种场景,当回到normal模式编辑器时,我们都不得不人工操作一次输入法切换,即使您已经为输入法切换设置了非常好用的快捷键(按一下Shift),这个操作依然是恼人的,经常会忘记,输入几个字符后才发现,这可能带来误操作.

我们的期望只有一个:

在任何情况下,进入normal模式,输入法必是英文状态.

因此我基于IdeaVim的扩展点开发了一个帮助切换输入法的小插件IdeaVimExtension

IdeaVimExtension安装使用

  1. 如果您已经是IdeaVim的用户,那么直接在Intellj IDEA的插件中心搜索IdeaVimExtension进行安装.或者到IdeaVimExtension插件主页进行下载安装.

IdeaVimExtension是依赖IdeaVim的,需要事先安装IdeaVim

  1. 确保你的操作系统已经开启了英文输入法

    • Windows需要开启en_USimage-20190320104934233.png输入法
    • macOS需要开启ABCimage-20190320104604867.png或en_USimage-20190320104634422.png输入法
    • Linux 支持
  2. 安装重启IDEA后,打开任意代码编辑器在normal模式下输入如下两个命令来激活IdeaVimExtension插件

    • :set keep-english-in-normal : 在normal模式保持英文状态
    • :set keep-english-in-normal-and-restore-in-insert : 在normal模式保持英文状态,并在回到insert时恢复输入法到原来的状态.例如,编写一段中文注释,用中文输入法写了一段文字,进入normal模式移动光标到下一行,再回到插入模式继续使用中文编辑.
  3. 上面两个命令在每次IDEA重启后都需要重新输入,也可以通过在用户目录下添加 .ideavimrc文件,将命令添加到该文件中,这样在IDEA重启时可以自动执行该文件中的指令.另外,该文件中也可以添加其他受支持的vim指令.类似vim的.vimrc文件.

接下来就可以愉快的使用全键盘操作来编写代码了.

注意: 该插件仅支持macOS和Windows操作系统,不支持Linux.

如果有哪位同学可以提供Linux下切换输入法的动态库,我就可以支持了.

额外一点分享

相信很多同学都是使用苹果电脑的.苹果电脑的键盘设计对vim用户越来越不友好了.对vim用户来说ESC是个非常高频的按键.但是苹果键盘的ESC设计比较小,且位置偏远,有bar的新MBP的ESC是虚拟的基本没有任何按键反馈.我的处理方法是使用karabiner软件将ESC和不常用的~进行交换.

另外键盘上的方向键,新MBP的上下被缩小到一个按键的面积偏小,且需要移动右手去按,对编写代码这样的文字工作是不友好的在使用vim编辑器是可以通过hkjl来替换,但也总有非vim环境需要使用方向键,比如IDEA的Project视图等.我的处理方法是设置Ctrl+hkjl来替换方向键,为了纠正习惯将原始的方向键禁用了.

最后CapsLock键用处不大,有时会误按造成vim-normal模式下的误操作,所以我将该键跟左下角的Ctrl交换了.这样既改善了Ctrl的按键体验,也可以避免误按CapsLock

Windows用户请自行寻找键位映射工具.

在附件中提供我的kararbiner配置文件,可以直接copy到~/.config/karabiner/karabiner.json来使用:

目录
相关文章
|
监控 负载均衡 应用服务中间件
Passenger作用及原理梳理
我们在部署rails应用时,大多时候都使用Nginx+Passenger的方式部署,本文主要对此架构下 Passenger的作用及其工作原理进行梳理。 一、什么是Passenger? Phusion Passenger是一个开源的Web应用服务器,它能够处理HTTP请求,管理进程和资源、 系统监控以
1073 0
|
XML NoSQL Java
Redis - 一篇走心的 RedisUtil 工具类
Redis - 一篇走心的 RedisUtil 工具类
4354 0
Redis - 一篇走心的 RedisUtil 工具类
|
消息中间件 存储 负载均衡
2024消息队列“四大天王”:Rabbit、Rocket、Kafka、Pulsar巅峰对决
本文对比了 RabbitMQ、RocketMQ、Kafka 和 Pulsar 四种消息队列系统,涵盖架构、性能、可用性和适用场景。RabbitMQ 以灵活路由和可靠性著称;RocketMQ 支持高可用和顺序消息;Kafka 专为高吞吐量和低延迟设计;Pulsar 提供多租户支持和高可扩展性。性能方面,吞吐量从高到低依次为
7326 1
|
Ubuntu Linux 文件存储
如何使用 Linux 构建自己的 NAS 系统?
【7月更文挑战第28天】
10925 7
如何使用 Linux 构建自己的 NAS 系统?
|
XML 人工智能 Go
VSCode 中使用 vim 操作
为什么要使用 Vim 呢?因为真的很高效啊!!!我已经在代码编辑器和浏览器中都安装了类 Vim 插件来提搞我的操作效率。当熟练使用 Vim 命令之后,真的可以扔掉鼠标了。
2031 0
|
Shell Windows
vscode添加gitbash终端(最新)
vscode添加gitbash终端(最新)
2326 1
|
存储 关系型数据库 MySQL
【MySQL系列笔记】InnoDB引擎-数据存储结构
InnoDB 存储引擎是MySQL的默认存储引擎,是事务安全的MySQL存储引擎。该存储引擎是第一个完整ACID事务的MySQL存储引擎,其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读,同时被设计用来最有效地利用以及使用内存和 CPU。因此很有必要学习下InnoDB存储引擎,它的很多架构设计思路都可以应用到我们的应用系统设计中。
1864 4
|
域名解析 Java Go
实现阿里云域名的DDNS
实现阿里云域名的DDNS
25911 7