vim
Asignaciones clave en Vim
Buscar..
Introducción
La actualización de las asignaciones de teclas Vim le permite resolver dos tipos de problemas: reasignar comandos de teclado a letras que sean más fáciles de recordar o accesibles, y crear comandos de tecla para funciones que no tienen ninguno. Aquí aprenderá sobre las diversas formas de [re] mapear comandos de teclado y el contexto al que se aplican (es decir, los modos vim)
Mapeo basico
mapa general
Una secuencia de teclas puede volver a asignarse a otra secuencia de teclas utilizando una de las variantes de map
.
Como ejemplo, el siguiente map
típico saldrá del modo Insertar cuando presione j k en secuencia rápida:
:inoremap jk <Esc>
operador de mapas
Existen múltiples variantes de :map
para diferentes modos.
Comandos | Modos |
---|---|
:map :noremap :unmap | Modo normal, visual y pendiente de operador. |
:map! , :noremap! :unmap! | Insertar y modo de línea de comandos |
:nmap :nnoremap :nunmap | Modo normal |
:imap :inoremap :iunmap | Insertar y reemplazar el modo |
:vmap :vnoremap :vunmap | Modo visual y de selección. |
:xmap :xnoremap :xunmap | Modo visual |
:smap :snoremap :sunmap | Seleccionar modo |
:cmap :cnoremap :cunmap | Modo de línea de comandos |
:omap :onoremap :ounmap | Modo operador pendiente |
Por lo general, debe utilizar las variantes :noremap
; hace que el mapeo sea inmune a la reasignación y la recursión.
comando de mapa
- Puede visualizar todas las asignaciones utilizando
:map
(o una de las variaciones anteriores). - Para mostrar la asignación actual para una secuencia de teclas específica, use
:map <key>
donde<key
> es una secuencia de teclas - Las teclas especiales como Esc se asignan mediante la notación especial
<>
, como<Esc>
. Para obtener la lista completa de códigos de clave, consulte http://vimdoc.sourceforge.net/htmldoc/intro.html#keycodes -
:nmapclear
- Borrar todos los mapas de modo normal -
:nunmap
- Desasignar un mapa de modo normal - Puede configurar el tiempo máximo entre las teclas de una secuencia cambiando las variables
timeout
yttimeout
Ejemplos
-
imap jk <Esc>
: escribirjk
en el modo de inserción lo regresará al modo normal -
nnoremap tt :tabnew<CR>
: escribirtt
en modo normal abrirá una nueva página de pestaña -
nnoremap <Cj> <Cw>j
: escribir<Cj>
en modo normal te hará saltar a la ventana de abajo y a la izquierda -
vmap <Cc> \cc
: escribir<Cc>
en modo visual ejecutará\cc
(comando NERDCommenter para comentar la línea). Como esto se basa en un mapeo de complementos, no puede usar:vnoremap
aquí!
leer más aquí
Combinación de teclas de líder de mapa
La clave de líder podría utilizarse como una forma de crear una asignación con un enlace de clave que el usuario final puede anular.
El líder es la clave \ por defecto. Para anularlo, el usuario final tendría que ejecutar :let g:mapleader='somekey(s)'
antes de definir la asignación.
En un escenario típico, el mapleader se establece en el .vimrc
, y los complementos usan <Leader>
en la parte de enlace de teclas de sus asignaciones para que sean personalizables.
En el plugin, definiríamos mapeos con:
:nnoremap <Leader>a somecomplexaction
Esto sería asignar la acción a la somecomplexaction una combinación de teclas \ +.
La acción sin un líder no cambia.
También es posible usar <Plug>Mappings
para dejar más espacio para personalizar los enlaces de teclas.
Ilustración de mapeo básico (atajos prácticos).
En la mayoría de los editores de texto, el acceso directo estándar para guardar el documento actual es Ctrl + S (o Cmd + S en macOS).
Vim no tiene esta función de forma predeterminada, pero se puede asignar para facilitar las cosas. Agregar las siguientes líneas en el archivo .vimrc
hará el trabajo.
nnoremap <c-s> :w<CR>
inoremap <c-s> <c-o>:w<CR>
El comando nnoremap
asigna Ctrl + s a :w
(escribir el contenido actual en el archivo) mientras que el comando inoremap
asigna Ctrl + S al comando :w
y regresa al modo de inserción ( <co>
pasa al modo normal para un comando y luego vuelve al modo de inserción, sin alterar la posición del cursor que otras soluciones como <esc>:w<cr>a
no pueden garantizar).
Similar,
" This is commented, as Ctrl+Z is used in terminal emulators to suspend the ongoing program/process.
" nnoremap <c-z> :u<CR>
" Thus, Ctrl+Z can be used in Insert mode
inoremap <c-z> <c-o>:u<CR>
" Enable Ctrl+C for copying selected text in Visual mode
vnoremap <c-c> <c-o>:y<CR>
PD: Sin embargo, debe tenerse en cuenta que Ctrl + S puede no funcionar como se espera al usar ssh (o PuTTY). La solución a esto no está dentro del alcance de este documento, pero se puede encontrar aquí .