Как переназначить клавиши клавиатуры, чтобы избежать RSI в VIM

Я надеюсь, что это не выглядит как попытка вызвать разговор исключительно ради этого.

Я использую vim много (5-10 часов в день), и я заметил, что мое левое запястье первым начинает болеть. Стандартная раскладка клавиатуры (см. изображение ниже) почти гарантированно даст вам артрит.

Standard Keyboard

В настоящее время я переназначил

  • Ctrl для Shift
  • Shift to Caps Lock
  • Caps Lock to Ctrl

этой помогает С общими командами, такими как Ctrlf или Shift2 (@), но мне все равно приходится крутить запястье, чтобы добраться до этих комбинаций. Есть ли в любом случае переназначить ключи, чтобы избежать этого скручивания на левом запястье (возможно использовать Tab ключ)? Я просто нахожу странным, что для текстового редактора, разработанного специально для программистов, он будет сильно использовать эти ключи. Я рассмотрел возможность переназначения на старую раскладку клавиатуры (см. ниже изображение), но я не хочу узнать, что если у него будут те же фундаментальные проблемы, что и у моего текущего переназначения.

old keyboard layout

8 ответов


примечание: Я не врач,просто еще одна машинистка, которая страдала от боли в запястье.


По моему опыту, просто отображение шапки to Ctrl (или замена двух, если вы должны есть шапки) и с помощью Ctrl+[ вместо Esc сделать большую разницу. Ctrl+[ не требует дополнительного сопоставления в vim, поскольку это эквивалентно Esc. Если вы научитесь этому маленькому изменению, вы значительно сократите свое движение, если будете учитывать, как часто вы используете Esc in vim.

на шапки to Ctrl отображение не может быть сделано внутри vim и должно быть сделано в масштабах всей системы, однако, имея Ctrl в более удобном месте также поможет в других приложениях, которые используют Ctrl комбинаций. Существуют различные методы переназначения ключей в зависимости от какую ОС вы используете. Несколько распространенных вариантов:

хотя это, вероятно, улучшит вашу ситуацию, вы действительно должны рассмотреть возможность посещения врача и / или покупки более эргономичной клавиатуры, если ваша боль сохраняется. У меня есть более старая версия Преимущество Kinesis что я взял используется на Ebay около $ 100 (USD), и я не мог быть счастливее. Клавиши могут быть запрограммированы непосредственно на клавиатуре, поэтому не требуется программное обеспечение для замены клавиш или создания собственных макросов клавиатуры для часто используемых нажатий клавиш.


Edit: я вижу, что в вашем посте вы также упоминаете комбинации, такие как Ctrl+f и Shift+2 требуя, чтобы крутить пальцем нажимать. Мне кажется, ты используешь только Ctrl и Shift клавиши на левой стороне клавиатуры. Вы действительно должны использовать оба набора этих ключей, используя тот, который находится на противоположной стороне ключа, который вы изменяете. Это сведет на нет движение запястья.


использовать caps as ctrl всей системы. (Как часто вы вырезаете / копируете / вставляете?)

и ctrl[ работа в vim.

наряду с я использую плагин vim 'arpeggio'.

арпеджио позволяет определить привязки vim, которые активируются при одновременном нажатии двух клавиш.
jk нажата служит мне как ESC.

также 'окружают.ВИМ' плагин может быть интересным для вас.

устранены все боли в запястье.

post scriptum:
Использовать'vundle'!
Его лучший менеджер плагинов vim, и вы будете удивляться, как вы могли бы обойтись без, особенно если вы используете настроенный vim на нескольких машинах. Не бойтесь, если у вас возникли проблемы с настройкой изначально, не торопитесь.


я переключился на Kinesis Advantage keyboard, и переназначенный Caps Lock На Esc. Это эффективно удалило любую боль в запястье, которую я чувствовал как пользователь vim.И снова не врач, но, глядя на то, как двигаются мои руки, я не вижу, чтобы запястье дергалось, даже когда я нажимаю "Shift".

вы, вероятно, могли бы сделать некоторые большие переназначения клавиш большого пальца, чтобы еще больше уменьшить напряжение, но, честно говоря, я никогда не чувствовал необходимости.

Не решение $0, я боюсь, но это было очень эффективно для меня.


я сопоставил оба 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"

Я также использую Создать Ключ чтобы быть в состоянии напечатать ūmlauts et c.

в vim самое полезное изменение, которое я когда-либо делал, это отображение пространства лидеру. Все виды комбинаций лидер-ключ сделают вашу жизнь проще.

Я не мог привыкнуть к H и L для _ и $, так как он, похоже, не работает с surround.vim и некоторые другие трюки люди советуют.

просто не используйте стрелки!


Я бы сделал эту часть комментарием к ответу Рэнди на Esc если бы я мог, но это требует немного больше места. Существует один важный случай использования, когда вы не можете просто переназначить ключи Windows: Windows 7 без прав администратора. Это достаточно распространено в корпоративной среде; по крайней мере, это описывает меня и эту клавиатуру на рис. РЕПО keymapper имеет достойную информацию по этому вопросу:

важное примечание для Windows 7 Пользователи

Windows 7 не поддерживает для каждого пользователя клавиш. До следующего выпуска Key Mapper вам придется вручную переключиться на "загрузочные" сопоставления из меню сопоставления, перезагрузиться, чтобы изменить сопоставления, и вам нужно будет иметь административный доступ к вашему компьютеру, чтобы установить сопоставления ключей, которые будут работать в Windows 7.

то же самое верно для любых инструментов Microsoft, KeyTweak, SharpKey и т. д.

Так что вам придется использовать что-то вроде AutoHotkey. Я лично предпочитаю отображение Caps Lock непосредственно в Esc для Vim, и у меня были проблемы с отображением его на Ctrl:

#IfWinActive ahk_class Vim
*CapsLock::Esc
#IfWinActive

еще одна альтернатива мне нравится inoremap jj <Esc>. Если вы не планируете писать о хадже или что-то еще, это работает очень хорошо.


больше к вашей точке

в любом случае, вы рассматривали возможность сделать выше для легкого побега, а затем переназначить некоторые из труднодоступных команд режима вставки в Alt (ударьте по нему большим пальцем), а затем используйте сопоставления с вашим лидером?

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

Я бы предложил переназначение

  • Caps lock к левому управлению
  • левый Control, чтобы избежать
  • побег в Caps lock

. Если в linux сначала можно сделать с помощью setxkbmap -option '...,ctrl:nocaps' или смены XkbOptions на /etc/X11/xorg.conf. Второй требует использования xmodmap. После некоторого обновления X-сервера мне не удалось получить третью работу, ранее использованную xmodmap как хорошо.

использование макета dvorak (возможно, даже Программирование), оптимизированного для коснитесь ввода и сопоставления, как ,s ->()<Left> также может помочь.

Примечание: я тоже не врач. Я касаюсь машинистки, но в отличие от @Randy Morris я никогда не страдал от боли в запястье, просто перемещал ключи в самые удобные места.


я всегда нажимаю левую клавишу ctrl, сворачивая мизинец и нажимая первым суставом. Я нахожу, что это требует меньше движения рук.

обновление

я не нахожу Shift неудобно, поэтому я не могу помочь вам с что. Однако Ctrl беспокоит меня, и даже с моим я предпочитаю избегать его, когда это возможно. Так режим вставки (и режим командной строки) я использую ведущий ; вместо Ctrl. Е. Г.

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

вы поняли идею.

в обычном режиме я использую v и V вместо Ctrl+F и Ctrl+B (я использую только режим визуального blockwise), хотя Я думаю, что большинство людей предпочли бы сопоставлять разные ключи, такие как <Space> и - для подкачки (- не очень необходимый.) Вместо F вы можете искать вперед с f, а затем нажмите ,.

я никогда не видел особого смысла Ctrl+D или Ctrl+U. Однако Я нахожу z., z<Enter> и z- полезно для прокрутка линии курсором до середины, верха и нижняя часть окна соответственно. H, M и L также полезные для перемещения курсора по экрану. Но в вообще я предпочитаю просто использовать / С набором 'incsearch' для навигация по поводу.

нет правильного или неправильного способа сделать это, это просто мои личные предпочтения, но я надеюсь, что это даст вам один или две идеи. Попробуйте экспериментировать и увидеть, что работает для вас.


Я разработал модуль 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