Question Désactivation de l'indentation automatique lors du collage de texte dans vim


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 parce que j'ai d'autres paramètres en conflit ou quelque chose (ce qui semble assez évident dans mon .vimrc mais ne semble pas important quand je les retire).

Comment désactiver le retrait automatique lorsque je colle du code, mais que j'ai toujours un retrait automatique lorsque j'écris du code? Voici mon .vimrc fichier:

set expandtab  
set tabstop=2  
set shiftwidth=2  
set autoindent  
set smartindent  
set bg=dark  
set nowrap  

955
2018-03-25 09:52


origine


Réponses:


Pour désactiver l'autoindent lorsque vous collez du code, il existe un mode "coller" spécial.

Type

:set paste

Puis collez votre code. Notez que le texte de l'info-bulle indique maintenant -- INSERT (paste) --.

Après avoir collé votre code, désactivez le mode coller, de sorte que l'indentation automatique lorsque vous tapez fonctionne à nouveau correctement.

:set nopaste

Cependant, j'ai toujours trouvé cela encombrant. Voilà pourquoi je cartographie <F3> de sorte qu'il peut basculer entre les modes pâte et nopaste en éditant le texte!  J'ajoute ceci à .vimrc

set pastetoggle=<F3>

1688
2018-03-25 10:02



Pour éviter les effets indésirables lors du collage, une option doit être définie:

set paste

Une commande utile à avoir dans votre .vimrc est set pastetoggle=<F10> ou un autre bouton, pour basculer facilement entre pâte et nopaste.


247
2018-03-25 10:15



J'utilise habituellement :r! cat puis coller ( shift + insert ) le contenu, et CTRL+D.

Pas besoin d'activer et désactiver, utilisation directe.


120
2018-03-30 12:50



Si vous travaillez localement, vous pouvez coller à partir du presse-papiers du système avec la séquence de touches:

"+p

C'est une commande vim appropriée, donc pas besoin de s'inquiéter d'entrer dans un mode d'insertion ou d'éteindre l'autoindent en premier.

Bien sûr, si vous travaillez à distance (console sur SSH, par exemple) alors cela ne fonctionnera pas et vous devriez aller le :set noai, insérer le mode, coller dans la console, laisser insertmode, :set ai itinéraire comme décrit ailleurs.


77
2017-11-05 07:45



Les utilisateurs Mac peuvent éviter la mise en forme automatique en lisant directement depuis le carton avec:

:r !pbpaste

35
2017-08-28 12:58



Voici un post par quelqu'un qui a trouvé comment remapper l'événement de collage pour activer automatiquement le mode coller sur puis revenir en arrière. Fonctionne pour moi dans tmux / iTerm sur MacOSX.


18
2018-02-08 20:30



Ajoutez ceci à votre ~/.vimrc et vous n'aurez qu'à appuyer F2 avant et après le collage:

set pastetoggle=<F2>

12
2018-03-22 17:27



En réglant le mode pâte avec paste/nopaste/pastetoggle est parfaitement bien, vous devez activer manuellement le mode collage avant de coller et désactiver le mode collage après le collage. Être la personne paresseuse que je suis, ci-dessous est la meilleure solution que j'ai trouvé jusqu'ici, qui bascule automatiquement le mode coller lorsque vous collez.

Voici une petite astuce qui utilise le mode pâte entre parenthèses   activer / désactiver automatiquement le mode collage de Vim lorsque vous collez. Mettez après   dans votre .vimrc:

let &t_SI .= "\<Esc>[?2004h"
let &t_EI .= "\<Esc>[?2004l"

inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()

function! XTermPasteBegin()
  set pastetoggle=<Esc>[201~
  set paste
  return ""
endfunction

Vous pouvez maintenant coller sans activer ou désactiver explicitement le mode Coller.   géré automatiquement pour vous.

La source: Coderwall


12
2017-07-08 04:00



Je viens de mettre set clipboard=unnamed dans mon .vimrc. Cela rend le tampon de collage par défaut mappé au presse-papiers de X.

Donc, si je marque un peu de texte dans un terminal, je peux simplement appuyer sur ppour le coller dans vim. De même, je peux tirer des choses dans vim (par ex. YY pour tirer la ligne courante dans le tampon) et le clic du milieu dans n'importe quelle fenêtre pour le coller.

Dunno. Je trouve cela super pratique.


9
2018-01-20 11:15