web-dev-qa-db-fra.com

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

Quand je copie quelque chose dans le presse-papiers et que je presse Ctrl + V à Bash, rien ne se passe; Cependant, un clic droit et en sélectionnant Coller fait le travail.

Pourquoi? Existe-t-il un problème raisonnable (j'en suis sûr) derrière ce comportement sous Linux?

184
Yasser Zamani

À l'époque de terminaux , il n'existait pas de presse-papiers dans toute la session; seuls quelques programmes étaient compatibles avec le copier/coller interne - souvent sous le nom de "tampons" ou "anneaux de destruction" - et utilisaient diverses frappes au clavier. . Par exemple, le shell bash utilise CtrlK ou CtrlU pour "tuer" (couper), CtrlY "tirer" (coller); cela vient de l'éditeur d'emacs .

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

L'utilisation de CtrlC copier et CtrlV Mac OS en 1983 et Microsoft Windows 3.x en 1990 ont introduit le presse-papiers à coller dans toute la session. (Les versions antérieures de Windows (1.x et 2.x), ainsi que IBM OS/2, ne prenaient en charge que - IBM CUA clés CtrlIns copier et ShiftIns coller; ces raccourcis restent pris en charge par toutes les versions de Windows.)

Lorsque les interfaces graphiques avec support du presse-papiers ont finalement atteint Unix, le Ctrl les touches du clavier étaient déjà utilisées par de nombreux programmes terminaux. En outre, l’interface graphique X avait quelque mécanismes différents : "sélections" et "coupures de tampon". Même maintenant, vous pouvez sélectionner du texte dans un programme et l'insérer à l'aide du bouton central de la souris, sans aucune action de copie explicite.

En bref, 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 pendant de nombreuses années et ne pouvait pas être modifié. De plus, une autre méthode de copie de texte - la "sélection" - était déjà présente dans X11; une action explicite de copier/coller a donc probablement été jugée moins importante que dans Windows. Cela signifie que différents raccourcis clavier doivent être sélectionnés - par exemple, la plupart des programmes de terminal modernes, tels que Terminal GNOME, utilisent CtrlShiftC et CtrlShiftV. (Si vous utilisez Xterm, les mêmes raccourcis peuvent être ajoutés manuellement à l'aide de la traduction XTerm * vt100 * . Rxvt ne dispose pas d'une telle option.)

(La plupart des boîtes à outils X11 prennent également en charge les clés "copier" et "coller" de CUA, qui n'entrent pas en conflit avec les programmes terminaux. Malheureusement, les implémentations sont plutôt incohérentes - CtrlIns des copies dans le "Presse-papiers" dans la plupart des programmes (GTK, Qt4, mais ignorés par Xaw); cependant, ShiftIns les pâtes de la "sélection primaire" dans la plupart des programmes GTK et Qt4, mais du "presse-papiers" dans Firefox, et des buffers de coupe maintenant obsolètes dans le Xaw, désormais obsolète.)


Cela dit, certains terminaux ou consoles (en particulier la console Windows 10) ne prennent en charge ces clés. Comme la console Windows avait toujours un mode "marquer/sélectionner" séparé, CtrlC a également deux significations basées sur le contexte - en mode normal, il envoie une interruption, en mode de sélection, il copie dans le presse-papier (comme dans Enter habitué).

Pendant ce temps, les outils de ligne de commande Windows ne sont jamais vraiment utilisés  CtrlV pour quoi que ce soit, il était donc tenu de "coller" sans trop déranger. Faire la même chose sur des terminaux de type Unix serait toutefois plus problématique.

350
grawity

Utilisation CtrlShiftV pour coller.

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

45
Akash

Voici vos paramètres de copier-coller à usage général avec les terminaux courants:

gnome-terminal (le plus populaire sous Linux)
CopierCtrlShiftC
CollerCtrlShiftV
Note: Sélection pour copier et middle-click coller fonctionne également, mais utilise un autre presse-papiers.

PuTTY (terminal le plus populaire sous Windows)
Copier: (sélectionner avec la souris, aucune interaction avec le clavier)
CollerRight-click (ou plus fiable: shiftRight-click)
Note: Les applications qui prennent une entrée de la souris (comme vim et links) peuvent voler Right-click - shiftRight-click fonctionnera toujours dans n'importe quelle application.

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

17
tylerl

C’est une tradition profondément enracinée que le Ctrl La clé associée à une lettre génère ASCII caractères de contrôle trouvés en soustrayant 64 de la valeur ASCII de la lettre majuscule. Ce calcul cartographie Ctrl-A à 1, et ainsi de suite. Par exemple Ctrl-I est Tab et Ctrl-J est un saut de ligne.

Il n'y a pas de tradition similaire pour Ctrl-ShiftCtrl-Shift-V ne devrait pas produire de caractère spécifique.

Les émulateurs de terminaux doivent soutenir la tradition en passant de manière transparente à travers le Ctrl convention, en le laissant apparaître comme une saisie de caractères pour les programmes exécutés via cette fenêtre de terminal. Les programmes basés sur les terminaux associent les touches de commande aux commandes. Par exemple, Bash utilise Ctrl-V comme une commande qui signifie "prendre littéralement le prochain caractère". Cela vous permet d’incorporer un caractère de contrôle dans la ligne de commande. Si le terminal vole des touches de contrôle pour son propre usage, ces commandes ne sont plus disponibles. Donc interceptant Ctrl-V pour une méta-fonction est hors de question (au moins dans une configuration par défaut).

Cependant, les émulateurs de terminaux sont libres d'intercepter Ctrl-Shift-V qui ne devrait pas générer un personnage. Ctrl-Shift-V n'est pas une norme; c'est un truc Gnome Terminal (qui peut se trouver dans d'autres terminaux).

Sur les bureaux Unix basés sur X, la convention est qu'aucune commande n'est nécessaire pour copier. Vous venez de sélectionner le texte. Et le bouton du milieu colle ce texte ailleurs. Vous constaterez que cela fonctionne dans Xterm, Gnome Terminal et Firefox.

Ctrl-V est une convention de Microsoft Windows, qui est une imitation de Apple-V à partir du Macintosh.

16
Kaz

Pour moi, le moyen le plus simple de copier coller dans le shell est le suivant:

Sélectionnez le code que vous souhaitez puis collez-le en cliquant sur le bouton mouse-middle-key

3
Pedro Lobito

Nous pouvons utiliser le bouton Insérer un clavier pour faire un copier-coller (dans les anciens claviers, il peut être manquant)

CopierCtrlInsert
CollerCtrlShiftInsert

2
Bharat

vous pouvez également utiliser le bouton central de la souris si vous vous sentez paresseux et sélectionner une commande dans un document texte, un script, un site Web ou un forum. Une fois que vous avez sélectionné la commande souhaitée, il vous suffit de vous déplacer sur votre terminal et de cliquer sur le bouton du milieu de la souris. J'utilise cette méthode comme j'utilise Puppy Linux, qui ne semble pas supporter le comportement normal du clic droit et du coller. cela se produit dans une fenêtre de gestionnaire de fichiers, mais pas dans une fenêtre de terminal. Je ne sais pas pourquoi mais je suis plutôt content d'avoir découvert la méthode du bouton du milieu, très pratique! ;-)

1
m1cha3ll0w3