Может ли vim автоматически отключить Capslock при возвращении в обычный режим?

12

После того, как я почти каждый раз что-то печатаю прописными буквами, я забываю отключить capslock при возвращении в обычный режим. Затем я пытаюсь переместить курсор и в итоге объединить несколько строк и многое другое, чего я не ожидаю.

Можно ли настроить vim для отключения capslock при нажатии escape для перехода в обычный режим?

Если есть решения для конкретной ОС, меня интересуют решения, применимые к Linux.

DRS
источник
моим «решением» было переназначить caps lock на «no action» (macos), так как я не использую его, кроме как по ошибке
localhostdotdev

Ответы:

8

Ответы на этот вопрос показывают, что это маловероятно - у Vim нет доступа к ОС для выполнения этого вызова.

Однако вы можете попробовать изменить свое поведение, чтобы Caps Lock не требовался. Это популярный ключ для сопоставления Ctrl, Escили Meta.

В Vim есть gUоператор для выделения выделенного фрагмента или движения в верхнем регистре, так что, возможно, вы могли бы печатать как обычно и использовать его потом. Также актуально: guв нижнем регистре и ~для переключения.

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

Дэвид Лорд
источник
4

Я изменил свой capslock, чтобы быть ctrl, и я редко использую capslock больше. Однако, для vim, если мне когда-нибудь понадобится, у вас есть tpope / vim-capslock в качестве временного программного capslock для вас. Если вы используете это, должно быть довольно легко настроить autocmd для события InsertLeaveи отключить capslock.

Дхрува Сагар
источник
3

Я нашел способ автоматически отключить блокировку заглавных букв в обычном режиме (хотя он работает только в Linux).

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

На самом деле нет события автокоманды, которое активируется при входе в нормальный режим, поэтому вместо этого я использовал CursorHoldсобытие, которое активируется, когда вы не печатаете в обычном режиме.

au CursorHold * call TurnOffCaps()
set updatetime=10

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

function TurnOffCaps()  
    let capsState = matchstr(system('xset -q'), '00: Caps Lock:\s\+\zs\(on\|off\)\ze')
    if capsState == 'on'
        silent! execute ':!xdotool key Caps_Lock'
    endif
endfunction
Птичий Y
источник
Я думаю, что это единственный реальный ответ на вопрос. Vim должен позвонить в ОС, чтобы как-то отключить CapsLock. Конечно, как это будет сделано, будет зависеть от ОС.
Октябрь
2

Другой вариант заключается в переназначить ваш CapsLockTo Esc. Это отображение, которым я пользуюсь уже пару лет: оно CapsLockнаходится в домашнем ряду, поэтому его очень легко использовать, если вы касаетесь ввода текста. Это также способствует правильному использованию Vim, поскольку выход из режима вставки намного проще (клавиша ближе, чем Esc).

Его легко переназначить: Linux поддерживает это изначально, для этого есть небольшие приложения для Mac OS X и Windows. А некоторые дорогие клавиатуры даже имеют функцию, которая позволяет переназначать клавиши.

Руслан Осипов
источник
2

В дополнение к ответу Avian Y, на самом деле есть автокоманда, которая активирует выход из режима вставки:

au InsertLeave * call TurnOffCaps()

Это было именно то, что я искал ...

Ruben
источник
1

На моем компьютере Apple я фактически реализовал эту функцию, используя Karabiner , который работал достаточно хорошо. К сожалению 10.12 сломал Карабинер, и с тех пор я не пытался его реализовать.

У меня так было с помощью клавиши Escape или клавиши Enter, отключенной заглавной буквы, если она была включена раньше.

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

В противном случае я бы пошел с предложенным gU. (Хотя я могу понять ваши обиды из-за невозможности использовать тот же метод, который вы использовали бы в любом другом текстовом редакторе)

hgiesel
источник
0

В справочном руководстве vim есть довольно хорошее отображение, чтобы все слова в режиме вставки были заглавными:

inoremap <c-h> <esc>gUiw`]a

Он использует ctrl-h, который обычно является просто клоном backspace, так что вы действительно ничего не теряете с этим отображением.

Caps Lock - это кошмар, когда вы находитесь в обычном режиме! Надеюсь, это поможет!

Эрик
источник