Navigation en mode insertion

20

J'ai finalement décidé d'abandonner les touches fléchées pour la navigation en faveur de hjkl. J'ai utilisé le Vim hardmodeplugin pour désactiver les touches fléchées.

Je me suis habitué à la navigation assez rapidement, mais il s'avère que la navigation en mode insertion est soudainement impossible.

Existe-t-il une solution à ça ? (le mode d'insertion existant n'est pas une solution).

stdcall
la source
8
Oui: utilisez les touches fléchées :-) C'est pour ça qu'ils sont là ;-)
Martin Tournoij
@Carpetsmoker si les touches fléchées sont disponibles, je les utiliserais au lieu de hjkl ....
stdcall
5
Mais l'idée est que quitter le mode d'insertion (à savoir, l'utiliser uniquement pour ce à quoi il est destiné, c'est-à-dire de petites insertions entrecoupées d'autres commandes) est exactement la solution. Si je ne me trompe pas, je l'ai vu dans l'aide, si je trouve un lien, je le posterai. Il semble que vous vous y soyez trop habitué, pas aux touches fléchées.
The Vee
Vous pouvez lier votre clavier pour utiliser des flèches comme raccourci comme <kbd> super </kbd> + <kbd> j </kbd> pour descendre. <kbd> super </kbd> peut être n'importe quel bouton, par exemple <kbd> Verrouillage des
majuscules

Réponses:

26

Il existe de nombreuses options. Une option, et l'OMI la plus saine et la plus simple consiste à simplement arrêter de désactiver les touches fléchées. Je comprends pourquoi de nombreux amateurs de hardcore disent des choses comme

Vous ne devriez plus jamais utiliser les touches fléchées! Chaque fois que vous utilisez les touches fléchées, vous perdez 3 minutes de temps, un chiot meurt et quelqu'un passe à Emacs!

(Évidemment, je plaisante) Cependant, il y a un but pour les touches fléchées. Ils sont extrêmement utiles pour naviguer:

  • En mode insertion

  • Sur la ligne de commande

Généralement, lorsque les gens vous disent de ne pas utiliser les touches fléchées, c'est parce qu'ils veulent que vous réappreniez la navigation d'une manière plus similaire à celle de Vim. Si vous êtes à l'aise hjklet que vous utilisez principalement les touches fléchées en mode insertion, il n'y a aucune bonne raison de vous forcer à ne pas les utiliser.

L'option n ° 2 consiste à remapper ctrl-hjklpour agir comme des touches de curseur. C'est bien parce que vous pouvez rester sur le circuit et cela correspond bien à la mémoire musculaire que vous avez déjà apprise en utilisant hjklle mode normal. En fait, c'est ce que je fais . L'inconvénient majeur de cette approche est que cela peut être difficile à configurer dans le terminal vim car il <C-j>produit un NULoctet. Je contourne cela en utilisant Gvim. Je ne sais pas s'il existe une solution facile pour la console vim ou non.

L'option n ° 3 est à utiliser <C-o>pour effectuer de petits mouvements en mode normal. Par exemple, si vous tapez

Hello world!
     cursor^

et vous vous rendez compte que vous avez oublié une virgule, plutôt que de le faire leftleftleftleftleftleft, vous pouvez simplement faire <C-o>b<C-o>hou <C-o>2Fo, ou toute autre combinaison de mouvements en mode normal que vous aimez.

Bien sûr, une autre option, et celle que j'aime beaucoup, est de simplement utiliser Esc, faire quelques petits mouvements avant de revenir en mode normal. Vous avez mentionné que vous préfériez ne pas le faire, mais parfois c'est vraiment le moyen le plus efficace.

Il y a probablement d'autres approches aussi, mais ce sont celles que j'aime qui ont fonctionné pour moi.

DJMcMayhem
la source
2
Intéressant - je note que vous utilisez <c-o>gket <c-o>gjau lieu de <Up>et <Down>. Pourquoi donc?
Kyle Strand
4
@kylestrand gket montez et gjdescendez visuellement une ligne même si la ligne est enveloppée.
DJMcMayhem
4
Je ne pense pas que cela soit suffisant pour justifier une réponse à lui tout seul, mais j'aime avoir les touches fléchées désactivées en mode normal (ce qui m'a forcé à apprendre HJKL), et activées dans tous les autres modes ( noremap <Up> <NOP>...) . Vous passez suffisamment de temps en mode normal pour apprendre le HJKL, mais ils sont là quand vous en avez besoin. Ou du moins, je trouve que c'est un juste milieu entre les laisser toujours éteints ou toujours allumés, et cela ne nécessite pas de remapper d'autres touches (beaucoup de gens comme Ctrl-HJKL pour se déplacer entre les volets).
Itai Ferber du
Btw, BASH et al prennent en charge les liaisons de clés vi. Avec ces mappages, vous pouvez <ESC> et utiliser hjkl pour parcourir l'historique cmd (haut / bas) ou modifier la commande actuelle (gauche / droite)
Rolf
9

J'aime utiliser la touche Contrôle pour transformer les hjkltouches de mouvement en touches de mouvement "universelles". Voici le morceau pertinent de mon .vimrc:

" In insert or command mode, move normally by using Ctrl
inoremap <C-h> <Left>
inoremap <C-j> <Down>
inoremap <C-k> <Up>
inoremap <C-l> <Right>
cnoremap <C-h> <Left>
cnoremap <C-j> <Down>
cnoremap <C-k> <Up>
cnoremap <C-l> <Right>

Les inoremapinstructions s'appliquent au mode insertion, tandis que cnoremapcelles s'appliquent au mode commande. (J'utilise ce mappage depuis si longtemps que j'ai oublié s'il existe un moyen de parcourir l'historique en mode commande sans lui.)

(Modifier: je vois que l'autre réponse a déjà mentionné cette possibilité. Néanmoins, il peut être utile de voir les commandes de mappage réelles.)

Kyle Strand
la source
3

Appuyez sur escpuis utilisez hjklet wWbBet toutes les autres navigations que vous souhaitez effectuer. L'intérêt du mode difficile est de vous apprendre à naviguer avec des mouvements vim plus complexes. Faites de petites modifications, puis déplacez-vous vers un nouvel emplacement, en utilisant le mode normal.

Si vous ne voulez pas apprendre à naviguer plus rapidement avec le mode dur activé, consultez ma réponse d'une autre question sur le même sujet.

Archange33
la source
3

Si vous souhaitez déplacer plus d'une ou deux positions ...

... le meilleur choix est de frapper ESC, de se déplacer et de revenir en mode insertion.

Il ne sert à rien de créer des mappages comme <C-h>de se déplacer vers la gauche, puis de commencer à le frapper trop souvent ... en tant qu'utilisateur Vim, vous n'êtes pas censé appuyer plusieurs fois sur la même touche pour réaliser un mouvement intelligent.

(Si la ESCclé n'est pas proche de vos doigts, ce serait une bonne option pour créer un mappage pour elle.)

Si vous souhaitez déplacer UNE ou DEUX posistions en mode insertion ...

... un bon choix serait de définir certains mouvements à l'aide de votre <Leader>clé:

(J'utilise ,comme <Leader>clé car il est proche et confortable de mes doigts)

noremap! <Leader>h <left>   "move cursor left
noremap! <Leader>j <down>   "move cursor down
noremap! <Leader>k <up>     "move cursor up   
noremap! <Leader>l <right>  "move cursor right
noremap! <Leader>w <esc>wi  "move one word forward
noremap! <Leader>e <esc>ei  "move forward to the end of word
noremap! <Leader>b <esc>bi  "move one word backward
Rossijonas
la source
1

Si vous avez juste besoin de modifier une petite quantité de texte ou un mot, vous pouvez utiliser <Ctrl-O>h/j/k/l.

<Ctrl-O> vous ramène en mode normal juste pour cette commande, puis vous replonge en mode d'insertion, ce qui vous évite une certaine pression sur les touches, si vous devez passer en mode normal pour un petit mouvement.

Réf: 1. http://vim.wikia.com/wiki/Use_Ctrl-O_instead_of_Esc_in_insert_mode_mappings

alpha_989
la source