102 votes

Comment insérer un saut de ligne à l'endroit où se trouve le curseur sans passer en mode insertion dans Vim ?

Est-il possible d'insérer un saut de ligne à l'endroit où se trouve le curseur dans Vim sans entrer en mode insertion ? Voici un exemple ( [x] signifie que le curseur est sur x ):

if (some_condition) {[ ]return; }

Il peut arriver que je veuille entrer un code supplémentaire. J'appuierai donc sur i pour passer en mode insertion, appuyez sur Enter pour insérer le saut de ligne et supprimer l'espace supplémentaire. Ensuite, je passerais en mode normal et placerais le curseur avant l'accolade fermante, puis je ferais la même chose pour l'insérer sur sa propre ligne.

Je le fais depuis un certain temps, mais il y a sûrement une meilleure façon de procéder ?

0 votes

Vous voulez insérer quelque chose sans passer en mode INSERT ?

28 votes

@jeremy-cantrell Oui, tout comme " J " rejoint la ligne suivante et insère un espace sans passer en mode INSERT !

124voto

Greg Hewgill Points 356191

Pour l'exemple que vous avez donné, vous pourriez utiliser rEnter pour remplacer un seul caractère (l'espace) par Entrée. Ensuite, fspace. pour passer à l'espace suivant et répéter la dernière commande.

En fonction de vos paramètres d'indentation automatique, il se peut que l'énoncé de retour soit indenté correctement ou non. Si ce n'est pas le cas, utilisez sEnterTabEsc pour remplacer l'espace par un saut de ligne, mettre la ligne en retrait et quitter le mode insertion. Vous devrez remplacer le deuxième espace par une commande différente, de sorte que vous ne pourrez pas utiliser '.' dans ce cas.

4 votes

F[espace]" devrait être équivalent à "W" (c'est-à-dire passer à l'espace blanc suivant).

4 votes

W" déplace un caractère trop loin, il passe au caractère suivant. après l'espace suivant.

1 votes

Vous pouvez également utiliser >> y << pour faciliter l'indentation si vous ne voulez pas passer en mode insertion avec s .

13voto

Une cartographie simple pour couper la ligne au niveau du curseur en appuyant sur Ctrl+Entrée :

:nmap <c-cr> i<cr><Esc>

entre essentiellement en mode "insertion", insère un saut de ligne et revient en mode normal.

mettez-le dans votre fichier .vimrc pour une utilisation future.

12voto

Adam Liss Points 27815

Voici comment créer une macro qui insère une nouvelle ligne au niveau du curseur chaque fois que vous appuyez sur 'g' pendant que no en mode insertion :

A partir de vim, tapez :

:map g i[Ctrl+V][Enter][Ctrl+V][Esc][Enter]

Où ?

  • [Ctrl+V] signifie Maintenir la touche Ctrl enfoncée et appuyer sur "v".
  • [Enter] signifie appuyer sur la touche Entrée
  • [Esc] signifie appuyer sur la touche Esc

Vous verrez ce qui suit au bas de votre fenêtre vim jusqu'à ce que vous appuyiez sur la touche finale Entrée :

:map g i^M^[

Explication :

[Ctrl+V] signifie "citer le caractère suivant" -- cela vous permet d'intégrer les caractères de retour à la ligne et d'échappement dans la commande.

Vous associez donc la touche "g" à la séquence :

i \[Enter\] \[Escape\]

C'est vim pour insérer une nouvelle ligne avant le curseur, puis quitter le mode insertion .

Ajustements :

  • Vous pouvez remplacer le "g" par n'importe quel caractère qui n'est pas déjà lié à une commande que vous utilisez.
  • Ajoutez des éléments à la commande, par exemple f}i^M^[O -- Cela permettra f et le } y i nsérer un autre retour à la ligne, puis quitter le mode insertion et O prévoit une ligne vide pour vous permettre d'entrer plus de code.
  • Vous pouvez ajouter la commande à votre fichier .vimrc ou .exrc pour la rendre permanente. Il suffit d'omettre les deux points du début, de sorte que la commande commence par "map"

Bonne lecture !

0 votes

Vous avez répondu à la question mal formulée du sujet, au lieu de celle du message. Ce qu'il veut savoir, c'est comment se débarrasser facilement de l'espace blanc qui se trouvait à l'endroit où la ligne a été interrompue, mais qui n'a plus d'utilité.

0 votes

Merci. J'ai mis à jour la section "Tweaks" pour accomplir ce que (je pense) l'auteur a demandé. Lorsque je l'ai testé, vi a automatiquement supprimé les espaces supplémentaires pour moi ; utilisez 'x' pour les supprimer si le vôtre ne le fait pas. Et pourquoi les commandes vi ressemblent-elles à du bruit de ligne de modem ? :-)

5voto

slothbear Points 833

Si vous avez l'habitude d'étendre un bloc d'une ligne à trois lignes, essayez la substitution. Remplacez le crochet d'ouverture par un crochet/retour et le crochet de fermeture par un crochet/retour.

La commande permettant de remplacer bracket/return par bracket se présente comme suit :

:s/{/{\r/

Étant donné que vous souhaitez utiliser souvent cette fonction, vous pouvez associer la séquence complète à une touche inutilisée, comme suit :

:map <F7> :s/{/{\r/ ^M :s/}/\r}/ ^M

Où vous voyez ^M dans la séquence, tapez [Ctrl-V] puis appuyez sur entrer .

Le curseur étant placé n'importe où sur la ligne d'échantillonnage, appuyez sur la touche mappée, et les retours chariot sont ajoutés.

Vérifier :help map-which-keys pour obtenir des conseils sur la sélection des frappes inutilisées à cartographier.

0 votes

BTW : g n'est pas mappée car elle est utilisée comme touche "espace de noms" pour de nombreux mappages de vim composés de deux touches (voir :h g ). Ce mappage est donc en fait un "no-go".

0 votes

Existe-t-il une bonne commande qui indique que g est déjà utilisé comme clé d'espace de noms ?

0 votes

Pas en particulier. Comme je l'ai dit :help g est un moyen d'obtenir une liste des g + quelque chose mappings. z , [ ] sont d'autres clés d'espace de noms, voir par exemple :help index . Vous pouvez invoquer :verbose map g pour voir toutes les correspondances définies commençant par g. Les ressources web utiles sont les suivantes viemu.com/vi-vim-cheat-sheet.gif , vimcasts.org/blog/2014/02/follow-my-leader , vimeo.com/85343734 (diapositives : speakerdeck.com/nelstrom/follow-my-leader )

3voto

mondaugen Points 11

En supposant que vous soyez d'accord avec la cartographie K à quelque chose d'autre (choisissez une clé différente de votre choix), et en utilisant le marqueur ' comme marqueur temporaire, pourquoi ne pas le faire ?

:nmap K m'a<CR><Esc>`'

en appuyant maintenant sur K en mode normal sur le caractère après lequel vous voulez que le saut de ligne se produise, vous couperez la ligne et laisserez le curseur à l'endroit où il se trouvait.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X