¿Cómo deshabilitar las teclas de flecha en vim?


24

Quiero enseñarme a mí mismo usando hjkl más que usar las teclas de flecha para permanecer en la fila de inicio. Y sí, soy muy consciente de que no se debe usar hjkl como las principales teclas de navegación. Sin embargo, mis hábitos son bastante fuertes y ni siquiera me doy cuenta de que eso hizo que la mano se moviera hacia las teclas de flecha y quiero desaprenderlo.

Para romper ese hábito: ¿Cómo puedo desactivar las teclas de flecha para que me obligue a usar el hjkl o algún otro método de navegación?

Como beneficio adicional, sería útil si todavía se mostrara un mensaje de Dont't use this!que no es obligatorio. Si no funcionan, será lo suficientemente confuso para mí repensar mis hábitos.


44
No tiene absolutamente ningún sentido hacer eso; HJKL chupa tanto como las flechas.
romainl

66
Creo que @romainl puede estar señalando que es más importante enfocarse en usar los poderosos movimientos de vim (como wpara la siguiente palabra, }para el próximo párrafo, npara la próxima coincidencia de resultados de búsqueda, fzpara la próxima aparición zen la línea actual, etc.) que para moverse más granularmente por caracteres individuales. Definitivamente estoy de acuerdo con esto. Sin embargo, los HJKL son definitivamente mejores que las teclas de flecha, ya que no tiene que mover las manos de la fila de inicio. Con frecuencia escribo algo como jA, que es mucho más rápido que <Down>A, y realmente no se puede superar con ningún movimiento.
wchargin

44
@romainl: Creo que tuve esta discusión contigo antes. Los no vimmers están acostumbrados a las flechas, y no están acostumbrados a HJKL. Idealmente, tampoco quieres usarlo; pero las flechas de bloqueo (y no HJKL) harán que las personas hagan una pausa y reflexionen sobre lo que están haciendo (sin dejar de abrir HJKL como alternativa en caso de que sea realmente la mejor opción, o en caso de que el usuario esté perplejo sobre cómo hacerlo con movimientos más poderosos). Es decir, no se trata de aprender HJKL, se trata de bloquear el automatismo aprendido en otros editores.
Amadan

1
@Carpetsmoker Lo que definitivamente es una ventaja de las teclas hjkl es no tener que salir de la fila de inicio. Para las teclas de flecha, la mano debe moverse por el teclado.
k0pernikus

1
@Carpetsmoker Seguramente me parece mejor. ;)
k0pernikus

Respuestas:


24

Puede instalar el complemento hardmode y en su .vimrcponer en

let g:HardMode_level = 'wannabe'
let g:HardMode_hardmodeMsg = 'Don''t use this!'
autocmd VimEnter,BufNewFile,BufReadPost * silent! call HardMode()

Si no desea utilizar un plug-in, el uso (que puede ser una mejor opción, ya que puedes personalizar todo usted mismo!) nnoremap, vnoremapY inoremapen <Left>, <Right>, <Up>, <Down>, <PageUp>y <PageDown>, por ejemplo:

nnoremap <Left> :echo "No left for you!"<CR>
vnoremap <Left> :<C-u>echo "No left for you!"<CR>
inoremap <Left> <C-o>:echo "No left for you!"<CR>

1
También hay <nop>si quieres desactivar por completo el mapa de teclas: nnoremap h <nop>.
akshay

25

En caso de que usted, u otra persona que lea este tema, solo quiera deshabilitar los movimientos de las teclas sin la advertencia de texto, ingrese las siguientes líneas en .vimrc

noremap <Up> <Nop>
noremap <Down> <Nop>
noremap <Left> <Nop>
noremap <Right> <Nop>

Los comandos solo desactivarán el movimiento de las teclas en modo normal. Todavía funcionan en modo de inserción. Si usa inoremap, el movimiento de la flecha también se eliminará del modo de inserción.

Este tema enormemente popular trata las diferencias entre noremap, nnoremap, inoremap, etc.: reasignación en Vim

La idea general con la reasignación es la siguiente:

Choice-of-mode-to-remap <remap this command> <to this action/command instead>

Entonces, en los otros ejemplos dados, reasigna el comando izquierdo a un mensaje de texto que, por cierto, elimina la acción de mover el cursor. El ejemplo que di arriba simplemente reasigna las acciones a nada, en lugar de otra cosa. Considérelo eliminar, en lugar de reemplazar, la funcionalidad vim.


2

Puede agregar esto a su .vimrcpara deshabilitar las teclas de flecha en Comando, Insertar, Modo Normal y Visual:

" Remove newbie crutches in Command Mode
cnoremap <Down> <Nop>
cnoremap <Left> <Nop>
cnoremap <Right> <Nop>
cnoremap <Up> <Nop>

" Remove newbie crutches in Insert Mode
inoremap <Down> <Nop>
inoremap <Left> <Nop>
inoremap <Right> <Nop>
inoremap <Up> <Nop>

" Remove newbie crutches in Normal Mode
nnoremap <Down> <Nop>
nnoremap <Left> <Nop>
nnoremap <Right> <Nop>
nnoremap <Up> <Nop>

" Remove newbie crutches in Visual Mode
vnoremap <Down> <Nop>
vnoremap <Left> <Nop>
vnoremap <Right> <Nop>
vnoremap <Up> <Nop>

Nota: Checkout :help map-overviewpara más detalles sobre los diferentes tipos de mapeo


1
Puede reducir el número de comandos necesarios mediante el uso noremap ... ...(para el modo normal, visual, de selección y pendiente del operador) y noremap! ... ...(para el modo de inserción y línea de comandos).
Jürgen Krämer

Cierto. Pensé que lo más explícito noremapssería útil para alguien que quiera personalizar los modos afectados
NonlinearFruit
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.