如何重新映射键盘键以避免VIM中的RSI

时间:2012-07-11 23:26:01

标签: vim keyboard ergonomics

我希望这不会仅仅是为了这样做而引发对话的尝试。

我使用vim很多(每天5-10个小时),我注意到我的左手腕是第一个开始疼痛的人。标准键盘布局(见下图)几乎可以保证为您提供关节炎。

Standard Keyboard

目前,我已重新映射

  • Ctrl Shift
  • Shift to Caps Lock
  • 大写锁定 Ctrl

帮助使用常用命令,例如 Ctrl f Shift 2 @ ),但我还是要扭动我的手腕以获得这些组合。反正重新按键是为了避免左手腕扭曲(也许使用 Tab 键)?我发现奇怪的是,对于专门为程序员设计的文本编辑器,它会大量使用这些密钥。我已经考虑重新映射到旧的键盘布局(见下图),但我不想知道它是否会与我当前的重映射具有相同的基本问题。

old keyboard layout

8 个答案:

答案 0 :(得分:14)

注意:我不是医生,只是另一位患有手腕疼痛的打字员。


根据我的经验,只需将 Caps 映射到 Ctrl (或者如果你必须拥有 Caps >)并使用 Ctrl + [而不是 Esc 产生很大的不同。 Ctrl + [在vim中不需要额外的映射,因为它等同于 Esc 。如果你可以自学这个小小的改变,那么当你考虑在vim中使用 Esc 的频率时,你会大大减少你的动作。

Caps Ctrl 映射无法在vim内部完成,必须在系统范围内进行,但是, Ctrl 在更方便的位置也将有助于其他使用 Ctrl 组合的应用程序。根据您使用的操作系统,有不同的重新映射键的方法。一些常见的选择是:

虽然这可能会改善您的情况,但如果您的疼痛持续存在,您应该考虑去看医生和/或购买更符合人体工程学设计的键盘。我拥有我在Ebay上使用的Kinesis Advantage的旧版本,大约100美元(美元),我感到非常高兴。这些按键可以直接在键盘上编程,因此不需要软件来交换按键或为常用的击键创建自己的键盘宏。


编辑:我在帖子中看到你还提到的组合如 Ctrl + f Shift + 2 要求你扭动手腕按压。听起来像你只使用键盘左侧的 Ctrl Shift 键。您应该使用这两个键集,使用与您正在修改的键相反的任何一个键。这会否定这种手腕运动。

答案 1 :(得分:6)

在系统范围内使用 caps 作为 ctrl 。 (你多久剪一次/复制/粘贴?)

这也使 ctrl [在vim中工作。

我使用vim'arpeggio'插件。

琶音可让您定义在同时按下两个琴键时激活的vim绑定。
按下的 j k 将我当作 ESC

surround.vim ”插件也可能对你有用。

消除了我所有的手腕疼痛。

post scriptum:
使用' vundle '!
到目前为止它是最好的vim插件管理器,你会想知道如何在没有它的情况下,特别是如果你在几台机器上使用自定义的vim​​。如果您在最初设置时遇到问题,请不要害怕,请慢慢来。

答案 2 :(得分:4)

我切换到Kinesis Advantage keyboard,并将Caps Lock重新映射到Esc。这有效地消除了我作为vim用户感觉到的任何手腕疼痛。再次不是医生,但看着我的手如何移动,即使我按住Shift,我也看不到我的手腕扭曲。

您可以对拇指键进行一些很好的重映射,以进一步减少紧张,但说实话,我从未感到需要。

不是0美元的解决方案,我很害怕,但这对我来说非常有效。

答案 3 :(得分:3)

我将Escape(单击)和Ctrl(hold)映射到CapsLock:

xmodmap -e "remove Lock = Caps_Lock"
xmodmap -e "remove Control = Control_L"
xmodmap -e "keysym Control_L = Caps_Lock"
xmodmap -e "keysym Caps_Lock = Control_L"
xmodmap -e "add Control = Control_L"
xcape -t 1000 -e "Control_L=Escape" # Fire nothing if 1000ms hold time out

可能我在这里弄乱了,但是xmodmap不是修改映射的最佳选择,所以我将其改为纯xkb配置。

我也换了:用;和〜,〜,因为我使用:和〜更常见:

xmodmap -e "keycode 47 = colon semicolon"
xmodmap -e "keycode 49 = asciitilde grave"

我也使用Compose Key来输入ūmlautsetc。

在vim中,我所做过的最有用的改变是将空间映射到领导者。各种领导 - 组合组合将使您的生活更轻松。

对于_和$,我无法使用H和L,因为它似乎不适用于surround.vim以及人们建议的其他一些技巧。

只是不要使用箭头!

答案 4 :(得分:2)

如果可以的话,我会让这部分评论兰迪对 Esc 的答案,但它需要更多的空间。有一个重要的用例,您不能只重新映射Windows密钥:没有管理员权限的Windows 7。它在企业环境中很常见;至少,它描述了我和照片中的键盘。 keymapper's repo在这个问题上提供了不错的信息:

  

Windows 7用户的重要提示

     

Windows 7不支持每用户键映射。在Key Mapper的下一个版本之前,您必须从Mappings菜单手动切换到'Boot'映射,重新启动以更改映射,并且您需要具有对计算机的管理访问权限才能设置可在Windows中运行的键映射7。

任何Microsoft工具,KeyTweak,SharpKey等都是如此。

所以你必须使用像AutoHotkey这样的东西。我个人更喜欢将Caps Lock直接映射到Esc for Vim,我遇到的问题只是将它映射到Ctrl:

#IfWinActive ahk_class Vim
*CapsLock::Esc
#IfWinActive

我喜欢的另一种选择是inoremap jj <Esc>。除非你打算写关于朝觐或其他东西,否则它的效果非常好。


更重要的是

在任何情况下,您是否考虑过以上操作以便轻松转义,然后将一些难以到达的插入模式命令重新映射到 Alt (用拇指命中)然后使用映射对你的领导?

let mapleader=","
nnoremap <leader>f <C-F>

答案 5 :(得分:1)

我建议重新映射

  • 大写锁定到左侧控制
  • 左控制逃生
  • 逃离大写锁定

。如果在Linux中首先可以使用setxkbmap -option '...,ctrl:nocaps'或更改XkbOptions中的/etc/X11/xorg.conf来完成。其次要求使用xmodmap。在一些X服务器更新之后,我没有得到第三个工作,之前也使用了xmodmap

使用专为触摸打字和,s - > ()<Left>等映射进行优化的dvorak布局(甚至是编程)也可能有所帮助。

注意:我也不是医生。我是触摸打字员,但与@Randy Morris不同,我从未遭受过手腕疼痛,只是将钥匙移动到最方便的位置。

答案 6 :(得分:1)

我总是按下左侧的ctrl键,卷起我的小指并用第一个指关节按下。我发现这需要较少的手部动作。

<强>更新

我发现Shift不舒服,所以我无法帮助你 那。但是Ctrl确实困扰我,甚至和我一样 指关节技术我宁愿尽可能避免它。因此对于 插入模式(和命令行模式)我使用前导; 而不是Ctrl。 E.g。

:map! ;w <C-W>
:map! ;a <C-A>
:map! ;r <C-R>
:ino  ;t <C-T>
:ino  ;d <C-D>

你明白了。

在正常模式下,我使用vV代替Ctrl+FCtrl+B(我只使用视觉块方式) 我想大多数人都喜欢映射不同的键, 例如<Space>-用于分页(-并非如此 需要)。您可以使用F向前搜索,而不是f, 然后点击,

我从未真正在Ctrl+DCtrl+U看到过多少观点。 但我确实发现z.z<Enter>z-对您有用 用光标滚动线到中间,顶部和 窗户底部分别。 HML也是。/ 用于在屏幕上移动光标。但在 一般我更喜欢使用{{1}}并设置'incsearch' 导航。

没有正确或错误的方法,这些只是我的个人喜好,但我希望它给你一个或 两个想法。尝试尝试,看看哪些对您有用。

答案 7 :(得分:1)

我已经开发了一个vim模块来为这个问题做一些简单的重映射:

https://github.com/vim-scripts/vim.ergonomic

它做的最大的事情就是更容易输入括号集。它还使进入命令模式(jj-> ESC)

更容易

它的运行原则是你在编辑时几乎没有使用过J键,但它就在主页行中......所以让我们滥用它!

来自文档:

Remapping commonly used commands
  key combo     mapping         purpose
  ;             :               removes the need to hit Shift to use commands
  jj            <ESC>           can exit edit mode quickly and easily
  Jj            j               can type 'j' when you need to
  JJ            J               can type 'J' when you need to


Making it easier to insert various kinds of braces:
  key combo     mapping         purpose
  JU            ()<left>        easier to create parenthesis
  JI            []<left>        easier to create square brackets
  JM            {}<left>        eaiser to create curly braces
  J<            <><left>        easier to create carrot braces


Make it easier to move small distances (especially useful with braces commands):
  key combo     mapping         purpose
  JL            <left>          move left in insert mode
  JH            <right>         move right in insert mode


Removing any need for enter, backspace or delete:
  key combo     mapping         purpose
  JB            <esc>ldbi       delete the previous word
  JW            <esc>dwi        delete the next word
  JO            <esc>oi         insert line and go to it