Comment désactiver les touches fléchées dans vim?


24

Je veux m'apprendre à utiliser hjkl plus qu'à utiliser les touches fléchées afin de rester sur la ligne d'accueil. Et oui, je suis très conscient qu'il ne faut pas utiliser hjkl comme touches de navigation principales. Pourtant, mes habitudes sont assez fortes et je ne me rends même pas compte qui a fait ce mouvement de la main vers les touches fléchées et je veux le désapprendre.

Afin de briser cette habitude: Comment puis-je désactiver les touches fléchées pour être obligé d'utiliser le hjkl ou une autre méthode de navigation?

En prime, il serait utile qu'un message soit montré Dont't use this!que ce n'est pas obligatoire. S'ils ne fonctionnent pas, ce sera assez déroutant pour moi de repenser mes habitudes.


4
Il est absolument inutile de faire cela; HJKL suce autant que les flèches.
romainl

6
Je pense que @romainl peut indiquer qu'il est plus important de se concentrer sur l'utilisation des mouvements puissants de vim (comme wpour le mot suivant, }pour le paragraphe suivant, npour la prochaine correspondance de résultats de recherche, fzpour la prochaine occurrence de zdans la ligne actuelle, etc.) que de déplacer plus granulairement par des caractères uniques. Je suis définitivement d'accord avec ça. Cependant, HJKL est certainement meilleur que les touches fléchées dans la mesure où vous n'avez pas à déplacer vos mains de la ligne de départ. Je vais souvent taper quelque chose comme jA, qui est beaucoup plus rapide que <Down>A, et pas vraiment battable par aucun mouvement.
wchargin

4
@romainl: Je pense avoir déjà eu cette discussion avec vous. Les non-vimmers sont habitués aux flèches et non aux HJKL. Idéalement, vous ne voulez pas utiliser non plus; mais bloquer les flèches (et non HJKL) incitera les gens à réfléchir et à réfléchir à ce qu'ils font (tout en laissant HJKL ouvert comme alternative au cas où il s'agirait en fait de la meilleure option, ou au cas où l'utilisateur serait perplexe sur la façon de le faire avec mouvements plus puissants.). C'est-à-dire qu'il ne s'agit pas d'apprendre HJKL, il s'agit de bloquer l'automatisme appris dans d'autres éditeurs.
Amadan

1
@Carpetsmoker Ce qui est définitivement un avantage des touches hjkl, c'est de ne pas avoir à quitter la ligne de départ. Pour les touches fléchées, la main doit se déplacer sur le clavier.
k0pernikus

1
@Carpetsmoker C'est sûrement mieux pour moi. ;)
k0pernikus

Réponses:


24

Vous pouvez installer le plugin en mode dur et dans votre .vimrcmise en

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

Si vous ne souhaitez pas utiliser un plug - in, l' utilisation (qui peut être un meilleur choix, que vous pouvez personnaliser vous - même tout!) nnoremap, vnoremapEt inoremapsur <Left>, <Right>, <Up>, <Down>, <PageUp>et <PageDown>, par exemple:

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
Il y a aussi <nop>si vous voulez désactiver le keymap tout à fait: nnoremap h <nop>.
akshay

25

Dans le cas où vous, ou quelqu'un d'autre lisant cette rubrique, souhaitez simplement désactiver les mouvements des touches sans l'avertissement textuel, entrez les lignes suivantes dans .vimrc

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

Les commandes ne désactiveront le mouvement des touches qu'en mode normal. Ils fonctionnent toujours en mode insertion. Si vous utilisez inoremap, le mouvement de la flèche sera également supprimé du mode d'insertion.

Ce sujet très populaire traite des différences entre noremap, nnoremap, inoremap, etc.: Remappage dans Vim

L'idée générale du remappage est la suivante:

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

Ainsi, dans les autres exemples donnés, vous remappez votre commande gauche à une invite de texte qui supprime incidemment l'action de déplacer réellement le curseur. L'exemple que j'ai donné ci-dessus remappe simplement les actions à rien, plutôt qu'à autre chose. Envisagez de supprimer, plutôt que de remplacer, la fonctionnalité vim.


2

Vous pouvez l'ajouter à votre .vimrcpour désactiver les touches fléchées en mode Commande, Insertion, Normal et Visuel:

" 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>

Remarque: Commander :help map-overviewpour plus de détails sur les différents types de mappage


1
Vous pouvez réduire le nombre de commandes nécessaires en utilisant noremap ... ...(pour le mode normal, visuel, sélection et en attente de l'opérateur) et noremap! ... ...(pour le mode insertion et ligne de commande).
Jürgen Krämer

Vrai. Je pensais que le plus explicite noremapsserait utile pour quelqu'un qui souhaite personnaliser les modes concernés
NonlinearFruit
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.