web-dev-qa-db-fra.com

Coller en mode insertion?

Est-il possible de coller en mode insertion dans Vim?

357
Amir Rachum

En mode insertion, appuyez sur CTRL-R {register}

Exemples:

  • CTRL-R * va insérer dans le contenu du presse-papier
  • CTRL-R " (registre non nommé) insère la dernière suppression ou suppression.

Pour trouver cela dans l'aide de vim, tapez :h i_ctrl-r

422
david

Si vous ne voulez pas que Vim modifie le formatage du texte collé entrant, vous pouvez également envisager d'utiliser: :set paste. Cela empêchera Vim de re-tabuler votre code. Une fois le collage terminé, :set nopaste reviendra au comportement normal.

Il est également possible de basculer le mode avec une seule clé en ajoutant quelque chose comme set pastetoggle=<F2> à votre fichier .vimrc. Plus de détails sur le basculement automatique sont ici .

220
James Snyder

Non pas directement. Cependant, vous pouvez quitter rapidement le mode insertion pour un fonctionnement en mode normal avec Ctrl-O puis collez à partir de là qui finira par vous remettre en mode insertion.

Combo clé: Ctrl-Op

EDIT: Intéressant. Il semble qu'il existe un moyen comme plusieurs autres personnes l'ont mentionné.

119
JaredPar

En mode insertion, vous pouvez utiliser Ctrl-R {register}, où register peut être:

  • + pour le presse-papier,
  • * pour le presse-papiers X (dernier texte sélectionné dans X),
  • " pour le registre sans nom (dernière suppression ou yank dans Vim),
  • ou un certain nombre d’autres (voir :h registers).

Ctrl-R {register} insère le texte comme s'il était saisi.

Ctrl-R Ctrl-O {register} insère le texte avec l'indentation d'origine.

Ctrl-R Ctrl-P {register} insère le texte et le met automatiquement en retrait.

Ctrl-O peut être utilisé pour exécuter une commande en mode normal avant de revenir en mode insertion.
Ctrl-O "+p peut également être utilisé, par exemple.

Pour plus d'informations, consultez la documentation avec :h i_ctrl-r

27
Zaz

Vous pouvez l'utiliser pour coller du presse-papiers avec Ctrlv:

set pastetoggle=<F10>
inoremap <C-v> <F10><C-r>+<F10>

Et ceci pour une sélection visuelle dans le presse-papiers avec Ctrlc:

vnoremap <C-c> "+y

Si vous souhaitez également utiliser le presse-papiers par défaut pour vim yanking/coller classique (y/p) en mode normal, voici une option de configuration qui le fait:

set clipboard=unnamedplus

Avec cette configuration, vous pouvez par exemple tirez d’abord en mode normal puis collez avec Ctrlv en mode insertion. En outre, vous pouvez coller du texte provenant de différentes instances de vim et de différentes applications.

Une autre option est:

set clipboard=unnamed

Ensuite, vous pourrez simplement sélectionner quelque chose en faisant glisser la souris dans votre environnement X et le coller ensuite dans vim. Mais pour une raison quelconque, vous ne pourrez pas tirer quelque chose (y) à Vim et shiftinsert quelque part par la suite, ce qui est probablement très limitatif.

Vim docs à ce sujet: http://vim.wikia.com/wiki/Accessing_the_system_clipboard

Pour coller des registres personnalisés, vous pouvez suivre les autres réponses :). Cette réponse concerne principalement l’intégration de Vim dans le Presse-papiers de votre système.


Notez que pour que set clipboard=unnamedplus et set clipboard=unnamed fonctionnent, vous devez utiliser gvim ou vimx (vim-X11): ceux-ci sont compilés avec +xterm_clipboard. Vous pouvez éventuellement placer ceci dans votre .bashrc pour alias vim avec vimx:

if [ -e /usr/bin/vimx ]; then
    alias vim='/usr/bin/vimx'; # vim with +xterm_clipboard
fi

Vous pouvez savoir si votre vim a ou non le +xterm_clipboard dans les informations fournies par vim --version.

26
clime

Si vous configurez Vim pour utiliser le presse-papiers du système (:set clipboard=unnamed), alors tout texte que vous copiez dans Vim peut être collé à l'aide de Shift + InsertShift + Insert est simplement une combinaison de touches de collage à l'échelle de l'OS (Ctrl + Insert est la "copie" correspondante).

19
Will

Vous pouvez également utiliser le bouton central de la souris pour coller en mode insertion (Linux uniquement).

17
lcltj

Vous pouvez accéder au mode -- INSERT (past) -- via:

  • Combo clavier: yp

ou

  • :set paste et entrer en mode insertion (:set nopaste pour désactiver)

une fois en mode -- INSERT (past) --, utilisez simplement la fonction de collage de votre système (par exemple, CtrlShiftv sur Linux, Cmdv sur Mac OS).

Cette stratégie est très utile lorsque vous utilisez vim over ssh.

5
rudolph9

Oui. Sous Windows, Ctrl + V et Linux, appuyez simultanément sur les deux boutons de la souris.

Sous Windows, je pense que cette ligne de mon _vimrc le fait probablement:

source $VIMRUNTIME/mswin.vim

Sous Linux, je ne me souviens pas comment je l’ai fait. Il semble que j'ai probablement supprimé une ligne du fichier .vimrc par défaut.

4

Coller en mode insertion

Une carte personnalisée semble appropriée dans ce cas. C’est ce que j’utilise pour coller les éléments tirés en mode insertion:

inoremap <Leader>p <ESC>pa

Ma touche Leader est ici \; cela signifie que frapper \p en mode insertion collerait les éléments/lignes précédemment arrachés.

0
Sheharyar