Je fais l'effort d'apprendre Vim.
Lorsque je colle du code dans mon document depuis le presse-papiers, j'obtiens des espaces supplémentaires au début de chaque nouvelle ligne:
line
line
line
Je sais que vous pouvez désactiver le retrait automatique, mais je ne peux pas le faire fonctionner car j'ai d'autres paramètres en conflit ou quelque chose (qui semblent assez évidents dans mon .vimrc mais ne semblent pas avoir d'importance lorsque je les supprime).
Comment désactiver la mise en retrait automatique lorsque je colle du code, mais que la mise en retrait automatique de vim est toujours active lorsque j'écris du code? Voici mon .vimrc
dossier:
set expandtab
set tabstop=2
set shiftwidth=2
set autoindent
set smartindent
set bg=dark
set nowrap
cat > mynewfile.txt
appuyer sur Entrée , coller votre texte, appuyer à nouveau sur Entrée , puis Ctr + D pour enregistrer. Le fichier est maintenant créé et vous pouvez le modifier avecvim mynewfile.txt
.Réponses:
Mise à jour: meilleure réponse ici: https://stackoverflow.com/a/38258720/62202
Pour désactiver l'indentation automatique lorsque vous collez du code, il existe un mode spécial "coller".
Type
Collez ensuite votre code. Notez que le texte de l'infobulle indique maintenant
-- INSERT (paste) --
.Après avoir collé votre code, désactivez le mode collage, afin que l'indentation automatique lorsque vous tapez fonctionne à nouveau correctement.
Cependant, j'ai toujours trouvé cela lourd. C'est pourquoi je mappe de
<F3>
telle sorte qu'il puisse basculer entre les modes coller et nopaste tout en éditant le texte! J'ajoute ceci à.vimrc
la source
:set noai
suivi:set ai
. La suggestion de:r! cat
est plus courte.set paste
c'est plus facile, certainement. C'est beaucoup plus sémantique quenoai
ou mêmenoautoindent
, ce qui est plus important lorsque vous tapez "noai" et "paste" prend environ le même temps insignifiant lorsque vous êtes assez compétent en tant que dactylographe.:set noai
ne fonctionne pas toujours, selon la façon dont les autres paramètres liés au retrait sont configurés conformément à l'OP.:set paste
semble être un raccourci pour plusieurs paramètres à la fois.set copyindent
vous vous en occuperez sans problème.:set paste
désactive également d'autres fonctionnalités telles que l'achèvement des accolades, ce qui n'est pas non plus souhaité lors du collage de code.Pour éviter les effets indésirables lors du collage, une option doit être définie:
Une commande utile à avoir dans votre .vimrc est
set pastetoggle=<F10>
ou un autre bouton, pour basculer facilement entre coller et nopaste.la source
nmap <silent> <leader>p :set paste<CR>"*p:set nopaste<CR>
J'utilise
:r! cat
et colle habituellement( shift + insert )
le contenu, puisCTRL+D
.Pas besoin d'activer et de désactiver, utilisation directe.
la source
:r! cat
fonctionne.:r
insère le contenu d'un fichier dans le document actuel.!cat
dit, exécutez cat qui ouvre essentiellement stdin (shells * nix)(shift + insert)
ou pour certains terminaux, un clic droit de la souris collera le contenu du presse-papiers au terminal enCTRL+D
fin de fichier, donc il fermera la:r !cat
session.paste
faite uniquement à cette fin? @jvriesem Ce n'est pas une option "directe", si ce que je suppose de votre compréhension de ce mot est correct.:r! cat
ensuiteCTRL+SHIFT+V
pour coller dans le terminal (puisCTRL+D
).Si vous travaillez localement, vous pouvez coller à partir du presse-papiers du système avec la séquence de touches:
"+p
Il s'agit d'une commande vim appropriée, donc pas besoin de s'inquiéter d'entrer dans un mode d'insertion ou de désactiver d'abord l'indentation automatique.
Bien sûr, si vous travaillez à distance (console sur SSH, par exemple), cela ne fonctionnera pas et vous devez passer en
:set noai
mode d'insertion, coller dans la console, quitter le mode d'insertion,:set ai
acheminer comme décrit ailleurs.la source
:set paste
et à la:set nopaste
place parce qu'en dépit d'être plus long, c'est plus facile à retenir et je n'ai pas besoin de le chercher à chaque fois!:set paste
n'est pas implémenté,:set noai
doit donc être utilisé à la place.<leader>p
.. très utile!Bien que le réglage du mode de
paste/nopaste/pastetoggle
collage avec soit parfaitement correct, vous devez toujours activer manuellement le mode de collage avant de coller et désactiver le mode de collage après le collage. Étant la personne paresseuse que je suis, voici la meilleure solution que j'ai trouvée jusqu'à présent, qui bascule automatiquement le mode de collage lorsque vous collez.Source: Coderwall
Remarque: Cette solution ne fonctionne pas dans WSL (sous-système Windows 10 pour Linux). Si quelqu'un a une solution pour WSL, veuillez mettre à jour cette réponse ou l'ajouter dans les commentaires.
Tmux Si vous utilisez tmux, les déclarations doivent être à double échappement. Le code pour cela est également dans Coderwall
la source
t_SI
et activent let_EI
bracketing et le désactivent. Lorsque le collage entre parenthèses est activé, le texte collé est précédéesc[200~
et suivi deesc[201~
.Les utilisateurs de Mac peuvent éviter le formatage automatique en lisant directement à partir de la table de montage avec:
la source
:.!pbpaste
, cela devrait fonctionner en remplaçant la ligne actuelle par la sortie du tampon de collage. En général, vim vous permet de diriger les données qui se trouvent dans votre fichier actuel vers un autre programme et de remplacer le texte par la sortie de la commande. Remplace donc:1,3!pbpaste
les trois premières lignes de votre fichier par le tampon de collage. J'utilise:.!ppjson
pour prendre une très longue (chaîne JSON non formatée) et la formater et remplacer la longue chaîne par l'équivalent formaté. ppjson est juste un script bash qui s'exécutepython -m json.tool
.Voici un article de quelqu'un qui a compris comment remapper l'événement de collage pour activer et désactiver automatiquement le mode de collage. Fonctionne pour moi dans tmux / iTerm sur MacOSX.
la source
Ajoutez ceci à votre
~/.vimrc
et vous n'aurez qu'à appuyer sur F2 avant et après le collage:la source
Je viens de mettre
set clipboard=unnamed
mon .vimrc. Cela fait la carte par défaut du tampon de collage dans le presse-papiers de X.Donc, si je marque un peu de texte dans un terminal, je peux simplement appuyer sur
p
pour le coller dans vim. De même, je peux extraire des choses dans vim (par exempleYY
pour extraire la ligne actuelle dans le tampon) et cliquer avec le bouton central dans n'importe quelle fenêtre pour la coller.Je ne sais pas. Je trouve ça super pratique.
la source
Lorsque vous travaillez à l'intérieur d'un terminal, le plug-in vim-bracketed-paste vim gèrera automatiquement les pâtes sans avoir besoin de touches avant ou après la pâte.
Il fonctionne en détectant le mode de collage entre parenthèses qui est une séquence d'échappement envoyée par des terminaux compatibles x-term "modernes" comme iTerm2, gnome-terminal et d'autres terminaux utilisant libvte. En prime, il fonctionne également pour les sessions tmux. Je l'utilise avec succès avec iTerm2 sur un Mac se connectant à un serveur Linux et utilisant tmux.
la source
Collez-le dans votre ~ / .vimrc et soyez heureux:
Edit: à la réflexion,
:r !cat
est une bien meilleure approche car elle est courte, sémantique et ne nécessite aucun vimrc personnalisé. Utilisez-le à la place!la source
Bien que
:pastetoggle
ou:paste
et:nopaste
devrait fonctionner correctement (si mis en œuvre - ils ne sont pas toujours comme nous pouvons le voir dans la discussion) je recommande fortement de coller en utilisant l'approche directe"+p
ou"*p
et de lire avec"+r
ou"*r
:Vim a accès à dix types de registres (
:help registers
) et l'intervenant est intéressé parquotestar
etquoteplus
depuis la section:help x11-selection
clarifie davantage la différence*
et+
:la source
Cela fonctionne pour moi (cas pour + registre, ce que j'utilise comme tampon d'échange entre aps):
la source
Si vous êtes sur un mac, macvim semble bien le gérer sans avoir à basculer la pâte.
installer brew macvim --override-system-vim
la source
.vimrc
dossier?Veuillez lire cet article: Basculer l'indentation automatique pour le collage de code
la source
La façon la plus rapide que je suis au courant de passer rapidement en mode coller-insertion pour une pâte one-shot est de tpope intact , qui présente
yo
etyO
, probablement mnémoniques pour « vous ouvrez ». Ils sont uniquement documentés dans son vimdoc, comme:la source
Une autre façon de coller est via
<CR>
et de supprimer le contenu du registre (ici le registre global). Voir::h i_ctrl-r
eth i_CTRL-R_CTRL-O
.Dans la documentation d'aide de vim:
Insert the contents of a register literally and don't auto-indent. Does the same as pasting with the mouse<MiddleMouse>. Does not replace characters! The '.' register (last inserted text) is still inserted as typed.{not in Vi}
Donc, pour coller du contenu dans vim sans retrait automatique, utilisez-le
<CR><CO>*
dans la plupart des systèmes Unix.Remarque: cela ne fonctionne que si vim est compilé avec
clipboard
.la source
De vim:
]p
De l'extérieur:
"*]p
ou"+]p
la source
Une autre réponse que je n'ai pas vue jusqu'à présent:
la source
La pâte native / pâte entre crochets est la meilleure et la plus simple depuis
vim 8
(sortie en 2016). Cela fonctionne même sur ssh! (La pâte entre crochets fonctionne sur Linux et Mac, mais pas sur Windows Git Bash)Assurez-vous d'avoir vim 8+ (vous n'avez pas besoin des options
+clipboard
ou+xterm_clipboard
).vim --version | head -1
Utilisez simplement la commande de collage natif du système d'exploitation (par exemple
ctrl+shift+V
oucmd+V
) en mode normal. N'appuyez pasi
pour le mode d'insertion.Tester
Copiez (
ctrl+shift+C
oucmd+C
) la sortie de ceci (2 lignes avec un retrait de tabulation) dans le presse-papiers du système:echo -e '\ta\n\tb'
Lancez un vim propre 8+ avec autoindent:
vim -u NONE --noplugin -c 'set autoindent'
Coller à partir du presse-papiers du système (
ctrl+shift+V
oucmd+V
) en mode normal. N'appuyez pasi
pour le mode d'insertion. Lea
etb
doit être aligné avec un seul retrait de tabulation. Vous pouvez même le faire en effectuant un transfert vers une machine distante (la machine distante aura besoin de vim 8+).Essayez maintenant l'ancienne méthode, qui induira automatiquement la deuxième ligne avec un onglet supplémentaire: Appuyez sur
i
pour le mode Insertion. Collez ensuite à l'aide dectrl+shift+V
oucmd+V
. Lea
etb
sont désalignés maintenant.Installation de Vim 8
Ubuntu 18.04 - est livré avec Vim 8 par défaut .
Ubuntu 16.04 - installez à partir d'un PPA .
brew install vim
la source
Featured snippet
pour ma recherche 'coller du contenu sans onglets vim', peut-être parce que j'ai utilisé le mot clé 'tab', uniquement dans cette réponse mentionnée :)Malheureusement, j'ai trouvé que le plugin vim mentionné ne fonctionnait pas avec iTerm2 3.0.15 (pour être honnête, je ne sais pas si cela s'est cassé sur les anciennes versions) - mais j'ai trouvé ce hack à la place.
Mappez la commande-p pour faire le collage et utiliser les clés vim iTerm2. Évidemment, cela ne fonctionne que pour iTerm2.
Comment ça fonctionne. J'utilise "jk" pour entrer en mode d'échappement, vous aurez donc également besoin:
: inoremap jk
dans votre .vimrc.
Ensuite, il appelle simplement P pour entrer en mode Coller, "+ p pour coller à partir du presse-papiers, puis P pour désactiver le mode Coller. Hth.
la source