Souvent, dans les fichiers de configuration, je peux copier et coller un bloc de lignes, puis je souhaite apporter de petites modifications à ce bloc. Après avoir collé, j'utilise x
pour supprimer les caractères que je veux supprimer, puis je continue pour coller le bloc suivant. Sauf x
met les caractères supprimés dans le presse-papiers, donc je dois recopier le bloc de lignes à nouveau.
Existe-t-il un moyen de le faire sans passer en mode insertion?
cut-copy-paste
register
durron597
la source
la source
Réponses:
Vos options sont:
_
. Par exemple, pour supprimer une ligne que vous tapez"_dd
. Cela supprime sans affecter le presse-papiers."ayy
puis pour coller vous taperez"ap
"0p
Courez
:help registers
pour plus de détails sur les 3 premiersla source
x
que j'utilise"_x
alors?x
, vous devriez probablement apprendre à déplacer les suppressions comme cellesdt)
qui sont supprimées jusqu'à la parenthèsed2W
fermante suivante qui supprime les deux jetons séparés par des espaces. Ensuite, vous pourriez faire quelque chose comme à l'"_di{
intérieur d'une région contreventée, ce que je fais tout le temps. En mode normal, cela signifie « supprimer tout ce qui se trouve à l' intérieur de cette région contreventée dans le trou noir »nnoremap x "_x
à mon~/.vimrc
(explication ici: stackoverflow.com/questions/54255/… ).x
ne met pas les choses dans le presse-papiers, il les met dans un registre . Si vous ne lui dites pas dans quel registre le mettre, il le place dans le registre sans nom, qui écrase bien sûr le contenu précédent. Donc, au lieu de cela, dites-lui quel registre utiliser" REGISTER x
:, où REGISTRE est une lettre unique. Vous utilisez ensuite le même préfixe de registre de cotation ppour coller à partir de ce registre. (Remarque: les minuscules remplacent leur contenu; les majuscules s'ajoutent).Il existe également deux registres spéciaux
"0
et"1
."0
est le ytexte le plus récemment extrait ( ), qui restera même si vous supprimez du texte avec une autre commande (comme x)."1
est le texte le plus récemment supprimé, tant que ce texte n'est pas petit (une ligne). Le petit texte supprimé entre"-
.Enfin, comme le souligne Steve Vermeulen, vous pouvez dire à vim de ne pas enregistrer le texte supprimé en spécifiant le registre des trous noirs
"_
.La commande d'aide appropriée est
:help registers
.la source
La
:let
commande vous permettra de redéfinir un registre nommé. Dans la ligne de commande de vim, en appuyant deux fois sur Control+ 1 puis sur le nom du registre, le contenu du registre sera collé dans la commande. Ensuite, vous pouvez ensuite modifier ce qu'il a collé et enregistrer le registre avec vos modifications.RExemple:
"fyy
la ligne entière (yy
) dans lef
registre ("f
).:let @f='
, et Control+ r, Control+ à rnouveau, puis f, et vous devriez le voir coller dans "Foo Bar", donc votre ligne de commande lit maintenant:let @f='Foo Bar
, avec le curseur à la toute fin.:let @f='foo bar baz
.:let @f='foo bar baz'
et appuyez sur Enter.Vous avez maintenant redéfini le contenu du
f
registre pour qu'il soit "foo bar baz".(Cela fonctionne également pour les macros!
:help let
Pour plus d'informations.)1 Control + rvous permet d'insérer un registre lorsque vous êtes déjà en mode insertion, comme si vous tapiez les caractères. L'utilisation de cette séquence deux fois est importante car "le texte est inséré littéralement, pas comme s'il était tapé. Cela diffère lorsque le registre contient des caractères comme
<BS>
". - le fichier insert.txt vimdoc,:help i_CTRL-R_CTRL-R
la source
"_
Concernant le registre des trous noirs mentionné par @derobert, vous pouvez trouver un screencast utile dans http://vimcasts.org/episodes/meet-the-yank-register/la source
Plugin ReplaceWithRegister
http://www.vim.org/scripts/script.php?script_id=2703 (2009-2014)
Il suggère la cartographie
gr
.gr
Sinon, utilisez
gr<text object>
pour le faire sans sélection visuelle. La répétition par points est prise en charge lorsque les pluginsrepeat.vim
de Tim Pope etvisualrepeat.vim
d'Ingo Karkat sont installés.la source