211 votes

Pourquoi Ctrl + V ne colle-t-il pas dans Bash (shell Linux) ?

Lorsque je copie quelque chose dans le presse-papiers et que j'appuie sur Ctrl + V dans Bash, rien ne se passe ; cependant, en faisant un clic droit et en sélectionnant Coller, cela fonctionne.

Pourquoi ? Y a-t-il un problème valable (je suis sûr que oui) derrière ce comportement sur Linux ?

29 votes

Shift-Insert fonctionne également

38 votes

Je préfère Ctrl-Shift-V, personnellement.

3 votes

Vous pouvez également utiliser Shift + Insert dans la plupart des environnements de shell.

391voto

James Mertz Points 390

A l'époque des terminaux physiques, les presse-papiers étendus à la session n'existaient pas, seuls quelques programmes prenaient en charge la copie/collage interne - souvent sous le nom de "buffers" ou "kill rings" - et utilisaient des combinaisons de touches différentes. Par exemple, l'interpréteur de commandes bash utilise CtrlK ou CtrlU pour "tuer" (couper), CtrlY pour "yank" (coller); cela vient de l'éditeur emacs.

CtrlC presque partout dans Unix était la touche "d'interruption", utilisée pour annuler le programme ou l'opération en cours. La touche CtrlV signifiait souvent "insertion en mode texte brut" - c'est-à-dire, insérer le caractère suivant littéralement sans effectuer d'action associée. Par exemple, une touche Esc normale bascule en mode commande dans l'éditeur vi, mais CtrlV, Esc insérera le caractère ESC dans le document.

L'utilisation de CtrlC pour copier et CtrlV pour coller à partir du presse-papiers étendu à la session a été introduite par Mac OS en 1983 et Microsoft Windows 3.x en 1990. (Les versions antérieures de Windows (1.x et 2.x), ainsi qu'IBM OS/2, ne prenaient en charge que les touches IBM CUA CtrlIns pour copier et ShiftIns pour coller; ces raccourcis restent pris en charge par toutes les versions de Windows.)

Lorsque les interfaces graphiques avec support du presse-papiers ont enfin atteint Unix, les combinaisons de touches Ctrl étaient déjà utilisées par de nombreux programmes de terminal. De plus, l'interface graphique X avait des mécanismes différents: "sélections" et "buffers de coupure". Même maintenant, vous pouvez sélectionner du texte dans un programme et l'insérer en utilisant le bouton du milieu de la souris, sans aucune action de copie explicite.

En résumé, au moment où Xterm et GNOME Terminal ont été écrits (je suppose que vous utilisez ce dernier), CtrlV avait déjà une signification complètement différente depuis de nombreuses années et ne pouvait pas être modifié. De plus, une méthode alternative de copie de texte - la "sélection" - était déjà présente dans X11, donc l'action explicite de copier/coller était probablement considérée comme moins importante que ce serait le cas dans Windows. Cela signifie que différentes combinaisons de touches ont dû être sélectionnées - par exemple, la plupart des programmes de terminal modernes, comme GNOME Terminal, utilisent CtrlShiftC et CtrlShiftV. (Si vous utilisez Xterm, les mêmes combinaisons de touches peuvent être ajoutées manuellement en utilisant la ressource Xresource XTerm*vt100*translations. Rxvt n'a pas une telle option.)

(La plupart des boîtes à outils X11 prennent également en charge les touches CUA "copier" et "coller", qui ne interfèrent pas avec les programmes de terminal. Malheureusement, les implémentations sont assez incohérentes - CtrlIns copie dans le "presse-papiers" dans la plupart des programmes (GTK, Qt4, mais ignoré par Xaw); cependant, ShiftIns colle à partir de la "sélection primaire" dans la plupart des programmes GTK et Qt4, mais à partir du "presse-papiers" dans Firefox, et à partir des anciens buffers de coupure dans l'obsolète Xaw.)


Cela dit, certains terminaux ou consoles (en particulier, la console Windows 10) supportent ces touches. Comme la console Windows a toujours eu un mode "marquage/sélection" séparé, CtrlC a maintenant aussi deux significations basées sur le contexte - en mode normal, il envoie une interruption, en mode sélection, il copie dans le presse-papiers (tout comme Entrée l'était).

Pendant ce temps, les outils en ligne de commande de Windows n'ont jamais vraiment utilisé CtrlV pour quoi que ce soit, donc il était destiné à "coller" sans affecter grand-chose. Faire la même chose sur des terminaux de type Unix serait cependant plus problématique.

11 votes

Hmm. Dans Vim, «yank» signifie copier plutôt que coller. Cela semble avoir plus de sens, aussi. Êtes-vous sûr du sens de ce terme ici?

13 votes

Oui, je suis sûr. Bash hérite des raccourcis par défaut de leurs équivalents Emacs.

4 votes

@grawity: votre dernier commentaire est un peu mal orienté. Bash offre deux modes d'édition en ligne de commande, le mode vim et le mode emacs. Il se trouve juste que le mode emacs est celui par défaut sur la plupart des installations. Cela entraîne en effet une ambiguïté dans l'utilisation du terme yank, même pour bash.

50voto

Jason Galvin Points 113

Utilisez CtrlShiftV pour coller.

Ctrl avec d'autres caractères est généralement utilisé par le shell pour des fonctions spéciales.

5 votes

Alors pourquoi Linux n'enregistre pas CTRL+SHIFT pour les fonctions spéciales à la place ; Je pense que la copie-coller est plus courante chez certains utilisateurs que ces fonctions spéciales, non ?

23 votes

Les shells existaient bien avant l'apparition des terminaux graphiques et des interfaces utilisateur graphiques avec des fonctionnalités de copier-coller, donc votre argument n'est pas vraiment valable. @YasserZamani

9 votes

Ctrl+Shift+V est exécuté par l'émulateur de terminal (en supposant que vous utilisez GNOME Terminal) et non par bash lui-même. Si vous êtes jamais hors d'un environnement GUI, ou si vous utilisez un autre émulateur de terminal, cela ne fonctionnera probablement pas. Ne pensez pas que cette commande est portable.

23voto

mike511 Points 637

Voici vos paramètres de copier-coller généraux avec des terminaux populaires :

gnome-terminal (le plus populaire sur Linux)
Copier : CtrlShiftC
Coller : CtrlShiftV
Remarque : La sélection pour copier et le clic central pour coller fonctionnent également, mais utilisent un presse-papiers alternatif.

PuTTY (le terminal le plus populaire sous Windows)
Copier : (sélectionner avec la souris, pas d'interaction au clavier)
Coller : Clic droit (ou plus fiable : ShiftClic droit)
Remarque : Les applications qui prennent en compte l'entrée de la souris (comme vim et links) peuvent voler le Clic droit -- ShiftClic droit fonctionnera toujours dans n'importe quelle application.

Terminal OSX
Copier : AppleC
Coller : AppleV
Remarque : Les applications qui prennent le contrôle de la souris (comme vim et links) peuvent remplacer ce que signifie sélectionner du texte, auquel cas la copie ne fonctionnera pas comme vous vous y attendez. Dans ces cas, maintenez Control enfoncé pendant que vous faites glisser la souris pour sélectionner. L'interaction avec la souris est désactivée par défaut dans les paramètres de votre terminal, donc la plupart des gens ne le sauront même pas.

0 votes

N'est-ce pas cmd.exe plus populaire que PuTTY sur Windows ? :-)

0 votes

@Ben Pas en tant que terminal SSH.

1 votes

Non, cmd.exe n'est pas un terminal SSH. C'est tout à fait vrai.

18voto

Kaz Points 2554

Il s'agit d'une tradition profondément enracinée selon laquelle la touche Ctrl associée à une lettre génère des caractères de contrôle ASCII en soustrayant 64 de la valeur ASCII de la lettre en majuscule. Ce calcul associe Ctrl-A à 1, et ainsi de suite. Par exemple, Ctrl-I correspond à la touche Tab et Ctrl-J à la touche retour à la ligne.

Il n'y a pas de tradition similaire pour Ctrl-Shift. On ne s'attend pas à ce que Ctrl-Shift-V produise un caractère spécifique.

Les émulateurs de terminal doivent prendre en charge cette tradition en transmettant de manière transparente la convention Ctrl, afin qu'elle apparaisse comme une entrée de caractères pour les programmes utilisés via cette fenêtre de terminal. Les programmes basés sur des terminaux associent les touches de contrôle à des commandes. Par exemple, Bash utilise Ctrl-V comme une commande signifiant "prendre le prochain caractère littéralement". Cela permet d'intégrer un caractère de contrôle dans la ligne de commande. Si le terminal intercepte les touches de contrôle à des fins propres, de telles commandes deviennent indisponibles. Ainsi, intercepter Ctrl-V pour une méta-fonction est hors de question (du moins dans une configuration par défaut).

Cependant, les émulateurs de terminal sont libres d'intercepter Ctrl-Shift-V, qui n'est pas censé générer de caractère. Ctrl-Shift-V n'est pas une norme ; c'est une particularité de Gnome Terminal (qui peut être présente dans d'autres terminaux).

Sur les bureaux Unix basés sur X, il n'est pas nécessaire de recourir à une commande pour copier. Vous sélectionnez simplement le texte. Et le bouton central colle ce texte ailleurs. Vous constaterez que cela fonctionne de la même manière dans Xterm, Gnome Terminal et Firefox.

Ctrl-V est une convention de Microsoft Windows, qui imite Commande-V de Macintosh.

3 votes

Ce n'est pas exactement une soustraction -- traditionnellement, Ctrl a effacé les 6e et 7e bits du caractère ; c'est pourquoi Ctrl+Maj+lettre fonctionne de manière identique à Ctrl+Lettre dans la plupart des terminaux (sauf si elle est explicitement remplacée par le terminal, comme dans le cas des raccourcis copier/coller).

1 votes

Parce que les touches sont essentiellement ordonnées de manière aléatoire par rapport à la norme ASCII, le programme ROM comprend plusieurs tables de recherche qui aident à la génération des codes ASCII. ... Maintenir enfoncée la touche CONTROL lorsqu'une autre touche est pressée provoque une autre recherche dans la table. [Manuel technique de la série VT100, 4.4.9.3, Digital].

1 votes

@Linger merci pour l'édition. Cela rend bien, mais il est hors de question que je saisisse tous ces balises dans les prochains posts.

4voto

Pedro Lobito Points 744

Pour moi, la manière la plus simple de copier-coller dans le shell est :

Sélectionnez le code souhaité, puis collez-le en cliquant sur la touche du milieu de la souris

2 votes

Tant que vous avez une touche de souris centrale.

1 votes

@jpierson pas que je recommande fortement ceci, mais vous pouvez écrire un petit script qui utilise simplement xdotool click 2 pour émuler le clic du troisième bouton pour vous. Ensuite, dans n'importe quelle gestionnaire de fenêtres/environnement de bureau dans lequel vous vous trouvez, vous pouvez lier ce script à une touche - disons mod i (pour insérer) ou n'importe quelle combinaison de touches que vous avez disponible (ou peu importe ce que mod peut signifier - cela dépend vraiment de l'endroit où vous liez cela)

0 votes

Que cela fonctionne ou non n'a rien à voir avec le shell, mais avec le type d'émulateur de terminal que vous utilisez. De nombreux terminaux basés sur X permettent ce déplacement de la souris.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X