如何在VIM中重新Map键盘键以避免RSI

sc4hvdpw  于 2022-11-11  发布在  其他
关注(0)|答案(8)|浏览(202)
  • 我希望这不会让人觉得是纯粹为了引发对话而进行的尝试。*

我经常使用Vim(每天5-10个小时),我注意到我的左手腕是第一个开始疼痛的。标准的键盘布局(见下图)几乎肯定会给予你患关节炎。

目前,我已经重新Map了

  • Ctrl到Shift
  • 切换到大写锁定
  • 将Caps Lock转换为Ctrl

有助于使用Ctrlf或Shift 2等常用命令(@),但我还是要扭动手腕才能得到那些组合。有没有办法重新Map键,以避免左手腕上的这种扭动(也许使用Tab键)?我只是觉得奇怪的是,对于一个专门为程序员设计的文本编辑器,我已经考虑过重新Map到旧的键盘布局(见下图),但我不想知道它是否会像我现在的重新Map一样有同样的基本问题。

mjqavswn

mjqavswn1#

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

根据我的经验,只需要将CapsMap到Ctrl(或者如果你 * 必须 * 有Caps的话交换这两个),然后使用Ctrl+[而不是Esc就可以产生很大的不同。Ctrl+[不需要在vim中进行额外的Map,因为它相当于Esc。如果你能自学这个小的变化,当你考虑到在vim中使用Esc的频率时,你就可以大大减少你的移动。
Caps到Ctrl键的Map不能在vim内部完成,必须在系统范围内完成,但是,将Ctrl键放在更方便的位置也有助于其他使用Ctrl键组合的应用程序。根据您使用的操作系统,有不同的重新Map键的方法。几个常见的选项是:

虽然这可能会改善你的情况,你真的应该考虑去看医生和/或购买一个更符合人体工程学设计的键盘,如果你的疼痛持续。我有一个旧版本的Kinesis Advantage,我拿起使用在Ebay约100美元(美元),我再高兴不过了。这些键可以直接在键盘上编程,因此不需要任何软件来交换键或为经常使用的击键创建自己的键盘宏。
编辑:我在你的帖子中看到你也提到了Ctrl+f和Shift+2这样的组合键,需要你扭动手腕才能按下。在我看来,你只使用了键盘左侧的Ctrl和Shift键。你真的应该同时使用这两组键,使用你正在修改的键的另一只手。这会抵消手腕的移动。

kgsdhlau

kgsdhlau2#

在系统范围内使用大写作为ctrl。(你多久剪切/复制/粘贴一次?)
这也使得ctrl[在vim中工作。
我还使用了vim“琶音”插件。

琶音可让您定义同时按下两个键时激活的Vim绑定。

jk按下服务我作为ESC。
此外,“surround.vim”插件可能会对您感兴趣。
消除了我所有的手腕疼痛。
后记:
使用“vundle”!
它是目前为止最好的Vim插件管理器,你会想没有它怎么办,特别是当你在几台机器上使用一个定制的Vim时。如果你一开始设置它有困难,不要害怕,慢慢来。

pprl5pva

pprl5pva3#

我换了一个Kinesis Advantage keyboard,并将Caps Lock重新Map到Esc。这有效地消除了我作为一个Vim用户感到的任何手腕疼痛。再次不是医生,但看看我的手是如何移动的,即使我按Shift键,我也没有看到我的手腕扭曲。
你可能会做一些伟大的重新Map到拇指键,以进一步减少紧张,但说实话,我从来没有觉得有必要。
恐怕这不是一个零美元的解决方案,但对我来说非常有效。

lo8azlld

lo8azlld4#

我将Escape(单击)和Ctrl(按住)Map到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无论如何都不是修改Map的最佳选择,所以我将把它改为纯xkb配置。
我还交换了:与;和`与~,因为我用途:更频繁(~ O):

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

我也使用Compose Key来输入ūmlauts等。
在vim中,我做过的最有用的改变是将空间Map到leader。各种leader键组合会让你的生活更轻松。
我不能习惯H和L的_和$,因为它似乎不工作与环绕声。vim和其他一些技巧的人建议。
只是不要用箭!

hmae6n7t

hmae6n7t5#

如果可以的话,我想对Randy关于Esc的回答做一个评论,但是它需要更多的空间。有一个重要的用例,你不能只是重新MapWindows键:没有管理员权限的Windows7。这在企业环境中很常见;至少,它描述了我和pic.keymapper's repo中的键盘在这个问题上有体面的信息:

Windows 7使用者的重要注意事项

Windows 7不支持每用户键Map。在下一版本的键Map器发布之前,您必须从“Map”菜单手动切换到“ Boot ”Map,重新启动以更改Map,并且您需要具有计算机的管理访问权限才能设置在Windows 7中工作的键Map。
对于任何Microsoft工具(KeyTweak、SharpKey等)也是如此。
因此,您必须使用类似AutoHotkey的代码。我个人更喜欢将Caps Lock直接Map到Vim的Esc,并且在将其Map到Ctrl时遇到了问题:


# IfWinActive ahk_class Vim

* CapsLock::Esc

# IfWinActive

我喜欢的另一个替代方案是X1 M0 N1 X。除非你打算写关于朝觐之类的东西,否则它的效果相当不错。

更符合你的观点

在任何情况下,您是否考虑过这样做,以便轻松转义,然后将一些难以到达的插入模式命令重新Map到Alt(用拇指点击它),然后使用到leader的Map?

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

fae0ux8s6#

我建议重新Map

  • 大写锁定键向左移动控件
  • 向左按Ctrl键以转义
  • 跳到大写锁定

。如果在linux中,第一个可以通过使用setxkbmap -option '...,ctrl:nocaps'或在/etc/X11/xorg.conf中更改XkbOptions来完成。第二个需要使用xmodmap。在一些X服务器更新后,我无法使第三个工作,以前也使用xmodmap
使用针对触摸输入优化的dvorak布局(甚至可能是编程)和,s-〉()<Left>这样的Map也可能会有帮助。
注:我也不是医生,我是触摸打字员,但不像@兰迪莫里斯我从来没有遭受手腕疼痛,只是移动键到最方便的位置。

monwx1rj

monwx1rj7#

我总是通过蜷缩我的小手指和第一个指关节按下左ctrl键。我发现这需要更少的手运动。

更新

我不觉得Shift不舒服,所以我不能帮你。但是Ctrl确实让我很困扰,即使我的关节技术我也喜欢在可能的地方避免它。所以对于插入模式(和命令行模式),我使用前导;而不是Ctrl。例如:

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

你懂的。
在正常模式下,我使用vV,而不是Ctrl+FCtrl+B(我只使用可视块模式),不过我想大多数人更喜欢Map不同的键,比如<Space>-用于分页(实际上不需要-)。您可以使用f向前搜索,然后点击,,而不是F
我从来没有真正看到Ctrl+DCtrl+U有什么意义。但是我确实发现z.z<Enter>z-对于用光标分别将行滚动到窗口的中间、顶部和底部很有用。HML对于在屏幕上移动光标也很有用。但是一般来说我更喜欢使用/并设置“incsearch”来导航。
做这件事的方法没有对错之分,这些只是我个人的喜好,但我希望它能给你一两个想法。尝试一下,看看什么对你有效。

im9ewurl

im9ewurl8#

我已经开发了一个vim模块来做一些简单的重新Map,正好解决这个问题:
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

相关问题