Detecta se uma chave está ligada a algo no vim

89

Gostaria de saber se existe uma maneira de descobrir se uma chave faz algo in vim. Eu sei que posso usar :mappara ver mapeamentos definidos pelo usuário, mas há algo para o material integrado?

Por exemplo, sempre tive CTRL- Wvinculado a fechar a guia, porque pensei que não estava sendo usada. Depois de meio ano, descobri que existem algumas sequências que o usam, como CTRL- W CTRL- Spara dividir a janela, e foi um pesadelo me treinar novamente.

K. Norbert
fonte
4
Falando em colisões acidentais de mapeamentos definidos pelo usuário, é realmente uma boa prática usar mapleader
derenio

Respostas:

78

Se você verificar a resposta sugerida por Randy Morris, você descobrirá que

:help index 

lhe dará a lista que você deseja.

cético
fonte
muito útil! bom saber que há um lugar que você pode procurar se quiser apenas
fuçar
40

Para verificar o mapeamento padrão:

:help index

Para outro mapeamento feito por usuários ou plug-in:

:map
:map!

De http://vim.wikia.com/wiki/Mapping_keys_in_Vim_- Tutorial (Parte_1) :

O primeiro comando exibe os mapas que funcionam em modo normal, visual e selecione e operador pendente. O segundo comando exibe os mapas que funcionam no modo de inserção e linha de comando.

Normalmente, a saída dos comandos acima abrange várias páginas. Você pode usar o seguinte conjunto de comandos para redirecionar a saída para o arquivo vim_maps.txt:

:redir! > vim_maps.txt
:map
:map!
:redir END
Hieu
fonte
A menos que as versões mais recentes do Vim de repente ofereçam uma alternativa melhor, essa parece ser a única maneira de pesquisar os mapas de teclado incluídos e personalizados. mapcheck(como mencionado em outra resposta ) também abrange apenas atalhos de teclado personalizados. A principal diferença entre a saída para um arquivo de texto e a verificação de mapa é que a saída para um arquivo de texto e / ou usando :help indexpermite que você /C-wno Vim encontre qualquer coisa usandoC-w
Zoe
34

Não é uma resposta completa, mas você pode querer verificar a :help map-which-keyslista de chaves que o vim recomenda que você use em seus mapas personalizados.

Essa seção de ajuda tem uma recomendação de como saber se uma tecla específica está mapeada para uma ação.

Randy Morris
fonte
19

Use :map!e :mappara definir manualmente as chaves e :help 'char(-combination)'descobrir quais chaves já estão mapeadas no vim fora da caixa (/ fora de suas opções de compilação específicas). (Um pouco fora do assunto, mas ainda respeitável (eu acho): use :scriptnamespara ver quais arquivos foram originados em qual ordem.)

Shindojin
fonte
Se você deseja pesquisar quais teclas acionam um determinado comando, você pode fazer o seguinte:: redir keys.txt: map: redir end Em seguida, abra keys.txt e pesquise quais comandos estão vinculados.
Christian Oudard
18

Eu folheei :help indexe fiz uma lista de algumas das nmapchaves não utilizadas :

  • Q (mudar para o modo "Ex")
  • Z exceto ZZ, ZQ
  • \
  • <Space>(igual lao modo normal; a chave maior e mais subutilizada no modo normal)
  • gb, gc, gl, gx, gy, gz
  • gs (dormir)
  • zp, zq, zu, zy
  • cd, cm, co, cp, cq, cr, cs, cu, cx, cy
  • dc, dm, do, dp, dq, dr, ds, du, dx, dy
  • gA, gB, gC, gG, gK, gL, gM, gO, gS, gX, gY, gZ
  • zB, zI, zJ, zK, zP, zQ, zP, zS, zT, zU, zV, zY, zZ
  • ] a,] b,] e,] g,] h,] j,] k,] l,] n,] o,] q,] r,] t,] u,] v,] w,] x ,] y
  • [a, [b, [e, [g, [h, [j, [k, [l, [n, [o, [q, [r, [t], [u, [v, [w, [x , [y
  • CTRL-G, CTRL-K
  • CTRL- \ a - z (reservado para extensões)
  • CTRL- \ A - Z (não usado)

Por favor, atualize / comente.

Michal Čizmazia
fonte
12

Você pode usar mapcheck.: -

Por exemplo, eu queria mapear <CR> ,ipara gg=Gum arquivo com recuo. Para verificar se já existe um mapeamento para<CR> , i

if mapcheck("\<CR>", "I") == "" |echo "no mapping"

... mas isso não detectará se o mapeamento faz parte de uma sequência.

Moha o camelo todo poderoso
fonte
Tentei verificar se "o" está vinculado a algo no modo normal, com o seguinte: if mapcheck ("o", "N") == "" | echo "sem mapeamento", mas informa "sem mapeamento", quando o está definitivamente vinculado a "abrir nova linha". Estou usando errado?
K. Norbert
@ K.Norbert: Acredito que isso seja para mapeamentos definidos pelo usuário
Moha, o camelo todo-poderoso,