Detectar si una clave está vinculada a algo en vim

88

Me gustaría saber si hay una manera de averiguar si una clave hace algo en vim. Sé que puedo usar :mappara ver asignaciones definidas por el usuario, pero ¿hay algo para las cosas integradas?

Por ejemplo, siempre tuve CTRL- Wobligado a cerrar pestaña, porque pensé que no estaba en uso. Después de medio año, descubrí que hay algunas secuencias que lo usan, como CTRL- W CTRL- Spara dividir la ventana, y fue una pesadilla volver a entrenarme.

K. Norbert
fuente
4
Hablando de colisiones accidentales de asignaciones definidas por el usuario, es realmente una buena práctica usar mapleader
derenio

Respuestas:

78

Si revisa la respuesta sugerida por Randy Morris, encontrará que

:help index 

te dará la lista que quieras.

guardado
fuente
¡muy útil! bueno saber que hay un lugar donde puedes ir vistazo si lo que desea es hurgar para aprender algo nuevo
JonnyRaa
40

Para verificar la asignación predeterminada:

:help index

Para otro mapeo realizado por usuarios o complementos:

:map
:map!

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

El primer comando muestra los mapas que funcionan en modo normal, visual y de selección y pendiente de operador. El segundo comando muestra los mapas que funcionan en modo de inserción y línea de comandos.

Normalmente, la salida de los comandos anteriores ocupará varias páginas. Puede utilizar el siguiente conjunto de comandos para redirigir la salida al archivo vim_maps.txt:

:redir! > vim_maps.txt
:map
:map!
:redir END
Hieu
fuente
A menos que las versiones más nuevas de Vim de repente ofrezcan una mejor alternativa, esta parece ser la única forma de buscar mapas de teclas incluidos y personalizados. mapcheck(como se menciona en otra respuesta ) también solo cubre combinaciones de teclas personalizadas. La principal diferencia entre la salida a un archivo de texto y mapcheck es que la salida a un archivo de texto y / o el uso le :help indexpermite /C-wen Vim encontrar cualquier cosa usandoC-w
Zoe
33

No es una respuesta completa, pero es posible que desee consultar :help map-which-keysuna lista de claves que vim le recomienda usar en sus mapas personalizados.

Esa sección de ayuda tiene una recomendación sobre cómo saber si una clave específica está asignada a una acción.

Randy Morris
fuente
19

Utilice :map!y :mappara establecer claves manualmente y :help 'char(-combination)'para averiguar qué claves ya están asignadas en vim de fábrica (/ fuera de sus opciones de compilación específicas). (Un poco fuera de tema, pero aún se puede considerar (creo): use :scriptnamespara ver qué archivos se obtuvieron en qué orden).

shindojin
fuente
Si desea buscar qué teclas activan un comando determinado, puede hacer esto:: redir keys.txt: map: redir end Luego, abra keys.txt y busque qué comandos están vinculados.
Christian Oudard
18

Hojeé :help indexe hice una lista de algunas de las nmapclaves no utilizadas :

  • Q (cambiar al modo "Ex")
  • Z excepto ZZ, ZQ
  • \
  • <Space>(igual que len el modo normal; la tecla más grande y menos utilizada en el 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, hacer, 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 extensiones)
  • CTRL- \ A - Z (no se usa)

Actualice / comente.

Michal Čizmazia
fuente
12

Puede utilizar mapcheck.: -

Por ejemplo, quería asignar <CR> ,ia gg=Ga un archivo con sangría. Para comprobar si ya hay un mapeo para<CR> , i

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

... pero esto no detectará si el mapeo es parte de una secuencia.

Moha el camello todopoderoso
fuente
Intenté comprobar si "o" está vinculado a algo en modo normal, con lo siguiente: if mapcheck ("o", "N") == "" | echo "sin mapeo" pero informa "sin mapeo", cuando o está definitivamente vinculado a "abrir nueva línea". ¿Lo estoy usando mal?
K. Norbert
@ K.Norbert: Creo esto para las asignaciones definidas por el usuario
Moha, el camello todopoderoso,