Supprimer newline dans Vim
y a-t-il un moyen de supprimer la nouvelle ligne à la fin d'une ligne dans Vim, de sorte que la ligne suivante soit ajoutée à la ligne actuelle?
par exemple:
Evaluator<T>():
_bestPos(){
}
j'aimerais mettre tout cela sur une seule ligne sans copier les lignes et les coller dans la précédente. Il semble que je devrais être en mesure de mettre mon curseur à la fin de chaque ligne, appuyez sur une touche, et avoir la ligne suivante, sautez sur le même que le curseur est sur.
fin résultat:
Evaluator<T>(): _bestPos(){ }
est-ce possible à Vim?
12 réponses
si vous êtes sur la première ligne, en appuyant sur (majuscule) J vous joindrez cette ligne et la ligne suivante ensemble, en enlevant la nouvelle ligne. Vous pouvez également combiner cela avec un nombre, ainsi en appuyant sur 3J
combinera toutes les 3 lignes ensemble.
certainement. Vim reconnaît le caractère \n comme une nouvelle ligne, donc vous pouvez simplement rechercher et remplacer. En mode Commande type:
:%s/\n/
alors que sur la ligne supérieure en mode normal, appuyez sur Shift + j .
vous pouvez aussi préparer un compte, donc 3J
sur la ligne du haut joindrait toutes ces lignes ensemble.
J
supprime l'espacement de tête supplémentaire (s'il y a lieu), en joignant les lignes avec un seul espace. (À quelques exceptions près: après /[.!?]$/
, deux espaces peuvent être insérés; avant /^\s*)/
, aucun espace n'est inséré.)
si vous ne voulez pas ce comportement, gJ
supprime simplement la nouvelle ligne et ne fait rien de intelligent avec les espaces du tout.
tout ce qui suit suppose que votre curseur est sur la première ligne:
utilisant les correspondances normales:
3 Poste + J "151990920
utilisant les commandes Ex:
:,+2j
qui est une abréviation de
:.,.+2 join
qui peut aussi être saisi par le raccourci suivant:
3 : j
Un encore plus courte commande Ex:
:j3
set backspace=indent,eol,start
dans votre .vimrc vous permettra d'utiliser backspace
et delete
sur \n
(newline) en mode insertion.
set whichwrap+=<,>,h,l,[,]
vous permettra de supprimer la LF précédente en mode normal avec X
(en col 1).
cela dépend probablement de vos paramètres, mais je le fais habituellement avec A<delete>
où A
est ajouté à la fin de la ligne. Il est probablement nécessaire "151920920 mode":)
<CURSOR>Evaluator<T>():
_bestPos(){
}
curseur à la première ligne
maintenant, en MODE NORMAL do
shift+v
2j
shift+j
ou
V2jJ
: normal V2jJ
il suffit d'appuyer sur A (ajouter à la fin de la ligne, vous met en mode insertion) sur la ligne où vous voulez supprimer la nouvelle ligne, puis appuyer sur Supprimer.
si vous n'avez pas l'esprit à l'aide d'autres shell outils,
tr -d "\n" < file >t && mv -f t file
sed -i.bak -e :a -e 'N;s/\n//;ba' file
awk '{printf "%s","151900920" }' file >t && mv -f t file
le problème est que les multiples char 0A (\n) qui sont invisibles peuvent s'accumuler. Supose vous voulez nettoyer de la ligne 100 à la fin:
taper ESC et: (terminal commander)
:110,$s/^\n//
Dans un script vim:
execute '110,$s/^\n//'
explication: de 110 jusqu'à la fin rechercher les lignes qui commencent par une nouvelle ligne (sont vides) et les enlever