Posso usare il mouse per selezionare correttamente il testo in meno?


9

Ho appena scoperto che posso aggiungere le seguenti righe a ~/.vimrc.

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

Ciò ha l'effetto di essere in grado di selezionare il testo con il mouse (cioè in modalità visiva), quindi di copiare il testo effettivo negli Appunti X con Ctrl+ c. Ciò differisce dalla copia predefinita dal terminale, poiché è il vero testo che sto copiando, non quello che vede il terminale. Ad esempio, se nel testo fossero presenti schede, in precedenza le avrei copiate come spazi.

C'è un modo per far comportare meno allo stesso modo? cioè posso copiare alla lettera ciò che è nel file di testo che sto visualizzando in meno?


Hai provato con gpm?
YoMismo,

@YoMismo No. Non sono davvero sicuro di come ciò possa aiutare, poiché l'emulatore di terminale conterrebbe comunque spazi letterali anziché tab, nell'esempio sopra.
Sparhawk,

Scusa, pensavo che avessi lavorato nella console, non in un terminale X: - /
YoMismo,

Risposte:


5

Non è un compito per meno

No,
non penso che tu possa farlo direttamente, perché meno non ha un cursore per cominciare.
Avrebbe bisogno di uno per navigare per iniziare e fine del testo da selezionare.
lessnon è lo strumento giusto per la navigazione a livello di personaggio.

Schede già espanse

È possibile utilizzare il tasto shifte il mouse per effettuare una selezione; Questo è gestito dal terminale, non da meno. Ma il terminale non sa come siano disposti gli spazi e le schede - meno l'interpretazione delle schede è interna e scrive solo " " caratteri normali sullo schermo.

Ci sono strumenti come screen, tmux e byobu, in grado di fare un sacco di cose impressionanti in questo settore. Non ho verificato, ma presumo che questi multiplexer terminali non abbiano un modo per aggirare questo - essendo terminali, alla fine - e si comporteranno allo stesso modo.

Usa vim

Se si sta mostrando un file in less, c'è una bella soluzione:
Premere il tasto vin lessper aprire il file corrente in vim- asuming vostro $EDITORecc è impostato per vim.

Questo non funziona quando si mostra lo stdin da una pipeline o giù di lì, anche se ci sono soluzioni alternative .

Scorrimento del mouse, almeno

Ma puoi almeno scorrere con la rotellina del mouse:

Sembra che sia abilitato per impostazione predefinita, ma gli eventi della rotellina del mouse vengono eliminati da un'opzione diversa.

Per un test rapido, prova:

LESS=-r man less

L'opzione -X( --no-init) blocca lo scorrimento: controlla cosa LESScontiene la variabile di ambiente :

$ echo $LESS

L'opzione -q( --quiet, --silent) causa anche problemi, secondo SU: Come far scorrere la rotellina del mouse con meno cercapersone usando bash e gnome-terminal?


Bella risposta. La vchiave è fantastica! (Mi sono preso la libertà di una soluzione alternativa per farlo funzionare anche nelle condutture.) FWIW nel mio emulatore di terminale (terminatore) Non devo tenere il turno quando seleziono il testo.
Sparhawk,

@Sparhawk Ehi, la soluzione è almeno altrettanto fantastica!
Volker Siegel,

2
Inoltre, esiste un cercapersone chiamato vimpagerche è possibile utilizzare per sostituire l' lessintera vendita. In realtà utilizza solo vimavvolto in un piccolo script.
HalosGhost,

1
@HalosGhost Grazie per quello. vimpagersembra piuttosto bello, ma ho avuto problemi con lo strappo che mi fa preferire usare meno e v.
Sparhawk,

@Sparhawk Tecnicamente, potresti confrontare il Vimrc usato o usare parti del tuo Vimrc normale vimpagerfino a quando non funziona; (Mi sforzo di non attivare tutti i miei vimplugin all'avvio vimpager...)
Volker Siegel,

3

È possibile copiare la riga superiore visualizzata nella lessselezione CLIPBOARD X11 digitando con less:

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

In questo modo viene convogliato meno buffer dalla riga superiore al .segno (quindi, in effetti, l'intero contenuto dello schermo) al head -n1|xclip -sel ccomando (per memorizzare la prima riga nella selezione CLIPBOARD)

È possibile configurare il proprio emulatore di terminale per incollare quella stringa su una determinata pressione del tasto o associarlo a una chiave o combinazione di lesstasti in combinazioni di tasti. Ad esempio, per vincolarlo Alt+C:

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

Comunque nota, dovrai premere Enterdopo per confermare il messaggio "| done (premi INVIO)".

Con xterm, puoi anche definire una nuova modalità di selezione, ad esempio qui quando tieni premuto Ctrl+Altquando estendi la selezione che dice lessquali linee copiare dalla sua schermata corrente:

Scrivi una lesspastesceneggiatura come:

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

E definisci le tabelle di traduzione xterm (qui sulla riga di comando per i test, ma ti consigliamo di aggiungerlo a un file di risorse 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)'

Contrassegneresti quindi le linee da incollare trascinando il mouse con Ctrl+Altpremuto e, rilasciando il pulsante 1, xterm direbbe di meno di reindirizzare la schermata corrente al nostro lesspastescript con le coordinate di inizio e fine passate come un argomento ( y1;x1 y2;x2).

(nota che potrebbe non funzionare correttamente se lessviene invocato -sper comprimere le righe vuote (come è tipico quando invocato da man), poiché l'input a cui viene alimentato nonlesspaste verrà compresso nelle righe vuote (quindi gli offset del numero di riga potrebbero essere errati)) .


@Sparhawk, vedi modifica.
Stéphane Chazelas,

Non sembra funzionare per me. Nulla di nuovo è negli appunti. È lesssupposto di dare qualsiasi tipo di feedback? jnon sembra fare nulla per me.
Sparhawk,

@Sparhawk, hai qualche associazione di tasti personalizzata per less, jscorre verso il basso di una riga ( forw-line) nell'associazione di tasti predefinita (in realtà J( forw-line-force) sarebbe meglio qui, lo modificherò). |dovrebbe darti un feedback. (richiede il segno, quindi il comando per accedere).
Stéphane Chazelas,

No, non l'ho fatto, ma stavo testando un testo lungo meno di una pagina, quindi forse è per questo jche non ho fatto nulla. La prima opzione ora funziona (+1). La seconda opzione sembra piuttosto complicata con alcuni avvertimenti, quindi non l'ho provata. Penso che vsia abbastanza buono per me.
Sparhawk,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.