Insérer un seul caractère dans Vim?

25

Dans Vim (7.2), il existe une commande en mode normal rpour remplacer un seul caractère par un autre. Par exemple, la saisie rXremplacera le seul caractère sous le curseur par Xpuis vous ramènera en mode normal.

Existe-t-il une commande en mode normal pour insérer un seul caractère, puis revenir en mode normal?

John Dibling
la source
1
Copie intersite
Voir vim.wikia.com/wiki/Insert_a_single_character pour une solution complète.
Maxim Suslov

Réponses:

6

MelBurslan a raison de dire que cette fonctionnalité n'existe pas en mode natif, mais la création d'une commande définie par l'utilisateur n'est pas vraiment la voie à suivre pour la créer. J'ai bricolé pendant quelques minutes et j'ai trouvé ceci:

:nmap <silent> ,s "=nr2char(getchar())<cr>P

Ce qui utilise une supercherie Vim impliquant "mettre" du texte à partir d'un registre, dans ce cas le registre "expression". L'expression étant branchée dans le registre est " nr2char(getchar())" qui renverra une chaîne de caractères unique.

La raison pour laquelle j'ai construit le mappage de cette façon est que l'obtention de l'entrée utilisateur "à mi-chemin" d'un mappage est délicate et peut se comporter de manière imprévisible; même ce mappage déposera le curseur dans la zone d'état en attendant que l'utilisateur tape un caractère.

Heptite
la source
8

Merci à Johnny de nous avoir donné cette formidable réponse dans les commentaires ci-dessous:

":nmap <C-i> i_<Esc>r"

Cela mappe Control + i pour insérer un seul caractère, et il le fait de manière très concise.

Dans votre fichier vimrc, cela ressemblera à:

nnoremap <C-i> i_<Esc>r

J'ai changé mon mappage pour utiliser l'espace, et vous pouvez changer le vôtre en votre clé préférée:

nnoremap <Space> i_<Esc>r
Matt C
la source
1
C'est la réponse la plus concise et la plus simple.
Dylanthepiguy
4

Pour autant que je sache, il n'existe aucune fonction de ce type dans une incarnation largement distribuée de l'éditeur vi, mais vim a la possibilité de créer des commandes personnalisées. Il a déjà été discuté ici: dans ce fil

Vous pourrez peut-être créer votre commande personnalisée en faisant ce que vous souhaitez faire.

MelBurslan
la source
3
Voici la commande pour mapper Ctrl-I pour insérer un seul caractère: ": nmap <Ci> i_ <esc> r"
Johnny
2

Une façon simple de le faire est d'utiliser les commandes Couper xet Placer p. Disons que *c'est le caractère que vous souhaitez insérer. Insérez-le en utilisant i * Esc. Puis frappez x. Cela coupera le personnage. Maintenant, vous pouvez frapper ppour mettre le caractère unique. Si vous avez besoin d'insérer ce caractère 300 fois, vous pouvez taper: 300p.

Steve Bragg
la source