Est-il possible de coller en mode insertion dans Vim?
Est-il possible de coller en mode insertion dans Vim?
Réponses:
En mode insertion, appuyez sur CTRL-R {register}
Exemples:
CTRL-R *
insérera dans le contenu du presse-papiers CTRL-R "
(le registre sans nom) insère la dernière suppression ou copie. Pour trouver cela dans l'aide de vim, tapez :h i_ctrl-r
CTRL-R *
ne fonctionne que dans GVIM ou dans les versions compilées pour interagir avec x. Tapez vim --version
et recherchez +xterm_clipboard
. Si vous ne l'avez pas, vous avez besoin d'une version différente de vim. ( vim.wikia.com/wiki/Accessing_the_system_clipboard )
+clipboard
, vous n'avez besoin que de cela , mais si vous en avez, +xterm_clipboard
vous devriez l'avoir quand même. Sur certains systèmes d'exploitation xterm_clipboard
n'est pas applicable.
*
registre est collable avec un clic du milieu avec +
le copier / coller traditionnel. standards.freedesktop.org/clipboards-spec/clipboards-latest.txt
Si vous ne voulez pas vim pour le formatage dans mangle entrant texte collé, vous pouvez également envisager d' utiliser: :set paste
. Cela empêchera Vim de ré-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 touche, en ajoutant quelque chose comme set pastetoggle=<F2>
à votre .vimrc. Plus de détails sur le basculement du retrait automatique sont ici .
:set nopaste
désactivera le mode collage
:set paste!
probablement que le collage est très proche de votre historique de commandes, vous pouvez donc simplement appuyer sur ':', puis sur une flèche vers le haut et ajouter un '!'.
:set paste!
Merci :)
!
à la fin de la commande vim
active ou désactive la commande. De cette façon, vous n'avez pas à taper à la :set nopaste
place, vous pouvez faire défiler votre historique et exécuter à nouveau la même commande ( :set paste!
).
Non pas directement. Cependant, vous pouvez quitter rapidement le mode insertion pour une seule opération en mode normal avecCtrl-O puis coller à partir de là, ce qui se terminera par vous remettre en mode d'insertion.
Combo clé: Ctrl-O p
EDIT: Intéressant. Il semble qu'il existe un moyen, comme plusieurs autres personnes l'ont indiqué.
esc + p
?
esc + p + i
et certainement plus facile à taper queCTRL-R + "
CTRL-R "
. Par exemple, bien que les paramètres vimrc puissent changer cela, coller quelque chose dans une nouvelle ligne à l'aide de CTRL-O p
son retrait disparaît.
En mode insertion, vous pouvez utiliser Ctrl-R {register}
, où le registre peut être:
+
pour le presse-papiers,*
pour le presse-papiers X (dernier texte sélectionné en X), "
pour le registre sans nom (dernière suppression ou coup sec dans Vim),:h registers
).Ctrl-R {register}
insère le texte comme s'il avait été tapé.
Ctrl-R Ctrl-O {register}
insère le texte avec le retrait d'origine.
Ctrl-R Ctrl-P {register}
insère le texte et le met en retrait automatiquement.
Ctrl-O
peut être utilisé pour exécuter n'importe quelle commande en mode normal avant de revenir en mode insertion, il
Ctrl-O "+p
peut donc également être utilisé, par exemple.
Pour plus d'informations, consultez la documentation avec :h i_ctrl-r
Vous pouvez l'utiliser pour coller à partir du presse-papiers avec Ctrlv:
set pastetoggle=<F10>
inoremap <C-v> <F10><C-r>+<F10>
Et ce pour tirer la 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 le vim yanking / collage ( y/ p) classique en mode normal, voici une option de configuration qui le fait:
set clipboard=unnamedplus
Avec cette configuration, vous pouvez par exemple tirer d'abord en mode normal, puis coller avec Ctrlv en mode insertion. En outre, vous pouvez coller du texte à partir 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) dans Vim etshiftinsert ailleurs ailleurs, ce qui est probablement assez limitant.
Documents Vim à ce sujet: http://vim.wikia.com/wiki/Accessing_the_system_clipboard
Pour coller à partir de 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 set clipboard=unnamedplus
et set clipboard=unnamed
pour travailler, vous devez utiliser gvim ou vimx ( vim-X11
): ceux-ci sont compilés avec +xterm_clipboard
. Vous pouvez éventuellement mettre ceci dans votre .bashrc
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 +xterm_clipboard
les informations fournies par vim --version
.
:set paste
et le byzantin <leader><leader> * y
est même souhaitable à distance? Pour ne pas avoir l'air trop engagé, je suis vraiment curieux de savoir quelle philosophie vim cela reflète, ou si ce n'est qu'un malheur historique.
inoremap <S-Insert> <F12><C-r>+<F12>
(j'utilise F12 comme pastetoggle). Merci.
Si vous définissez Vim pour utiliser le presse-papiers du système ( :set clipboard=unnamed
), tout texte que vous copiez dans Vim peut être collé à l'aide de Shift+ Insert. Shift+ Insertest simplement une combinaison de touches de collage à l'échelle du système d'exploitation ( Ctrl+ Insertest la «copie» correspondante).
p
coller le texte dans le presse-papiers?
Shift + Insert
pour coller le texte, nous devons être en mode insertion.
Vous pouvez également utiliser le bouton central de la souris pour coller en mode insertion (Linux uniquement).
Vous pouvez entrer en -- INSERT (past) --
mode via:
ou
:set paste
et entrer en mode insertion ( :set nopaste
pour désactiver)une fois dans -- INSERT (past) --
mode, utilisez simplement la fonction de collage de votre système (par exemple CtrlShiftvsous Linux, Cmdvsous Mac OS).
Cette stratégie est très utile lors de l'utilisation de vim sur ssh.
Oui. Sous Windows Ctrl+V et Linux, appuyez sur les deux boutons de la souris presque simultanément.
Sous Windows, je pense que cette ligne dans 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.
Une carte personnalisée semble appropriée dans ce cas. Voici ce que j'utilise pour coller des éléments tirés en mode insertion:
inoremap <Leader>p <ESC>pa
Ma Leader
clé ici est \
; cela signifie que frapper \p
en mode insertion collerait les éléments / lignes précédemment tirés.
Ajoutez simplement la carte:
" ~/.vimrc
inoremap <c-p> <c-r>*
redémarrez vim et lorsque vous appuyez sur Crtl+p
en mode insertion, le texte copié sera collé