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 allumé x
):
if (some_condition) {[ ]return; }
Parfois, je pourrais vouloir entrer du code supplémentaire. J'appuie donc ipour passer en mode insertion, j'appuie Enterpour insérer le saut de ligne, puis je supprime l'espace supplémentaire. Ensuite, je passerais en mode normal et positionnerais le curseur avant l'accolade fermante, puis ferais la même chose pour l'obtenir sur sa propre ligne.
Je fais ça depuis un moment, mais il y a sûrement une meilleure façon de le faire?
vim
performance
text-editor
Mark A. Nicolosi
la source
la source
Réponses:
Pour l'exemple que vous avez donné, vous pouvez utiliser rEnterpour remplacer un seul caractère (l'espace) par Entrée. Ensuite, fspace.pour avancer vers l'espace suivant et répétez la dernière commande.
En fonction de vos paramètres d'autoindentification, les éléments ci-dessus peuvent ou non indenter correctement l'instruction de retour. Sinon, utilisez à la sEnterTabEscplace pour remplacer l'espace par une nouvelle ligne, indenter la ligne et quitter le mode d'insertion. Vous devrez remplacer le deuxième espace par une commande différente pour ne pas pouvoir utiliser «.» dans ce cas.
la source
>>
et<<
pour aider à l'indentation si vous ne souhaitez pas passer en mode insertion avecs
.Voici comment créer une macro qui insère une nouvelle ligne au niveau du curseur chaque fois que vous appuyez sur 'g' alors que vous n'êtes pas en mode insertion:
À partir de vim, saisissez:
Où:
Vous verrez ce qui suit au bas de votre fenêtre vim jusqu'à ce que vous appuyiez sur la dernière entrée:
Explication:
[Ctrl + V] signifie "citer le caractère suivant" - cela vous permet d'incorporer les caractères de nouvelle ligne et d'échappement dans la commande.
Vous mappez donc la touche 'g' à la séquence:
Ceci est vim pour insérer une nouvelle ligne avant le curseur, puis quitter le mode insertion .
Tweaks:
f}i^M^[O
- Cela f ind l' } et i nsert un autre saut de ligne, puis échapper du mode d'insertion et O stylo une ligne vide de vous d'entrer plus de code.Prendre plaisir!
la source
Un simple mapping pour casser la ligne au niveau du curseur en appuyant sur Ctrl + Entrée:
entre essentiellement en mode «insertion», insère un saut de ligne et retourne en mode normal.
placez-le dans votre fichier .vimrc pour une utilisation future.
la source
Si vous étendez généralement un bloc d'une ligne à trois lignes, essayez la substitution. Changez le support d'ouverture en support / retour et le support de fermeture en retour / support.
La commande pour remplacer crochet / retour par crochet ressemble à ceci:
Puisque vous souhaitez l'utiliser souvent, vous pouvez mapper la séquence complète à une frappe inutilisée comme ceci:
Là où vous voyez ^ M dans la séquence, tapez [Ctrl-V] , puis appuyez sur Entrée .
Maintenant, avec votre curseur n'importe où sur votre tabulation, appuyez sur la touche mappée et les retours chariot sont ajoutés.
Recherchez
:help map-which-keys
des conseils sur la sélection des frappes inutilisées à mapper.la source
g
n'est pas mappé car il est utilisé comme clé 'namespace' pour de nombreux mappages vim consistant en deux frappes (voir:h g
). Donc, cette cartographie est en fait interdite.g
déjà utilisée comme clé «d'espace de noms»?:help g
c'est une façon de voir une liste deg
mappages par défaut + quelque chose.z
,[
]
sont d'autres clés «d'espace de noms», voir par exemple:help index
. Vous pouvez appeler:verbose map g
pour voir tous les mappages définis en cours commençant par g. Les ressources Web utiles sont 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 )En supposant que vous êtes d'accord avec le mappage
K
vers autre chose (choisissez une clé différente de votre goût) et que l'utilisation du marqueur'
comme marqueur temporaire est acceptable, pourquoi ne pas faire cela?maintenant appuyer sur K en mode normal sur le caractère après lequel vous voulez que le saut de ligne se produise divisera la ligne et laissera le curseur là où il était.
la source
Vim supprimera automatiquement tout espace à droite du curseur si vous coupez une ligne en deux lorsque
autoindent
(ou toute autre aide à l'indentation) est activée.Si vous ne souhaitez pas utiliser l' un de ces paramètres, utilisez au
s
lieu dei
pour s ubstitute votre nouveau texte pour le blanc plutôt que d' insérer. (S'il y a plusieurs espaces, placez le curseur à l'extrême gauche et utilisez à lacw
place.)la source
Fondamentalement, lorsque vous divisez une ligne, vous voulez simplement insérer un retour chariot, ou dans le cas où vous êtes sur un espace, remplacez-le par un retour chariot. Eh bien, pourquoi se contenter de l'un ou de l'autre? Voici ma cartographie pour K:
J'utilise l'opérateur ternaire pour condenser les deux actions en une seule clé. Le décomposer,
<expr>
signifie que la sortie de la carte des touches peut être dynamique et dans ce cas dépend de la conditiongetline('.')[col('.')-1]==' '
qui est la longue façon de demander à vim si le caractère sous le curseur est un espace. Enfin, l'opérateur ternaire familier? :
remplace l'espace par un saut de ligne (r<CR>
) ou en insère un nouveau (i<CR><Esc>
)Vous avez maintenant une jolie carte de touches soeur pour la
J
commande.la source
Définissez ce mappage de clé dans votre vimrc
Appuyez ensuite sur Ctrl + m si vous souhaitez l'utiliser dans votre vim.
la source
À mon humble avis, le mappage intégré
gs
n'est pas un mappage utile (mettre vim en veille), on pourrait l'utiliser pour le fractionnement:la source
Dans Vrapper, vous pouvez utiliser gql qui divisera une ligne sans entrer en mode insertion, mais ne maintiendra pas toujours l'indentation.
la source
En fait, vous avez besoin des opérations combinées suivantes:
:
pour entrer en mode commandes/\s/\r/g
la source
Si vous avez l'entrée:
et veux sortir
Vous pouvez utiliser la commande
la source
J'ai trouvé que c'était la mise en œuvre la plus fidèle de ce à quoi j'attendrais le comportement opposé
J
Il fait la nouvelle ligne simpliste au curseur, s'occupe de tout espace blanc de fin sur la ligne précédente s'il y en a, puis ramène le curseur à la bonne position.
i <cr> <esc> - c'est l'une des solutions les plus courantes suggérées, elle ne supprime pas les caractères autres que les espaces sous votre curseur mais elle vous laisse également avec des espaces à la fin
^mw - aller au début de la nouvelle ligne et créer une marque sous
w
gk - monter d'une ligne
:silent! s/\v +$//<cr> - regex remplace tous les espaces à la fin de la ligne
:noh<cr> - Effacez toute recherche mettant en évidence que l'expression régulière aurait pu être activée
`w - renvoyer la marque sous
w
Combine essentiellement le meilleur des deux r<esc><cr>eti<cr><esc>
Remarque: j'ai cette borne Squi écrase potentiellement une clé utile, mais c'est un synonyme de ccet comme je ne l'utilise pas aussi souvent que je le fais, je suis d'accord pour l'écraser.
la source
o
ESC
la commande le fera pour vous.la source
Ce mappage interrompra toute fonction sur une ligne que vous avez. Placez simplement votre curseur sur la ligne et appuyez sur 'g' en mode normal:
Cela suppose que vous ayez un espace après l'accolade ouvrante et un espace avant l'accolade fermante. Voyez si cela fonctionne pour vous.
la source