Как я могу увеличить частоту повторения клавиш сверх предела ОС? - PullRequest
54 голосов
/ 05 октября 2008

У меня плохая привычка использовать клавиши курсора на моей клавиатуре для навигации по исходному коду. Это то, что я делал в течение 15 лет, и это, конечно, означает, что моя скорость навигации ограничена скоростью клавиатуры. И в Vista, и в OS X (у меня двойная загрузка MacBook) моя частота повторения клавиш увеличена до предела. Но в Visual Studio и других приложениях скорость по-прежнему намного ниже, чем мне хотелось бы.

Как повысить частоту повторения клавиш в Visual Studio и других текстовых редакторах?

Ответы [ 15 ]

1 голос
/ 05 января 2014

Хотя этому вопросу уже несколько лет, я все еще время от времени сталкиваюсь с одной и той же проблемой на нескольких сайтах разработчиков. Поэтому я подумал, что могу предложить альтернативное решение, которое я использую для повседневной работы разработчика (поскольку настройки реестра Windows у меня никогда не работали).

Ниже приведен мой маленький Auto-Repeat-Script (~ 125 строк), который можно запустить через AutoHotkey_L (недостатком является то, что он работает только под Windows, по крайней мере Vista, 7, 8.1):

; ====================================================================
; DeveloperTools - Autorepeat Key Script
;
; This script provides a mechanism to do key-autorepeat way faster
; than the Windows OS would allow. There are some registry settings
; in Windows to tweak the key-repeat-rate, but according to widely 
; spread user feedback, the registry-solution does not work on all 
; systems.
;
; See the "Hotkeys" section below. Currently (Version 1.0), there
; are only the arrow keys mapped for faster autorepeat (including 
; the control and shift modifiers). Feel free to add your own 
; hotkeys.
;
; You need AutoHotkey (http://www.autohotkey.com) to run this script.
; Tested compatibility: AutoHotkey_L, Version v1.1.08.01
; 
; (AutoHotkey Copyright © 2004 - 2013 Chris Mallet and 
; others - not me!)
;
; @author   Timo Rumland <timo.rumland ${at} gmail.com>, 2014-01-05
; @version  1.0
; @updated  2014-01-05
; @license  The MIT License (MIT)
;           (http://opensource.org/licenses/mit-license.php)
; ====================================================================

; ================
; Script Settings
; ================

#NoEnv
#SingleInstance     force
SendMode            Input 
SetWorkingDir       %A_ScriptDir%


; Instantiate the DeveloperTools defined below the hotkey definitions
developerTools      :=  new DeveloperTools()


; ========
; Hotkeys
; ========

    ; -------------------
    ; AutoRepeat Hotkeys
    ; -------------------

    ~$UP::
    ~$DOWN::
    ~$LEFT::
    ~$RIGHT::
        DeveloperTools.startAutorepeatKeyTimer( "" )
    return

    ~$+UP::
    ~$+DOWN::
    ~$+LEFT::
    ~$+RIGHT::
        DeveloperTools.startAutorepeatKeyTimer( "+" )
    return

    ~$^UP::
    ~$^DOWN::
    ~$^LEFT::
    ~$^RIGHT::
        DeveloperTools.startAutorepeatKeyTimer( "^" )
    return

    ; -------------------------------------------------------
    ; Jump label used by the hotkeys above. This is how 
    ; AutoHotkey provides "threads" or thread-like behavior.
    ; -------------------------------------------------------
    DeveloperTools_AutoRepeatKey:
        SetTimer , , Off
        DeveloperTools.startAutorepeatKey()
    return


; ========
; Classes
; ========

    class DeveloperTools
    {
        ; Configurable by user
        autoRepeatDelayMs       :=  180
        autoRepeatRateMs        :=  40

        ; Used internally by the script
        repeatKey               :=  ""
        repeatSendString        :=  ""
        keyModifierBaseLength   :=  2

        ; -------------------------------------------------------------------------------
        ; Starts the autorepeat of the current captured hotkey (A_ThisHotKey). The given
        ; 'keyModifierString' is used for parsing the real key (without hotkey modifiers
        ; like "~" or "$").
        ; -------------------------------------------------------------------------------
        startAutorepeatKeyTimer( keyModifierString )
        {
            keyModifierLength := this.keyModifierBaseLength + StrLen( keyModifierString )

            this.repeatKey := SubStr( A_ThisHotkey, keyModifierLength + 1 )
            this.repeatSendString := keyModifierString . "{" . this.repeatKey . "}"

            SetTimer DeveloperTools_AutoRepeatKey, % this.autoRepeatDelayMs
        }

        ; ---------------------------------------------------------------------
        ; Starts the loop which repeats the key, resulting in a much faster 
        ; autorepeat rate than Windows provides. Internally used by the script
        ; ---------------------------------------------------------------------
        startAutorepeatKey()
        {
            while ( GetKeyState( this.repeatKey, "P" ) )
            {
                Send % this.repeatSendString
                Sleep this.autoRepeatRateMs
            }
        }
    }
  1. Сохранить приведенный выше код в текстовом файле (UTF-8), например, с именем «AutorepeatScript.ahk»
  2. Установить AutoHotkey_L
  3. Двойной щелчок на «AutorepeatScript.ahk», чтобы насладиться быстрыми клавишами со стрелками (или поместить файл в папку автозапуска)

(Вы можете настроить задержку и частоту повторения в сценарии, см. «Настраивается пользователем»).

Надеюсь, это поможет!

1 голос
/ 14 апреля 2012

Кажется, что вы не можете сделать это легко в Windows 7.

Когда вы нажимаете и удерживаете кнопку, скорость контролируется ключом реестра Windows: HCU-> Панель управления-> Клавиатура-> Задержка клавиатуры.

Установив для этого параметра значение 0, вы получите максимальную частоту повторения. Драма в том, что вы не можете опускаться ниже 0, если скорость повторения все еще медленная для вас. 0-задержка означает, что задержка повторения составляет 250 мс. Но задержка в 250 мс по-прежнему МЕДЛЕННА. Смотрите это: http://technet.microsoft.com/en-us/library/cc978658.aspx

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

Я считаю, что решение для Windows заключается в аппаратном контроле. Ищите специальные драйверы для своих клавиатур или попытайтесь настроить существующие.

1 голос
/ 05 октября 2008

На Mac это опция-стрелка, чтобы пропустить слово, а опция + Shift + стрелка, чтобы выбрать. Command + стрелка пропускает до конца или начала строки или до конца или начала документа. Также есть клавиши «вверх», «вниз», «домой» и «конец»;) Удерживая клавишу «Shift», можно выбирать и эти клавиши.

0 голосов
/ 06 октября 2008

Ну, это может быть очевидно, но:

  • Для горизонтальной навигации, Home (начало строки), End (конец строки), Ctrl-Left (слово влево), Ctrl-Right (слово вправо) работают во всех известных мне редакторах

  • Для вертикальной навигации, Page Up, Page Down, Ctrl-Home (начало текста), Ctrl-End (конец текста) тоже делают

Также (на заметку), я бы хотел, чтобы мои клавиши Backspace и Delete не повторялись, так что единственный способ удалить (или заменить) текст - это first mark it , затем удалите его (или введите текст замены).

0 голосов
/ 05 октября 2008

Не перемещаться по буквам.

В Vim (см. ViEmu для Visual Studio):

  • bw - предыдущее / следующее слово
  • () - предыдущее / следующее предложение (полный текст с разделителем-стопом)
  • {} - предыдущий / следующий абзац (разделы текста, разделенные пробелами)
  • /? - переместить курсор к предыдущему / следующему вхождению найденного текста (w / set incsearch)

Кроме того, каждое из движений принимает в качестве префикса число, которое позволяет указать, сколько раз повторять команду, например ::

.
  • 20j - прыгнуть на 20 строк вниз
  • 3} - три абзаца вниз
  • 4w - переместить 4 слова вперед
  • 40G - перейти к (абсолютному) номеру строки 40

Скорее всего, есть эквивалентные способы навигации по тексту в вашем редакторе. Если нет, вам следует подумать о переходе на лучший вариант.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...