关于editor:手指疼写点代码缓解一下

42次阅读

共计 2523 个字符,预计需要花费 7 分钟才能阅读完成。

我常常应用 Emacs 来干写字的活——有时候是写代码、有时候是用 org-mode 治理待办事项、有时候是用 restclient-mode 来测试 HTTP API。Emacs 丰盛的快捷键让我能够双手不离主键盘区就做到很多事件,不过这也带来了别样的懊恼:快捷键按多了,手容易累。

导致手累的第一个因素,是 Emacs 的不少快捷键须要按住 ctrl 来应用,而 ctrl 经常不容易按到。以我的键盘为例,ctrl键散布在主键盘区的最外侧

为了便于尾指按到两侧的 ctrl 键,我在 macOS 中替换了 commandcontrol键的成果

当须要按住两边的 ctrl 键(理论按下的是下面照片中的 Windows 图标键)时,手段须要往外拐过去。这个问题在应用 VSCode 时同样存在,因为我在 VSCode 中用的也是 Emacs 的键映射。

第二个因素是 Emacs 的一些快捷键太繁琐,导致应用时双手像在键盘上起舞个别到处按来按去,敲击次数过多。例如,让光标上下左右挪动的快捷键别离是 ctrl-pctrl-nctrl-b,以及ctrl-f,这比间接用键盘上的方向键麻烦得多。有一些性能甚至要按三组快捷键,比方org-clock-out 要先按ctrl-c,再按ctrl-x,最初按ctrl-o

有没有方法既能够保留快捷键的高效,又尽量地缩小击键导致的手段和手指的疲劳呢?

当然有。

在 Emacs 中改用 Vim 的快捷键

既然 Emacs 默认的快捷键不容易按,那么无妨换成 Vim 格调的快捷键。同样是上下左右挪动光标,在 Vim 中只须要单击 k/j/h/l 这四个按键即可,不仅可能单手操作,而且这四个键正好是右手”触手可及“的地位。其它的性能,例如在文件内搜寻、保留文件等,也只须要按 /:w即可,比起 Emacs 真是”finger-friendly“得多了。

那么如何能力在 Emacs 中用上 Vim 的快捷键呢?答案是用 evil 插件。先用包管理器装置它

M-x package-install RET evil RET

而后在 Emacs 的启动配置文件中增加启用 evil-mode 的代码

(require 'evil)
(evil-mode 1)

当初便能够在 Emacs 中应用 Vim 格调的快捷键了

定制evil-mode

只是简略地启用 evil-mode 还不足以将双手从频繁的按 ctrl 中解放出来,因为在 Emacs 中还有不少其它的高频快捷键依赖于 ctrl,例如用ctrl-x b 来切换到其它的 buffer 中、用 ctrl-x ctrl-f 来关上或新建一个文件,甚至是用 ctrl-c ctrl-x ctrl-o 来进行一个工作的计时器。

就像在数据压缩中,用较短的串来代替呈现频率较高的原始字符串一样,对于高频应用且快捷键较长的性能,能够为它们绑定较短的快捷键。在 evil-mode 中,g是一个前缀键并且也很好按,所以我把一些重度应用的性能都绑定了在了以它为前缀的快捷键上

;;; evil-mode 相干的键绑定
(evil-global-set-key 'normal (kbd"g b")'ido-switch-buffer)
(evil-global-set-key 'normal (kbd"g f")'ido-find-file)
(evil-global-set-key 'normal (kbd"g o")'org-clock-out)
(evil-global-set-key 'normal (kbd"g s")'cuckoo-org-schedule)
(evil-global-set-key 'normal (kbd"g t")'org-todo)
(evil-global-set-key 'normal (kbd"s")'save-buffer)

在 VSCode 中改用 Vim 的快捷键

搬砖的工具是 VSCode,用来写 Node.js 的我的项目,次要是因 VSCode 在写 Node.js 代码这方面的确比 Emacs 的 js-modejs2-mode,以及tide-mode 之流要好用那么一点。在 VSCode 中我也改用了 Vim 的键映射,只须要在插件市场中点击装置即可

VSCode 的 Vim 键映射实际上是一个独立的插件 Vim,它也反对进一步地自定义快捷键。出于集体爱好,我把 s 绑定为保留文件的性能

// VSCode 的配置文件 setting.json
"vim.normalModeKeyBindings": [
  {"before": ["s"],
    "commands": ["workbench.action.files.save"]
  }
],

用 BetterTouchTools 补充 evil-mode 的有余

只管在 Emacs 中能够将罕用的性能绑定到一系列的、以 g 结尾的较短的快捷键上,但这一招并不能用来解决所有的快捷键,因为太多的自定义快捷键也会带来记忆上的累赘。但我不会就此止步。

仔细观察就会发现,少数较长的快捷键是以 ctrl-cctrl-x作为前缀的。因而,如果可能让 ctrl-cctrl-x更容易按——比方替换为单个按键,也有利于缩小尾指按 ctrl 键的累赘。

要用单键来代替 ctrl-c,光凭 Emacs 其实也能够做到。比方能够让F10 被按下的时候相当于按下ctrl-c

(defun simulate-C-c ()
  "模仿输出 C -c"
  (interactive)
  (setq unread-command-events (listify-key-sequence "\C-c")))
(global-set-key [f10] 'simulate-C-c)

问题在于它不可组合。

例如,先按 F10 再按 ctrl-x,等价于按下ctrl-c ctrl-x。但如果先按ctrl-x 再按 F10,则 Emacs 不会再将F10 转换为 ctrl-c,它只会认为我按下的是ctrl-x F10 的键序列。

既要用 F10 代替 ctrl-c,又要具备可组合性,怎么办?我的答案是应用 BetterTouchTool。我用 BTT 将F9F12都重定义了一遍

如此一来,当我须要输出简单的、含有 ctrl-cctrl-x的快捷键的时候,只须要单击一次 F10F11就足够了,轻而易举!

遗憾的是,BTT 是一款 macOS only 的软件。

后记

或者脑机接口才是缓解手指劳损的终极解决方案吧。

浏览原文

正文完
 0