Bloqueia a tecla de mudança errada no Vim

7

Eu sei que devo usar a tecla Shift certa para as letras que eu digito com a mão esquerda. Mas eu geralmente insiro o cólon apenas com a mão direita, movendo o dedo anular para mudar e o dedo indicador para a tecla do cólon.

Eu gostaria de me forçar a parar com isso, pelo menos dentro do Vim. Existe alguma maneira de me impedir de usar "Right-Shift" com "Q", por exemplo?

    
por Martin Ueding 12.08.2012 / 22:35

2 respostas

4

Xmodmap pode fazer o que você está pedindo, contanto que você não se importe em quebrar o seu < Tecla kbd> CapsLock .

O Xmodmap pode distinguir entre a tecla Shift esquerda e direita, então podemos inicialmente remapear RightShift para ModeSwitch para seguir nosso caminho:

xmodmap -e "keysym Shift_R = Mode_switch"

A sintaxe básica para modificar o comportamento de uma chave é

xmodmap -e "keycode  KEYCODE = KEYSYMBOL1 KEYSYMBOL1 KEYSYMBOL3 KEYSYMBOL4"
xmodmap -e "keysym KEYSYMBOL = KEYSYMBOL1 KEYSYMBOL1 KEYSYMBOL3 KEYSYMBOL4"

onde

  • KEYSYMBOL2 é acionado ao pressionar a tecla enquanto pressiona Shift .
  • KEYSYMBOL3 é acionado ao pressionar a tecla enquanto pressiona ModeSwitch .
  • KEYSYMBOL4 é acionado ao pressionar a tecla enquanto pressiona Shift + ModeSwitch .
  • KEYSYMBOL1 é acionado ao pressionar a tecla sem nenhuma das opções acima.
  • ModeSwitch é AltGr por padrão (funciona apenas em alguns layouts de teclado).

Tanto para a teoria. Na prática, esses remapeamentos podem se comportar um pouco diferente ao modificar uma combinação de Shift + Letra . Eu não posso falar pelo Kubuntu, mas alguns aplicativos do Unity irão sobrescrever o comportamento especificado pelo Xmodmap nestes casos.

Para reconfigurar cada chave para aceitar apenas o modificador adequado, descobri que a maneira mais robusta é a seguinte:

  • Para fazer com que R aceite apenas RightShift , execute o seguinte comando:

    xmodmap r r R R
    
  • Para fazer com que L aceite apenas o LeftShift , execute o seguinte comando:

    xmodmap l L l l
    

Dicas:

  • Para tornar os remapeamentos permanentes, crie / edite um script de shell em ~/.kde/Autostart/ , torne-o executável e salve os comandos correspondentes nele.

  • Para desfazer todos os remapeamentos, basta executar o seguinte comando:

    setxkbmap
    
por 14.08.2012 / 04:08
1

Eu escrevi um script para realizar a ideia de Dennis (isso é para teclados UK ascii, deve ser fácil de modificar para teclados americanos)

! A script to rebind all shifted keys to force you to use the correct shift
! button for minimum risk of rsi.

! Buttons not really on either side, make either shift work:
keysym 6 = 6 asciicircum asciicircum asciicircum
keysym y = y Y Y Y
keysym b = b B B B


! Might need to replace 0x3571 with a keysym which is not used elsewhere in
! your key map so that pressing the wrong key generates nothing. This
! keysym should be fine for most people. Note: this may interfere with
! emacs in annoying ways because emacs because it print warnings when
! undefined keys are pressed, the answer is to learn not to press them!


! Set right shift to be a sort of temporary caps lock (only on while button held)
keysym Shift_R = Mode_switch


! Bind lhs of keyboard to only work with this "temporary caps lock
! modifier" as shift and rhs to only work with Shift_L.

! lhs letters
keysym q = q 0x3571 Q Q
keysym w = w 0x3571 W W
keysym e = e 0x3571 E E
keysym r = r 0x3571 R R
keysym t = t 0x3571 T T
keysym a = a 0x3571 A A
keysym s = s 0x3571 S S
keysym d = d 0x3571 D D
keysym f = f 0x3571 F F
keysym g = g 0x3571 G G
keysym z = z 0x3571 Z Z
keysym x = x 0x3571 X X
keysym c = c 0x3571 C C
keysym v = v 0x3571 V V

! lhs symbols
keysym backslash = backslash 0x3571 bar bar
keysym grave = grave 0x3571 notsign notsign
keysym 1 = 1 0x3571 exclam
keysym 2 = 2 0x3571 quotedbl
keysym 3 = 3 0x3571 sterling
keysym 4 = 4 0x3571 dollar
keysym 5 = 5 0x3571 percent

! rhs letters
keysym u = u U 0x3571 U
keysym i = i I 0x3571 I
keysym o = o O 0x3571 O
keysym p = p P 0x3571 P
keysym h = h H 0x3571 H
keysym j = j J 0x3571 J
keysym k = k K 0x3571 K
keysym l = l L 0x3571 L
keysym n = n N 0x3571 N
keysym m = m M 0x3571 M

! rhs symbols
keysym 7 = 7 ampersand 0x3571 ampersand
keysym 8 = 8 asterisk 0x3571 asterisk
keysym 9 = 9 parenleft 0x3571 parenleft
keysym 0 = 0 parenright 0x3571 parenright
keysym minus = minus underscore 0x3571 underscore
keysym equal = equal plus 0x3571 plus
keysym bracketleft = bracketleft braceleft 0x3571 braceleft
keysym bracketright = bracketright braceright 0x3571 braceright
keysym semicolon = semicolon colon 0x3571 colon
keysym apostrophe = apostrophe at 0x3571 at
keysym numbersign = numbersign asciitilde 0x3571 asciitilde
keysym comma = comma less 0x3571 less
keysym period = period greater 0x3571 greater
keysym slash = slash question 0x3571 question

Para usá-lo: salve em um arquivo de texto e corra com:

xmodmap [script_name]

Além disso, alguém com mais reputação pode modificar a resposta de Dennis para substituir

xmodmap r r R R

com

xmodmap -e 'keysym r = r r R R'

e da mesma forma para L , esse é o comando real necessário.

    
por 26.09.2013 / 17:54

Tags