Vim déplace le curseur d'un caractère en mode insertion sans touches fléchées

8

Cela peut sembler un peu trop exagéré, mais je suis passé à vim et je suis tellement content du workflow maintenant. J'essaie de me discipliner pour ne pas utiliser les touches fléchées, car garder les mains sur les touches alfa tout le temps est une si grande chose lors de l'écriture. Ainsi, lorsque je dois naviguer, je sors du mode d'insertion, je me déplace en mode normal et je reviens en mode d'insertion.

Il y a une exception où cela est en fait plus perturbant: j'utilise clang completeavec des extraits et super tabc'est super. Sauf que chaque fois que j'obtiens une fonction auto terminée après avoir rempli les paramètres, je reste avec le curseur avant, )donc pour continuer je dois déplacer le curseur d'un caractère vers la droite. Comme vous pouvez l'imaginer, cela se produit très souvent .

Les seules options que j'ai (pour autant que je sache) sont: Esclaou , et je ne suis satisfait d'aucune d'elles. Le premier me fait frapper 3 touches pour un simple mouvement de curseur à 1 caractère, le second me fait déplacer ma main sur les touches fléchées. Une troisième option serait de mapper CTRL-Lou de smth .

Alors, quelle est la meilleure façon de procéder?


//snippets (clang complete + supertab):
foo($`param1`, $`param2`)

//after completion:
foo(var1, var2|)
              ^ ^
              | |
     I am here  |
                 Need to be here

| indique la position du curseur

bolov
la source
Avec un problème similaire, j'ai fini par pirater le script d'achèvement afin de ne pas faire écho à la fermeture )s'il y a au moins un argument dans la fonction. Je le tape donc à la main. Beaucoup plus utile maintenant.
Dmitry Frank
Que se passe-t-il lorsque vous tapez, )je parie qu'il saute sans insérer réellement. (Je n'utilise pas ce plugin)
FDinoff
@FDinoff non, il en insère juste un autre)
bolov
1
@bolov c'est décevant. Vous pourrez peut-être extraire le code qui le fait des paires automatiques . Je n'ai aucune idée si les plugins entreront en conflit. L'autre option consiste à utiliser <C-O>lpour quitter le mode normal pour 1 commande de mode normal.
FDinoff

Réponses:

5

Carte )pour ignorer l'existant )s'il s'agit d'une parenthèse fermante

inoremap <expr> )  strpart(getline('.'), col('.')-1, 1) == ")" ? "\<Right>" : ")"

Extrait de: http://vim.wikia.com/wiki/Automatically_append_closing_characters


Ancienne réponse

:h i_CTRL-O exécuter une commande, revenir en mode Insertion.

Ctrl-ol vous déplacera d'un caractère vers la droite puis vous ramènera en mode insertion.

Alternativement, certains plugins de support vous permettent de taper simplement le crochet de fermeture )et ils remplaceront celui existant.

Brett Y
la source
1
cela ne fonctionne pas s'il )s'agit du dernier caractère de la ligne (et cela se produit souvent lorsque vous écrivez du code). CTRL-O afonctionne cependant. Je suppose donc que nous avons enregistré une clé. :)
bolov
Vrai del )n'est que deux caractères et vous mettra toujours après la parenthèse fermante.
Brett Y
sauter le ')' fonctionne comme un charme, merci
bolov
0

Tapez ce qui suit pour rechercher les touches de contrôle utilisées en mode insertion.

:help insert-index

ctrl-b n'est pas utilisé, mais vous voudrez peut-être sacrifier une autre clé.

imap <c-b> <right>

Cela fonctionne pour déplacer le curseur d'un caractère vers la droite. Ou mappez un double caractère.

imap jj <right>
balai
la source