Puis-je utiliser la souris pour sélectionner correctement du texte en moins?

9

Je viens de découvrir que je peux ajouter les lignes suivantes à ~/.vimrc.

set mouse=a
:vmap <C-C> "+y

Cela a pour effet de pouvoir sélectionner du texte avec la souris (c'est-à-dire en mode visuel), puis de copier le texte réel dans le presse-papiers X avec Ctrl+ c. Cela diffère de la copie par défaut du terminal, car c'est le vrai texte que je copie, pas ce que le terminal voit. Par exemple, s'il y avait des tabulations dans le texte, je les copiais auparavant en tant qu'espaces.

Existe-t-il un moyen de faire moins se comporter de la même manière? c'est-à-dire que je peux copier mot pour mot ce qui se trouve dans le fichier texte que je consulte en moins?

Sparhawk
la source
Avez-vous essayé avec gpm?
YoMismo
@YoMismo Non. Je ne sais pas vraiment comment cela pourrait aider, car l'émulateur de terminal contiendrait toujours des espaces littéraux au lieu d'onglets, dans l'exemple ci-dessus.
Sparhawk
Désolé, je pensais que vous travailliez dans la console, pas dans un terminal X: - /
YoMismo

Réponses:

5

Pas une tâche pour moins

Non,
je ne pense pas que vous puissiez le faire directement, car less n'a pas de curseur pour commencer.
Il en faudrait un pour naviguer au début et à la fin du texte à sélectionner.
lessn'est tout simplement pas le bon outil pour la navigation au niveau des personnages.

Onglets déjà développés

Vous pouvez utiliser la touche shiftet la souris pour faire une sélection; Ceci est géré par le terminal, pas par moins. Mais le terminal ne sait pas comment les espaces et les tabulations sont disposés - moins l'interprétation des tabulations en interne et n'écrit que des caractères " " normaux à l'écran.

Il existe des outils comme screen, tmux et byobu, qui peuvent faire beaucoup de choses impressionnantes dans ce domaine. Je n'ai pas vérifié, mais je suppose que ces multiplexeurs de terminaux n'ont aucun moyen de contourner cela - étant des terminaux, au final - et se comporteront de la même manière.

Utilisez vim

Si vous montrez un fichier less, il y a une bonne solution:
Appuyez sur la touche vdans lesspour ouvrir le fichier en cours dans vim- Asuming votre $EDITORetc. , est mis en place pour vim.

Cela ne fonctionne pas lors de l'affichage de stdin à partir d'un pipeline, bien qu'il existe des solutions de contournement .

Défilement de la souris, au moins

Mais vous pouvez au moins faire défiler avec la molette de la souris:

Cela semble même être activé par défaut, mais les événements de la molette de la souris sont supprimés par une option différente.

Pour un test rapide, essayez:

LESS=-r man less

L'option -X( --no-init) bloque le défilement - vérifiez ce que LESScontient votre variable d'environnement :

$ echo $LESS

L'option -q( --quiet, --silent) cause également des problèmes, selon SU: Comment faire défiler la molette de la souris avec moins de pageur en utilisant bash et gnome-terminal?

Volker Siegel
la source
Très bonne réponse. La vclé est fantastique! (J'ai pris la liberté d'une solution de contournement sympa pour le faire fonctionner également dans les pipelines.) FWIW dans mon émulateur de terminal (terminateur) Je n'ai pas à maintenir la touche Maj lorsque je sélectionne du texte.
Sparhawk
@Sparhawk Hé, la solution de contournement est au moins aussi fantastique!
Volker Siegel
2
De plus, il y a un téléavertisseur appelé vimpagerque vous pouvez utiliser pour remplacer la lessvente entière. Il utilise vimen fait juste enveloppé dans un petit script.
HalosGhost
1
@HalosGhost Merci pour cela. vimpagersemble assez cool, mais j'ai eu des problèmes avec le tirage qui me fait préférer utiliser moins et v.
Sparhawk
@Sparhawk Techniquement, vous pouvez comparer le vimrc utilisé ou utiliser des parties de votre vimrc normal vimpagerjusqu'à ce qu'il fonctionne; (J'essaie de ne pas activer tous mes vimplugins au démarrage vimpager...)
Volker Siegel
3

Vous pouvez copier la ligne supérieure affichée dans lessla sélection X11 CLIPBOARD en tapant avec less:

|.head -n1|xclip -sel c<Enter><Enter>

Cela redirige le moins de tampon de la ligne supérieure vers la .marque (donc en fait tout le contenu de l'écran) vers la head -n1|xclip -sel ccommande (pour stocker la première ligne de celle-ci dans la sélection CLIPBOARD)

Vous pouvez configurer votre émulateur de terminal pour coller cette chaîne lors d'une pression de touche donnée, ou la lier à une touche ou à une combinaison de lesstouches dans les raccourcis clavier. Par exemple, pour le lier sur Alt+C:

printf '%s\n' '#commands' '\ec pipe .head -n1|xclip -sel c\n' | lesskey -

Notez cependant que vous devrez appuyer sur Enteraprès pour confirmer l'invite "| done (appuyez sur RETOUR)".

Avec xterm, vous pouvez également définir un nouveau mode de sélection, par exemple ici lorsque vous maintenez Ctrl+Altlors de l'extension de la sélection qui indique lessquelles lignes copier à partir de son écran actuel:

Écrivez un lesspastescript comme:

#! /bin/sh -
start=${1%%";"*}
end=${1#*" "}
end=${end%";"*}
head -n "$((end))" | tail -n "$((end - start + 1))" | xclip -sel c

Et définissez les tables de traduction xterm (ici sur la ligne de commande pour les tests, mais vous voudrez l'ajouter à un fichier de ressources X):

xterm -xrm 'XTerm.VT100.translations: #override \
  Meta Ctrl<Btn1Down>: select-start()\n\
  Meta Ctrl<Btn1Motion>: select-extend()\n\
  Meta Ctrl<Btn1Up>: select-end(SECONDARY) \
    insert-formatted("|.lesspaste '\''%P %p'\''\n\n", SECONDARY)'

Vous marqueriez ensuite les lignes à coller en faisant glisser la souris en Ctrl+Altmaintenant enfoncée, et en relâchant le bouton 1, xterm en dirait moins pour diriger l'écran actuel vers notre lesspastescript avec les coordonnées de début et de fin passées comme un argument ( y1;x1 y2;x2).

(notez qu'il peut ne pas fonctionner correctement s'il lessest invoqué avec -spour compresser les lignes vides (comme cela est typique lorsqu'il est invoqué par man), car l'entrée alimentée lesspasten'aura pas ses lignes vides compressées (donc les décalages de numéro de ligne peuvent être incorrects)) .

Stéphane Chazelas
la source
@Sparhawk, voir modifier.
Stéphane Chazelas
Cela ne semble pas fonctionner pour moi. Rien de nouveau n'est dans le presse-papiers. Est lesscensé donner une rétroaction? jne semble rien faire pour moi.
Sparhawk
@Sparhawk, avez-vous des raccourcis clavier personnalisés pour less, jdéfile d'une ligne ( forw-line) dans le raccourci clavier par défaut (en fait J( forw-line-force) serait mieux ici, je vais modifier). |devrait vous donner quelques commentaires. (invite pour la marque, puis la commande pour entrer).
Stéphane Chazelas
Non, je ne l'ai pas fait, mais je testais avec du texte qui faisait moins d'une page, alors c'est peut-être pourquoi je jn'ai rien fait. La première option fonctionne désormais (+1). La deuxième option semble assez compliquée avec quelques mises en garde, donc je ne l'ai pas essayée. Je pense que vc'est assez bon pour moi.
Sparhawk