Je dois souvent coller des trucs sur une nouvelle ligne dans vim. Ce que je fais habituellement, c'est:
o<Esc>p
Ce qui insère une nouvelle ligne et me met en mode insertion, puis quitte le mode insertion, et enfin colle.
Trois frappes. Pas très efficace. De meilleures idées?
Réponses:
Peu de temps après,
:help p
il dit:Malheureusement, ce n'est pas plus court que votre solution actuelle, sauf si vous l'avez combiné avec une carte de clavier comme suggéré dans une réponse différente. Par exemple, vous pouvez le mapper à n'importe quelle clé (même
p
):la source
:pu[t]
mettra le texte dans une nouvelle ligne après la ligne actuelle,:pu[t]!
mettra le texte dans une nouvelle ligne avant la ligne actuelle. Je modifierai ma réponse en conséquence. (Hourra pour:help p
.):nmap p :pu<CR>
mettez-la dans votre fichier .vimrc et c'est parti :)Options:
1) Utilisez
yy
pour retirer toute la ligne (y compris le caractère de fin de ligne).p
collera alors la ligne sur une nouvelle ligne après la ligne actuelle etP
( Shift- P) collera au-dessus de la ligne courante.2) Faites un mapping: alors ce n'est qu'une ou deux clés:
3) La version de fonction du mappage (vraiment inutile, mais juste pour être complet):
la source
Vous pouvez coller un tampon en mode insertion en utilisant
<C-R>
suivi du nom du tampon à coller. Le tampon par défaut est"
, donc vous feriezJ'ai trouvé que j'utilise
<C-R>"
très souvent et je l'ai lié<C-F>
dans mon vimrc:la source
Cela utilise toujours trois touches, mais je trouve cela plus facile que Esc:
o<Alt-p>
Puisque vous êtes en mode insertion après avoir appuyé sur o, le modificateur Alt vous permettra d'utiliser une commande comme si vous ne l'étiez pas.
la source
En utilisant ce plugin: https://github.com/tpope/vim-unimpaired
]p
colle sur la ligne ci-dessous[p
colle sur la ligne ci-dessusavantages:
la source
tpope/vim-unimpaired
pour que cela fonctionne 😉.Personnellement, j'ai nommé Enter (CR) comme ceci:
... basé sur cet article de Vim Wikia.
De cette façon, je peux créer des nouvelles lignes directement à partir du mode normal, et en combinant cela avec le fait de vouloir coller à une nouvelle ligne ci-dessous, je ferais:
Vous pouvez également ignorer k dans le nmap ci-dessus, en fonction de la fonctionnalité que vous préférez dans Enter , donc ce serait juste
<CR>p
.J'ai également implémenté jj sur Esc , ce qui aiderait également dans ce cas. Esc est bien trop éloigné de la ligne d'accueil pour son importance dans vim.
Pas plus court que les autres solutions, mais je pense que cela semble moins maladroit que certaines d'entre elles, et il a également d'autres utilisations.
la source
Si vous copiez une ligne entière puis collez une ligne entière, utilisez
Y
pour retirer la ou les lignes, y compris le saut de ligne, en premier lieu, etp
pour coller. Vous pouvez également utiliserV
, qui est le mode de ligne visuelle , par opposition à plainv
pour le mode visuel.la source
J'ai la cartographie
inoremap jj <ESC>
. Il est donc facile d'insérer une nouvelle ligne avecojj
etOjj
puisp
.alors
ojjp
collez une nouvelle ligne. il a un coup de plus alorso<esc>p
maisojjp
c'est facile pour moi.la source
J'ai trouvé une solution élégante à cela. Si vous mettez le registre Yank dans le presse-papiers de votre système d'exploitation (ce qui est bien de toute façon), avec
que vous pouvez faire
o<Ctl-v>
.En plus d'être moins de traits, cela améliore les deux
o<Esc>p
et:pu
parce que cela préserve l'indentation: les deux autres options vous démarrent au caractère zéro sur la nouvelle ligne.La mise en garde est que cela peut ou non dépendre du système d'exploitation. Tout ce que je sais, c'est que cela fonctionne sur la version récente d'OS X, mais le presse-papiers n'est que l'un des nombreux moyens de se retrouver dans le presse-papiers du système d'exploitation.
la source
Si vous souhaitez également terminer en mode insertion, il est possible de coller en mode insertion en utilisant
CTRL-R "
. https://stackoverflow.com/a/2861909/461834Encore trois frappes, mais pas d'échappement, et vous enregistrez une frappe si vous voulez quand même terminer par insertion.
la source
J'utilise le mappage suivant dans ma configuration Neovim:
Une petite explication:
m`
: place une marque à la position actuelle du curseur.o<Esc>p
: créez une nouvelle ligne ci-dessous et collez le texte dans cette ligneO<Esc>P
: créez une nouvelle ligne au dessus et collez le texte dans cette ligne``
: place le curseur dans sa position d'origineVoir
:h mark
pour plus d'informations sur les marques dans Vim.la source
Si vous souhaitez rester en mode insertion, vous pouvez faire
o ctrl+o p
o
- insérer le mode et aller à la nouvelle lignectrl+o
- exécuter une seule commande comme en mode normalp
- pâteIl s'agit de trois frappes mais vous restez en mode insertion et
o ctrl+o
est également assez rapide, donc je le traite personnellement comme 2,5 frappes.la source
Cette solution ne semble s'appliquer que lorsque le bloc de texte copié commence sur une nouvelle ligne (par opposition à saisir un extrait de texte quelque part dans une ligne), mais vous pouvez toujours commencer votre copie sur le dernier caractère que vous souhaitez saisir, puis naviguer jusqu'au dernier caractère à la fin de la ligne avant le début du bloc de copie souhaité. Ensuite, lorsque vous souhaitez le coller, placez le curseur à la fin de la ligne sous laquelle vous souhaitez que votre texte soit collé et appuyez sur p. Si je n'ai pas foiré l'explication, cela devrait donner l'effet que vous recherchez.
la source