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


Quand je copie quelque chose dans le presse-papier et que je presse Ctrl + V à Bash, rien ne se passe; Cependant, faites un clic droit et sélectionnez Coller Fait le travail.

Pourquoi? Y a-t-il un problème raisonnable (je suis sûr qu'il y en a) derrière ce comportement sous Linux?


169
2018-05-07 07:44


origine


Shift-Insert travaille aussi - bonyiii
je préfère Ctrl-Shift-V, personnellement. - amalloy
Vous pouvez aussi utiliser Maj + Insérer dans la plupart des environnements de shell. - Fabian
Que se passe-t-il si vous n'avez pas de touche Insérer? - Ben Racicot
il ne fonctionne pas dans l'invite de commande de Windows aussi - phuclv


Réponses:


Aux jours de physique terminaux, les presse-papiers au niveau de la session n'existaient pas, seuls quelques programmes supportaient le copier / coller interne - souvent sous le nom de "tampons" ou de "kill anneaux" - et utilisaient différentes séquences de touches. Par exemple, le frapper utilisations de shell CtrlK ou CtrlU "tuer" (couper), CtrlY "yank" (coller); cela vient de la emacs éditeur.

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

L'utilisation de CtrlC copier et CtrlV à coller depuis le presse-papiers à l’échelle de la session a été introduit par Mac OS en 1983 et Microsoft Windows 3.x en 1990. (Les versions antérieures de Windows (1.x et 2.x), ainsi que IBM OS / 2, ne supportaient que la IBM CUA clés CtrlIns copier et DécalageIns coller; ces raccourcis restent pris en charge par toutes les versions de Windows.)

Lorsque les interfaces graphiques avec prise en charge du presse-papier ont finalement atteint Unix, le Ctrl les touches étaient déjà utilisées par de nombreux programmes de terminal. De plus, l’interface graphique X avait quelque peu différents mécanismes: "sélections" et "couper les tampons". Même maintenant, vous pouvez sélectionner du texte dans un programme et l'insérer en utilisant le 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  déjà eu un sens complètement différent pendant de nombreuses années et ne pouvait être modifié. En outre, une autre méthode de copie de texte - la "sélection" - était déjà présente dans X11, de sorte que l'action copier / coller explicite n'était probablement pas aussi importante que dans Windows. Cela signifie que différents raccourcis clavier ont dû être sélectionnés - par exemple, la plupart des programmes de terminal modernes, comme le terminal GNOME, utilisent CtrlDécalageC et CtrlDécalageV. (Si vous utilisez Xterm, les mêmes raccourcis peuvent être ajoutés manuellement en utilisant Traductions XTerm * vt100 * Xresource. Rxvt n'a pas cette option.)

(La plupart des kits d'outils X11 prennent également en charge les clés CUA "copy" et "paste", qui ne sont pas en conflit avec les programmes du terminal. Malheureusement, les implémentations sont plutôt incohérentes - CtrlIns des copies dans le "presse-papier" de la plupart des programmes (GTK, Qt4, mais ignorés par Xaw); cependant, DécalageInscolle de la "sélection primaire" dans la plupart des programmes GTK et Qt4, mais à partir de "presse-papiers" dans Firefox, et à partir des tampons désormais obsolètes dans Xaw maintenant obsolète.)


Cela dit, certains terminaux ou consoles (notamment la console Windows 10) faire soutenir ces clés. Comme la console Windows avait toujours un mode "mark / select" séparé, CtrlC maintenant a également deux significations basées sur le contexte - en mode normal, il envoie une interruption, dans le mode de sélection, il copie dans le presse-papiers (tout comme Entrer habitué).

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


332
2018-05-07 08:03



Hmm. Dans Vim, "yank" signifie copie plutôt que coller. Cela semble aussi avoir plus de sens. Êtes-vous sûr de la signification de ce terme ici? - Konrad Rudolph
Oui, je suis sûr. Bash hérite des raccourcis par défaut de leurs équivalents Emacs. - grawity
@grawity: votre dernier commentaire est un peu trompeur. Bash propose deux modes d'édition en ligne de commande, vim-mode et emacs-mode. Il se trouve que emacs-mode est la valeur par défaut sur la plupart des installations. Cela soulève l’ambiguïté dans l’utilisation du terme coup sec, même pour bash. - rahmu
A-ha! je a connu les développeurs de Vimperator ont fait une erreur quand ils ont changé <C-v> à i dans la version 3, mais je ne pouvais pas tout à fait mettre le doigt sur Pourquoi. - Izkata
@Colin: Vous avez toujours manqué la distinction entre le presse-papiers et la sélection X. Il existe plusieurs sélections (PRIMARY, SECONDARY, CLIPBOARD), mais une seule d'entre elles est généralement appelée "presse-papier" - la sélection CLIPBOARD, car Ctrl-C copie vers et Ctrl-V colle. La sélection primaire n'est pas le presse-papier. - grawity


Utilisation CtrlDécalageV pour coller.

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


41
2018-05-07 07:45



Alors, pourquoi Linux n’enregistre pas CTRL + SHIFT pour des fonctions spéciales à la place; Je pense que le copier-coller est plus typique chez certains utilisateurs que les fonctions spéciales, non? - Yasser Zamani
Les coquilles existaient bien avant qu'il y ait des terminaux graphiques et des interfaces graphiques avec des fonctionnalités de copier / coller, de sorte que votre argument n'est pas vraiment valide. @YasserZamani - slhck
Ctrl + Shift + V est exécuté par l’émulateur de terminal (en supposant que vous utilisez le terminal GNOME) et non par bashlui-même Si vous êtes toujours en dehors d'un environnement graphique, ou si vous utilisez un autre terme, cela ne fonctionnera probablement pas. Ne pensez pas que cette commande est portable. - rahmu
@rahmu Oh, je n'en avais aucune idée. N'utilisez que des installations d'Ubuntu. Y a-t-il une commande universelle? - Akash
Il n'y en a probablement pas pour accéder au presse-papiers (seulement Shift + Ins pour la sélection principale). Même le presse-papiers lui-même est une chose X11, non accessible à partir de tty. Cependant, Ctrl + Shift + V est supporté par le terminal GNOME, le terminal Xfce4, KDE Konsole; Cela couvre les environnements d'interface graphique les plus populaires. - grawity


Voici vos paramètres de collage de copie à usage général avec les terminaux populaires:

gnome-terminal (le plus populaire sous Linux)
Copie: CtrlDécalageC
Coller: CtrlDécalageV
Remarque: Sélectionner pour copier et Clic du milieu coller aussi, mais il utilise un presse-papier alternatif.

PuTTY (terminal le plus populaire sous Windows)
Copie: (sélectionnez avec la souris, pas d’interaction au clavier)
Coller: Clic-droit  (ou plus fiable: décalageClic-droit)
Remarque: Applications prenant la souris (comme vim et links) peut voler Clic-droit - décalageClic-droit travaillera toujours dans n'importe quelle application.

Terminal OSX
Copie: PommeC
Coller: PommeV
Remarque: Applications qui prennent le contrôle de la souris (comme vim et links) peut remplacer ce que cela signifie de sélectionner du texte, auquel cas la copie ne fonctionnera pas comme prévu. Dans ces cas, maintenez enfoncé Contrôle 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
2018-05-07 21:22



N'est pas cmd.exe plus populaire que PuTTY sur Windows? :-) - Ben
@Ben Pas en tant que terminal SSH. - tylerl
Non, cmd.exe n'est pas un terminal SSH. C'est très vrai. - Ben
@Ben: Ce n'est pas du tout un terminal - seulement un shell. Le terminal par défaut dans Windows est le composant "Windows Console" de csrss. - grawity
@Ben mais clic droit pour coller fonctionne également sur cmd.exe (et est la seule façon là-bas, si vous ne voulez pas ouvrir le menu> éditer> coller) dans mode d'édition rapide. Il n'y a pas de raccourci dans l'invite de commande pré-win10 - phuclv


C’est une tradition profondément enracinée que le Ctrl Touche avec une lettre génère des caractères de contrôle ASCII trouvés en soustrayant 64 de la valeur ASCII de la lettre majuscule. Ces cartes de calcul Ctrl-UNE à 1, etc. Par exemple Ctrl-je est Languette et Ctrl-J est le saut de ligne.

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

Les émulateurs de terminaux doivent supporter la tradition en passant de manière transparente Ctrl convention, en le laissant apparaître comme entrée de caractères dans les programmes en cours d’exploitation via cette fenêtre de terminal. Les programmes basés sur le terminal mappent les touches de contrôle aux commandes. Par exemple, Bash utilise Ctrl-V comme une commande qui signifie "prenez littéralement le caractère suivant". Cela vous permet d'intégrer un caractère de contrôle dans la ligne de commande. Si le terminal vole des touches de commande pour son propre usage, ces commandes deviennent indisponibles. Donc intercepter Ctrl-V car une méta-fonction est hors de question (du moins dans une configuration par défaut).

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

Sur les ordinateurs de bureau 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 central colle ce texte ailleurs. Vous constaterez que cela fonctionne dans Xterm, Gnome Terminal et Firefox.

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


16
2018-05-07 14:34



Ce n'est pas exactement soustraction - traditionnellement Ctrl a effacé les 6ème et 7ème bits du personnage; de ce fait, Ctrl + Maj + lettre fonctionne de manière identique à Ctrl + Lettre dans la plupart des terminaux (à moins qu'il ne soit explicitement remplacé par le terminal, comme dans le cas des raccourcis copier / coller). - grawity
Comme les clés sont ordonnées de manière essentiellement aléatoire par rapport au standard ASCII, la ROM du programme comprend plusieurs tables de consultation qui facilitent la génération des codes ASCII. ... Si vous maintenez la touche CONTROL enfoncée lorsqu'une autre touche est pressée, cela provoque une autre consultation de la table. [Manuel technique de la série VT100, 4.4.9.3, Numérique]. - Kaz
@Linger Merci pour le montage. Il rend bien, mais il n'y a pas moyen que je tape tous ces <kbd> tags dans les prochains messages. - Kaz
Ctrl-A est 1. Comment puis-je essayer ça? Mon terminal Gnome ne fait rien quand j'appuie Ctrl-A. - robert


Nous pouvons utiliser le bouton Insérer un clavier pour copier et coller (Dans les anciens claviers, il peut manquer)

Copie: CtrlInsérer
Coller: CtrlDécalageInsérer 


2
2018-05-08 13:42





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

Sélectionnez le code que vous voulez, puis passez-le en cliquant sur le bouton touche centrale de la souris


2
2017-08-03 12:57



Tant que vous avez un bouton central de la souris. - jpierson
@jpierson pas que je recommande fortement cela, 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 quel environnement de gestionnaire de fenêtres / bureau, vous pouvez lier ce script à une clé, par exemple mod  i (pour insérer) ou tout autre raccourci que vous pourriez avoir disponible (ou tout autre moyen qui pourrait signifier - ce qui dépend vraiment de l'endroit où vous liez ceci) - dylnmc


Vous pouvez également utiliser le bouton central d'une souris si vous vous sentez paresseux et sélectionner une commande à partir d'un document texte, d'un script ou d'un site Web ou d'un forum. Une fois que vous avez sélectionné la commande souhaitée, déplacez-vous simplement vers votre terminal et cliquez sur le bouton central 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 coller. il le fait 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 central, très pratique! ;-)


1
2018-05-19 16:08