Pourquoi Terminal saisit-il automatiquement ma commande après avoir collé du texte?


9

Cela se produit si j'utilise ctrl + shift + v ou que je colle dans le menu contextuel.

Comment arrêter ce comportement?


Plus d'explications sont nécessaires pour comprendre votre question
SHW

Peut-être que ConEmu sur Windows fait ce que vous voulez - lorsque vous essayez de coller quelque chose qui contient des nouvelles lignes, il vous avertira avant de continuer. C'est une sorte de touche agréable. Peut-être qu'il y a un émulateur de terminal Linux qui a cette fonctionnalité?
Brandin

4
Je parie que vous copiez le "\ n" de fin (caractère de nouvelle ligne, vous ne verrez pas sur votre texte mais il est présent si vous avez un saut de ligne) lorsque vous copiez votre texte, cela émulera une pression sur la touche ENTER, exécutant ainsi la commander.
herbert

Copie possible de ceci - unix.stackexchange.com/questions/202732/… Je ne connaissais pas la "pâte entre crochets" mentionnée dans cette question. J'utilise généralement un éditeur de texte en combinaison avec le terminal, puis copiez / collez soigneusement les parties que je souhaite dans le terminal.
Brandin

Réponses:


6

Ne copiez pas plusieurs lignes de texte à coller. Je peux presque garantir que vous copiez simplement la dernière partie de la ligne. Si vous cliquez trois fois pour copier la ligne de code que vous collez, vous obtenez la nouvelle ligne à la fin de la ligne. Si vous voulez être sûr, c'est vraiment le problème, alors copiez la ligne entière, à l'exception de la dernière lettre / chiffre, et voyez si le collage qui inclut également une nouvelle ligne.


Cela ne s'est produit que lorsque j'ai copié plusieurs lignes de code. Maintenant je comprends pourquoi.
LostSoul

7

Le texte que vous collez comprend une nouvelle ligne de fin. Lorsque vous collez une nouvelle ligne, le shell exécuté dans le terminal voit cela comme une pression Enter, il exécute donc la commande.

L'opération de collage est effectuée par l'émulateur de terminal; il passe le texte collé à l'application en cours d'exécution dans le terminal, de la même manière qu'il passe le texte tapé par l'utilisateur. Voir Comment fonctionnent la saisie au clavier et la sortie du texte? pour plus d'informations sur le fonctionnement de l'entrée. L'application (ici, le shell) n'a aucun moyen de distinguer entre les frappes et une opération de collage.

De nos jours, de nombreux émulateurs de terminaux prennent en charge la pâte entre crochets . En mode collage entre crochets, l'application peut distinguer une opération de collage des frappes. La pâte entre crochets n'est utile que si l'application fait quelque chose de différent avec du texte collé, elle est donc activée en prenant en charge les applications, ce n'est pas quelque chose qui est configuré par l'utilisateur de l'émulateur de terminal.

Zsh 5.1 (qui est sorti il ​​y a quelques semaines, n'est donc pas encore disponible dans la plupart des distributions) ajoute la prise en charge du mode de collage entre crochets. Lorsque vous collez du texte, il est simplement inséré sur la ligne de commande et vous pouvez le modifier avant d'appuyer sur Enterpour exécuter la ligne de commande.

Les utilisateurs de oh-my-zsh peuvent utiliser le plug-in Safe-paste même dans les versions antérieures de zsh.

Une autre chose que vous pouvez faire dans zsh est de lui faire insérer la sélection sous forme de chaîne, avec des guillemets (sous forme de barres obliques inverses avant chaque caractère spécial du shell tel que les espaces). Tapez `xsel`pour obtenir la sélection principale (sélection automatique de la souris) ou `xsel -b`pour obtenir le contenu du presse-papiers (texte copié avec Ctrl+ C), puis appuyez sur Tab.

Si vous avez une ancienne version de zsh et que vous souhaitez insérer le contenu du presse-papiers sans citer, vous pouvez définir une fonction qui insère la sélection.

function zle_insert_x_selection {
  LBUFFER+=$(xsel ${NUMERIC+-b} -o </dev/null)
}
zle -N zle_insert_x_selection
bindkey '\e\C-v' zle_insert_x_selection

Avec ceci dans votre .zshrc, vous pouvez appuyer sur Ctrl+ Alt+ Vpour insérer la sélection principale, ou Ctrl+ U Ctrl+ Alt+ Vpour insérer le contenu du presse-papiers. Ils sont insérés avant le curseur, inchangés sauf sans retour à la ligne. Voir Partager le presse-papiers entre bash et X11 pour quelque chose de similaire dans bash.


7

Si vous utilisez bash comme shell, vous pouvez appuyer sur Ctrl-X Ctrl-Epour afficher un éditeur (défini par $ VISUAL ou $ EDITOR, par exemple viou peut-être nano).

Vous pouvez ensuite coller vos commandes exactement comme vous le feriez si vous éditiez un fichier. Ils seront exécutés si vous enregistrez et quittez. Ou annulé si vous quittez sans enregistrer.


Cette méthode ne fonctionne pas pour moi.
LostSoul

3

Pour faire un collage multiligne sur une invite de commande, ouvrez des guillemets simples ou doubles avant de les coller.

$ echo 'paste
...
... '

Ensuite, vous pouvez appuyer sur Retour pour l'écho. Lorsque vous faites une flèche vers le haut, toutes les lignes que vous avez collées seront sur une seule ligne modifiable.

Cela fonctionne tant qu'il n'y a pas une seule citation dans le texte que vous collez.


1

Dans une fenêtre d'éditeur de texte, utilisez les raccourcis suivants pour copier du texte sans \ n (le saut de ligne):

  • Shift+ Home, Ctrl+ Insert- copie une partie de la ligne avant le curseur.
  • Shift+ End, Ctrl+ Insert- copie une partie de la ligne après le curseur.
  • Home, Shift+ End, Ctrl+ Insert- copie toute la ligne sans \ n.

Dans une fenêtre de navigateur ou autre chose où le texte n'est pas modifiable, utilisez l'une des deux techniques suivantes:

  • Copiez d'abord dans un éditeur de texte (préféré, car vous donne la possibilité de modifier les commandes).
  • Sélectionnez uniquement le texte sur la ligne (sans étendre la zone de sélection vers la droite au-delà du dernier caractère), puis Ctrl+ Insertet collez-le dans une fenêtre de terminal.

À quoi ressemble une bonne sélection (sans \ n):

ls -al

À quoi ressemble une mauvaise sélection (avec \ n):

ls -al
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.