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

192

Lorsque je copie quelque chose dans le presse-papiers et que j'appuie sur Ctrl+ Vdans 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?

Yasser Zamani
la source
25
Shift- Inserttravaille aussi
bonyiii
33
Je préfère Ctrl-Shift-V, personnellement.
Amalloy
3
Vous pouvez également utiliser Shift + Insert dans la plupart des environnements de shell.
Fabian
4
Et si vous n'avez pas de touche Insérer?
Ben Racicot
3
cela ne fonctionne pas aussi dans l'invite de commande de
Windows

Réponses:

360

À l'époque des terminaux physiques , il n'existait pas de presse-papiers au niveau de la session. Seuls quelques programmes étaient compatibles avec le copier / coller interne - souvent sous le nom de "tampons" ou "anneaux de destruction" - et utilisaient différentes frappes au clavier. Par exemple, le shell bash utilise CtrlKou CtrlUpour "tuer" (couper), CtrlYpour "tirer" (coller); cela vient de l' éditeur emacs .

CtrlCPresque partout dans Unix se trouvait la touche "interruption" , utilisée pour annuler le programme ou l'opération en cours. La CtrlVclé 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 Escpasse en mode commande dans le vi éditeur, mais CtrlV, Escinsère le ESCcaractère dans le document.

L’utilisation de CtrlCcopier et CtrlVcoller à partir du presse-papiers de la session a été introduite par Mac OS en 1983 et Microsoft Windows 3.x en 1990. (versions antérieures de Windows (1.x et 2.x), ainsi que IBM OS / 2 , pris en charge uniquement par les clés IBM CUACtrlIns à 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, les Ctrltouches de frappe étaient déjà utilisées par de nombreux programmes terminaux. De plus, l'interface graphique X avait des mécanismes quelque peu différents : "sélections" et "coupures de tampons". 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), ils CtrlV avaient déjà une signification complètement différente depuis de nombreuses années et ne pouvaient pas être modifiés. De plus, une autre méthode de copie de texte - la "sélection" - était déjà présente dans X11; une action copier / coller explicite a donc probablement été jugée moins importante que sous Windows. Cela signifie que différents raccourcis clavier devaient être sélectionnés - par exemple, la plupart des programmes de terminal modernes, tels que Terminal GNOME, utilisent CtrlShiftCet CtrlShiftV. (Si vous utilisez Xterm, les mêmes raccourcis peuvent être ajoutés manuellement à l'aide de Xresource XTerm * vt100 * translations . Rxvt ne dispose pas d'une telle option.)

(La plupart des toolkits X11 supportent également 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 - les CtrlInscopies dans le "presse-papiers" de la plupart des programmes (GTK, Qt4, mais ignorées par Xaw); cependant, les ShiftInspâtes sont issues de la "sélection principale" dans la plupart des programmes GTK et Qt4, mais de "presse-papiers" dans Firefox et des buffers désormais obsolètes du Xaw, devenu obsolète.)


Cela dit, certains terminaux ou consoles (notamment la console Windows 10) prennent en charge ces touches. Comme la console Windows avait toujours un mode "marque / sélection" distinct, elle a CtrlCdésormais deux significations basées sur le contexte: en mode normal, elle envoie une interruption, en mode sélection, elle est copiée dans le presse-papiers (comme Enterauparavant).

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

Grawity
la source
10
Hmm. Dans Vim, «tirer» signifie copier plutôt que coller. Cela semble avoir plus de sens aussi. Êtes-vous sûr de la signification de ce terme ici?
Konrad Rudolph
11
Oui, je suis sûr. Bash hérite des raccourcis par défaut de leurs équivalents Emacs .
Grawity
4
@grawity: votre dernier commentaire est un peu inadéquat. Bash propose deux modes d’édition en ligne de commande, vim-mode et emacs-mode. Il se trouve que le mode emacs est la valeur par défaut pour la plupart des installations. Cela soulève une ambiguïté dans l’utilisation du terme yank , même pour bash.
Rahmu
1
A-ha! Je savais que les développeurs de Vimperator avaient commis une erreur en <C-v>passant ià la version 3, mais je ne comprenais pas trop pourquoi .
Izkata
2
@Colin: Vous avez encore oublié la distinction entre le presse-papiers et la sélection X. Il y a plusieurs sélections (PRIMARY, SECONDARY, CLIPBOARD), mais une seule d'entre elles s'appelle généralement un "Presse-papiers" - la sélection CLIPBOARD, car c'est là que Ctrl-C copie dans, et c'est là que Ctrl-V colle. La sélection primaire n'est pas le presse-papiers.
Grawity
47

Utilisez CtrlShiftVpour coller.

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

Akash
la source
4
Alors pourquoi Linux n'enregistre pas CTRL + SHIFT pour des fonctions spéciales à la place; Je pense que le copier-coller est plus typique de certains utilisateurs que les fonctions spéciales, non?
Yasser Zamani
22
Les shells existaient bien avant les terminaux graphiques et les interfaces graphiques avec fonctionnalité copier / coller, votre argument n'est donc pas vraiment valide. @ YasserZamani
slhck
9
Ctrl + Maj + 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 déjà en dehors d'un environnement graphique, ou si vous utilisez un autre émulateur de terme, cela ne fonctionnera probablement pas. Ne pensez pas que cette commande est portable.
Rahmu
@rahmu Oh, je n'avais aucune idée de cela. Utilisez uniquement les stocks d’installations Ubuntu. Y a-t-il une commande universelle?
Akash
2
Il n'y en a probablement pas pour accéder au presse-papiers (uniquement Maj + Ins pour la sélection principale). Même le presse-papier lui-même est une chose X11, pas accessible à partir de tty. Cependant, Ctrl + Maj + V est pris en charge par les terminaux GNOME, Xfce4, KDE Konsole; cela couvre les environnements d'interface graphique les plus populaires.
Grawity
20

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

gnome-terminal (le plus populaire sous Linux)
Copier : CtrlShiftC
Coller : CtrlShiftV
Remarque : Sélectionner-copier et middle-clickcoller fonctionne également, mais il utilise un autre presse-papiers.

PuTTY (terminal le plus populaire dans Windows)
Copie : (sélectionner avec la souris, aucune interaction du clavier)
Coller : Right-click (ou plus fiable: shiftRight-click)
Remarque : les applications qui prennent entrée de la souris (comme vimet links) peut voler Right-click- shiftRight-clicktoujours travailler dans toutes les applications.


Copie de terminal OSX : AppleC
Coller : AppleV
Remarque: Les applications qui prennent le contrôle de la souris (comme vimet links) peuvent remplacer ce que signifie sélectionner du texte. Dans ce cas, la copie ne fonctionnera pas comme prévu. Dans ces cas, maintenez enfoncé Controlpendant 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.

tylerl
la source
N'est-il pas cmd.exeplus populaire que PuTTY sous Windows? :-)
Ben
@Ben Pas comme un terminal SSH.
Tylerl
1
Non, ce cmd.exen'est pas un terminal SSH. C'est très vrai.
Ben
3
@ Ben: Ce n'est pas du tout un terminal, seulement un shell. Le terminal par défaut de Windows est le composant "Console Windows" de csrss.
Grawity
@Ben mais le clic droit pour coller fonctionne également cmd.exe(et est le seul moyen d'y accéder si vous ne voulez pas ouvrir menu> modifier> coller) en mode d'édition rapide . Il n'y a pas de raccourci dans l'invite de commande pre-win10
phuclv
17

C'est une tradition profondément enracinée que la Ctrlclé 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. Ce calcul correspond Ctrl- Aà 1, etc. Par exemple Ctrl- Iis Taband Ctrl- Jis linefeed.

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

Les émulateurs de terminal doivent prendre en charge la tradition en respectant la Ctrlconvention de manière transparente , en la laissant apparaître comme une entrée de caractère 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- Vcomme commande, ce qui signifie "prend littéralement le prochain caractère". Cela vous permet d'intégrer 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, intercepter Ctrl- Vpour 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- Vce qui ne devrait pas générer de caractère. Ctrl- Shift- Vn'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- Vest une convention de Microsoft Windows, qui est une imitation de Apple- Vde Macintosh.

Kaz
la source
3
Ce n'est pas exactement une soustraction - traditionnellement, Ctrl a effacé les 6ème et 7ème bits du caractère; de ce fait, Ctrl + Maj + lettre fonctionne de la même manière que Ctrl + Lettre dans la plupart des terminaux (à moins qu’il soit explicitement remplacé par le terminal, comme dans le cas des raccourcis copier / coller).
Grawity
1
Étant donné que les clés sont essentiellement ordonnées de manière aléatoire par rapport à la norme ASCII, la ROM de programme comprend plusieurs tables de recherche qui facilitent la génération des codes ASCII. ... Si vous maintenez votre propre touche CONTROL enfoncée lorsque vous appuyez sur une autre touche, une autre table est consultée. [Manuel technique de la série VT100, 4.4.9.3, Numérique].
Kaz
1
@ Linger merci pour l'édition. Il rend bien, mais il est impossible que je tape tous ces <kbd>tags dans les prochains messages.
Kaz
Ctrl-Aest 1. Comment puis-je essayer cela? Mon terminal Gnome ne fait rien quand j'appuie sur Ctrl-A.
robert
3

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

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

Pedro Lobito
la source
1
Tant que vous avez une touche centrale de la souris.
jpierson
1
@jpierson pas que je le recommande vivement, mais vous pouvez écrire un petit script qui utilise simplement xdotool click 2pour émuler le troisième clic de bouton pour vous. Ensuite, quel que soit le gestionnaire de fenêtres / l’environnement de bureau dans mod ilequel vous vous trouvez, vous pouvez lier ce script à une clé - disons (pour l’insertion) ou à toute combinaison de touches dont vous pouvez disposer (ou quelle que soit la signification de mod - ce qui dépend vraiment de l'endroit où vous liez cela)
dylnmc
2

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

Copier : CtrlInsert
Coller :CtrlShiftInsert

Bharat
la source
1

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 chiot Linux qui ne semble pas supporter le comportement normal du clic droit et 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 central, très pratique! ;-)

m1cha3ll0w3
la source