¿Está utilizando vim en una terminal o una versión de interfaz gráfica de usuario (gvim, macvim)?
Nick Knowlson
También tenga en cuenta que si sus encodingcambios después de que se ejecuta el mapeo, lo que obtenga de sus teclas Alt puede que no coincida con lo que estableció inicialmente.
dash-tom-bang
Respuestas:
136
Para los usuarios de Mac: para mapear ALT + hjkl, use en su lugar el carácter real generado (descubra qué carácter usando la combinación en el modo INSERT), por ejemplo, con mi teclado obtengo:
ADDENDUM BY Dylan_Larkin (2019): Para que esto funcione en una Mac, " Usar opción como tecla Meta " debe estar APAGADO en Terminal-> Preferencias-> Teclado
¡Esto es solo por lo que vine aquí (Alt + HJKL para mover divisiones)! ¡Gracias!
Jamie Schembri
6
Una forma fácil de averiguar qué personaje es mediante cat. Simplemente escriba caty dentro de la ventana del gato la combinación de teclas que desee. Descubrí que alt + corchetes es "y" en mi mac.
dvcrn
4
esto funciona muy bien como Alt + HJKL para moverse entre divisiones, ¡a mis dedos les encanta! nmap ˙ <C-w><Left> nmap ¬ <C-w><Right> nmap ˚ <C-w><Up> nmap ∆ <C-w><Down>
John Morales
3
Es posible que estas asignaciones exactas no funcionen como se esperaba en futuras versiones de OSX. Use sed -n lpara ver la salida de <Ak> y <Aj> antes de configurar la asignación. En mi caso, <Aj> es ∆y <Ak> es˚
luk3thomas
4
En macOS, al configurar Use Option as Meta Keyo en el perfil de iTerm, ⌥ key to Esc+se comportará de la forma tradicional (como en Linux / Unix). Por lo tanto, no es necesario configurar en Vim el mapa <^[j>, simplemente asignarlo a <A+j>o <M+j>y funciona.
goetzc
40
:help key-notationdescribe qué formato debe utilizarse para asignar diferentes claves. En el caso de alt, puede usar <A-o <M-. Entonces tu mapeo sería
map <M-d> <C-d>
También recomendaría usar la norevariante de :map(por ejemplo, noremap) a menos que desee explícitamente permitir que se reevalúe el lado derecho para las asignaciones.
Esto todavía no tiene ningún efecto. La entrada Alt + D todavía introduce algún carácter extraño en Vim.
Thomson
9
Ese es un tema aparte. Su terminal está enviando un carácter multibyte a Vim y Vim no sabe interpretarlo como <A-d>. Probablemente necesite cambiar la configuración de su terminal para que envíe <A-d>como <Esc>d.
jamessan
1
@jamessan ¿cómo hacerlo en iterm2?
finlandés
33
Ya no estoy seguro de que sea "posible". Lea la actualización a continuación.
Sí, se puede, incluso en vim terminal, pero no hay verdadera captura toda respuesta. Básicamente tienes que seguir dos pasos:
Asegúrese de que <M-d>exista la notación y asigne exactamente lo que ingresa su terminal ( ^[es el carácter de escape):
$ cat
^[d
$
" in your .vimrc
execute "set <M-d>=\ed"
" you have to use double quotes!
Asigne algo a su combinación recién "creada":
noremap <M-d> :echo "m-d works!"<cr>
Entendiendo cómo funciona, puede expandir este "truco" a otras combinaciones "extrañas", por ejemplo, estoy usando termitas y vim no reconoce <S-F1>, usando cat I get ^[[1;2P. Luego, en mi vimrc hago:, execute "set <S-F1>=\e[1;2P"y luego puedo asignarlo a cualquier cosa.
Nota: No sé por qué, pero para algunas personas que usan \<Esc>obras en lugar de \e.
Actualización (febrero de 2016)
Dependiendo de la terminal que ejecute su terminal, tal vez podría ... en la mayoría de las terminales, por ejemplo, se asigna "alt + h" ^[h, que es: "escape + h". Entonces podría sobrescribir claves. Lo intenté (de nuevo) y parece funcionar, pero creo que es una implementación muy propensa a errores y errores.
Sin embargo, para los valientes, aquí hay un complemento experimental:
En lugar de las execute "set...cosas, puede usar directamente set <M-d>=^[d. En ^[realidad, es un carácter de escape introducido con C-v-Esc. Esto era necesario en rxvt / urxvt, pero xterm no debería necesitar un tratamiento especial. Más información sobre este tema en la wiki de vim .
Micah Elliott
¿Existe un enfoque análogo a esto que funcione con tmux de modo que, es decir, Md pueda enlazarse?
George
2
Para mí, <Esc>entonces dahora hace lo mismo que <Alt>+ d. Además, puede hacer esto en una línea con Ctrl-v, <Esc>según aquí .
Sparhawk
24
Map Alt Key en Vim en Mac OSx:
Comience por ver el código clave que su terminal está enviando a vim:
$ sed -n l
^[[1;9D
En el ejemplo anterior, ejecuté el comando y presioné Alt + Left.
El ^[[1;9Des la secuencia escapado de ser enviado a vim, de modo que podamos usuario que para nuestro mapeo.
Si está utilizando la aplicación iTerm2, es bueno verificar cómo se asignan las claves en Perfil> Claves.
fikovnik
1
Con la Optiontecla izquierda ( ⌥) configurada como Esc+en iTerm2, podría mapear alt+qpara salir de vim: nnoremap <silent> <Esc>q :qa!<cr>
ryenus
También puede configurar iTerm2 para trabajar con esa reasignación si va a Preferencias> Perfiles, selecciona su perfil actual, vaya a la pestaña "teclas" para ese perfil y cambie la opción que dice "Tecla" izquierda "a" Esc + "(disponible las opciones son "Normal", "Meta" y "Esc +").
Parece que esto todavía no funciona. Alt + d ingresará un carácter extraño en Vim, que es lo mismo con el caso de desasignar.
Thomson
Funciona para mí (lo estoy usando gvimen Windows)
Deqing
8
Es posible que su terminal no transmita "correctamente" el Alt-D. Puede usar CV para enviar la secuencia de escape real a Vim y usarla para crear su mapeo. Es decir, edite su .vimrc y reemplace el actual escribiendo la siguiente secuencia "CV Alt-D" para que tenga la secuencia de escape correcta en su vimrc. Eso no funcionará si su terminal no envía nada a vim.
También tuve que cambiar la configuración nnoremap <Esc>j :m .+1<CR>==y similar ...
mihaipopescu
0
Hola, después de una buena solución después de años de probar todo lo anterior en Mac, seguí buscando.
Aquí está mi solución:
Para crear una combinación de teclas que incluya Alt, debe declarar la combinación en la preferencia> teclado y usar esa combinación en el archivo de configuración de vim (marque la opción de uso como tecla meta).
La salida debe ser un carácter inusual (no, apor ejemplo) para que no anule un carácter regular.
En el siguiente ejemplo, debería poder hacer vim con ALT-Up.
encoding
cambios después de que se ejecuta el mapeo, lo que obtenga de sus teclas Alt puede que no coincida con lo que estableció inicialmente.Respuestas:
Para los usuarios de Mac: para mapear ALT + hjkl, use en su lugar el carácter real generado (descubra qué carácter usando la combinación en el modo INSERT), por ejemplo, con mi teclado obtengo:
y así. Solución encontrada aquí en StackOverflow.
Usé esto para mover líneas hacia arriba y hacia abajo con ALT + k \ j, usando esto en mi .vimrc:
como se explica aquí .
Espero que sea útil, disfruta de Vim :)
ADDENDUM BY Dylan_Larkin (2019): Para que esto funcione en una Mac, " Usar opción como tecla Meta " debe estar APAGADO en Terminal-> Preferencias-> Teclado
fuente
cat
. Simplemente escribacat
y dentro de la ventana del gato la combinación de teclas que desee. Descubrí que alt + corchetes es "y" en mi mac.nmap ˙ <C-w><Left> nmap ¬ <C-w><Right> nmap ˚ <C-w><Up> nmap ∆ <C-w><Down>
sed -n l
para ver la salida de <Ak> y <Aj> antes de configurar la asignación. En mi caso, <Aj> es∆
y <Ak> es˚
Use Option as Meta Key
o en el perfil de iTerm,⌥ key to Esc+
se comportará de la forma tradicional (como en Linux / Unix). Por lo tanto, no es necesario configurar en Vim el mapa<^[j>
, simplemente asignarlo a<A+j>
o<M+j>
y funciona.:help key-notation
describe qué formato debe utilizarse para asignar diferentes claves. En el caso de alt, puede usar<A-
o<M-
. Entonces tu mapeo seríaTambién recomendaría usar la
nore
variante de:map
(por ejemplo,noremap
) a menos que desee explícitamente permitir que se reevalúe el lado derecho para las asignaciones.fuente
<A-d>
. Probablemente necesite cambiar la configuración de su terminal para que envíe<A-d>
como<Esc>d
.Ya no estoy seguro de que sea "posible". Lea la actualización a continuación.
Sí, se puede, incluso en vim terminal, pero no hay verdadera captura toda respuesta. Básicamente tienes que seguir dos pasos:
Asegúrese de que
<M-d>
exista la notación y asigne exactamente lo que ingresa su terminal (^[
es el carácter de escape):Asigne algo a su combinación recién "creada":
Entendiendo cómo funciona, puede expandir este "truco" a otras combinaciones "extrañas", por ejemplo, estoy usando termitas y vim no reconoce
<S-F1>
, usando cat I get^[[1;2P
. Luego, en mi vimrc hago:,execute "set <S-F1>=\e[1;2P"
y luego puedo asignarlo a cualquier cosa.Nota: No sé por qué, pero para algunas personas que usan
\<Esc>
obras en lugar de\e
.Actualización (febrero de 2016)
Dependiendo de la terminal que ejecute su terminal, tal vez podría ... en la mayoría de las terminales, por ejemplo, se asigna "alt + h"
^[h
, que es: "escape + h". Entonces podría sobrescribir claves. Lo intenté (de nuevo) y parece funcionar, pero creo que es una implementación muy propensa a errores y errores.Sin embargo, para los valientes, aquí hay un complemento experimental:
fuente
execute "set...
cosas, puede usar directamenteset <M-d>=^[d
. En^[
realidad, es un carácter de escape introducido conC-v-Esc
. Esto era necesario en rxvt / urxvt, pero xterm no debería necesitar un tratamiento especial. Más información sobre este tema en la wiki de vim .<Esc>
entoncesd
ahora hace lo mismo que<Alt>
+d
. Además, puede hacer esto en una línea conCtrl-v
,<Esc>
según aquí .Map Alt Key en Vim en Mac OSx:
Comience por ver el código clave que su terminal está enviando a vim:
En el ejemplo anterior, ejecuté el comando y presioné Alt + Left.
El
^[[1;9D
es la secuencia escapado de ser enviado a vim, de modo que podamos usuario que para nuestro mapeo.fuente
Option
tecla izquierda (⌥
) configurada comoEsc+
en iTerm2, podría mapearalt+q
para salir de vim:nnoremap <silent> <Esc>q :qa!<cr>
Utilizar:
Ver
:help key-notation
.fuente
gvim
en Windows)Es posible que su terminal no transmita "correctamente" el Alt-D. Puede usar CV para enviar la secuencia de escape real a Vim y usarla para crear su mapeo. Es decir, edite su .vimrc y reemplace el actual escribiendo la siguiente secuencia "CV Alt-D" para que tenga la secuencia de escape correcta en su vimrc. Eso no funcionará si su terminal no envía nada a vim.
fuente
Mi terminal produciría
^[x
comandos (por ejemplo, para alt-x). Lo que hizo que funcionara dentro de Vim fue este pequeño script de vim.wikia.com :Agregue a .vimrc para corregir todas las asignaciones de teclas alt.
fuente
como seguimiento a la respuesta de Bruno para los usuarios de Mac, intente asegurarse de que su clave de opción esté asignada a
Esc+
.Esto le dará el comportamiento "normal" de la
A
tecla option ( ) en Vim.Por ejemplo, en
iterm2
, esta opción se puede encontrar enPreferences > Profiles > Keys
:fuente
nnoremap <Esc>j :m .+1<CR>==
y similar ...Hola, después de una buena solución después de años de probar todo lo anterior en Mac, seguí buscando.
Aquí está mi solución:
La salida debe ser un carácter inusual (no,
a
por ejemplo) para que no anule un carácter regular.En el siguiente ejemplo, debería poder hacer vim con ALT-Up.
configuración de vim:
configuración de mac:
fuente