A navegação de tags usando CTRL +] não funciona com o teclado não inglês no Windows

6

Ao usar o gVim no Windows 7, não posso usar ^] ( CTRL+ ]) para pular para as tags, conforme descrito na documentação do Vim :

<C-LeftMouse>                   *<C-LeftMouse>* *CTRL-]*
CTRL-]      Jump to the definition of the keyword under the
            cursor.  Same as ":tag {ident}", where {ident} is the
            keyword under or after cursor.
            When there are several matching tags for {ident}, jump
            to the [count] one.  When no [count] is given the
            first one is jumped to. See |tag-matchlist| for
            jumping to other matching tags.
            {Vi: identifier after the cursor}

Isso costumava me incomodar muito ao aprender o Vim . No final, consegui resolvê-lo usando esse mapeamento hacky

nnoremap <leader>t :tag <c-r><c-w><cr>

o que me permitiu pular para tags usando \t(usei a configuração padrão de \as <leader>).

Isso não é mais um problema para mim, agora eu só uso o gnu / linux para programação e já li praticamente toda a ajuda que há para ler. Mas, considerando que isso contribuiu para tornar minha experiência de aprendizado do Vim muito pior, peço aqui que resolva isso para pessoas que estão na mesma situação em que eu estava.

Por que CTRL+ não ]funciona para mim no Windows 7 e como pode ser corrigido?

Editar : o título foi editado com as informações de que esse problema é causado pelo layout do teclado que usei.

wefwefa3
fonte
Voce pode fornecer mais informação? Por que isso não funciona? Você tem ctags instalado? Que mensagem de erro você recebe, se houver, quando tenta usar Ctrl-]uma palavra?
akshay
11
Eu apenas consegui descobrir! O problema foi porque eu usei um layout de teclado que precisa ^]ser inserido usando o Ctrl-AltGr-9que não funciona no Vim. Eu respondi minha própria pergunta com esta informação.
precisa saber é o seguinte
11
Fwiw, <C-]>num teclado AZERTY Mac é obtido por prensagem <C-$>, $sendo no mesmo local físico como ]em teclados QWERTY.
Romainl
Lembro-me de uma solução que envolveu o uso do MS Keyboard Layout Creator para "injetar" a combinação de teclas (ou seja, o SO não gerou um código de tecla quando Ctrl-]foi pressionado. Ou foi Ctrl-[?)
VanLaser
11
@ rootmainl: obrigado por mencionar isso. Lembrou-me da minha própria pergunta, perguntei sobre o SO neste tópico. Respondida por ... você :-)
eckes

Respostas:

12

Diga olá à fragmentação do conhecimento: https://stackoverflow.com/q/6932702/520162 Esta pergunta já foi feita e respondida no StackOverflow.

A tecla é pressionar CTRLe a tecla que está localizada onde fica ]o teclado dos EUA . Eu tive o problema com um teclado alemão QUERTZ e tenho que pressionar CTRL-+

Compare: teclado dos EUA: Teclado americano

Teclado alemão: Teclado alemão

Outra maneira óbvia seria simplesmente remapear a funcionalidade para um pressionamento de tecla diferente. Desde que você quer g o t o da marca sob o cursor, você poderia usar oopara isso:

:map oo <C-]>
eckes
fonte
2

Acabei de descobrir por que tinha esse problema.

A causa do problema

O problema é que eu usei um layout de teclado diferente do inglês no meu computador com Windows 7.

O caractere de barra invertida é inserido usando Alt Gr+ 9no layout do teclado que não está em inglês. Isso leva a que ^] seja inserido usando Ctrl+ Alt Gr+ 9. Isso simplesmente não funciona no Vim .

Eu não sei por que isso é:

  • O problema pode estar no hardware. Talvez o problema seja causado por fantasmas limitados no teclado (mas eu tenho o mesmo problema com um teclado que deve ser capaz de registrar 6 teclas ao mesmo tempo).

  • O problema pode estar no software. Talvez o Vim não tenha sido programado com isso em mente.

Eu gostaria que alguém que usasse um teclado que não fosse o inglês pudesse comentar se ^] funciona como deveria em sua máquina.

A solução

O problema é resolvido simplesmente mudando para um layout de teclado em inglês. Infelizmente não encontrei outra solução.

Então você tem que usar um layout em inglês. A interface do usuário do Vim também foi projetada com um layout de teclado em inglês. Usar um layout de teclado em inglês também é vantajoso na programação, pois caracteres como [, {e ;que são freqüentemente usados ​​na programação, se tornam mais fáceis de alcançar (sem Alt Gralongamento). Assim, a mudança pode até tornar sua vida mais confortável!

O problema será digitar caracteres no seu idioma principal. Então você deve recorrer ao uso de dígrafos (consulte :help digraphs).

Outra maneira de resolver esse problema seria usar esse mapeamento hacky mencionado na pergunta:

nnoremap <leader>t :tag <c-r><c-w><cr>

O que permite ao usuário pular para uma tag com \t(se <leader>estiver definido \como está por padrão).

wefwefa3
fonte
2
Isso não é solução, é rendição.
Eckes