Selezione del testo senza spostare il cursore


8

Vorrei far crescere una selezione senza spostare il punto (il cursore) dalla sua posizione. So che posso sempre usare C-u C-spcper spostarmi nella posizione precedente, ma vorrei evitarlo.

Più specificamente, vorrei fare entrambe queste operazioni:

  • Seleziona tutto il testo nel buffer
  • Aggiungere gradualmente le righe / i paragrafi successivi alla selezione

mantenendo il cursore dov'è.

Emacs ha delle funzioni interattive per questo? Sono associati a delle scorciatoie da tastiera?


Puoi sempre tornare alla posizione del punto precedente con C-u C-spc.
Malabarba,

1
puoi dirmi per favore, quale potrebbe essere l'interesse di selezionare il testo senza spostare il cursore?
Nsukami _

Risposte:


12

C'è una risposta separata per ciascuno dei punti che hai elencato:

  1. Il binding predefinito di emacs C-x hselezionerà l'intero buffer indipendentemente da dove si trova il cursore.

  2. Il pacchetto di espansione della regione aiuterà a raggiungere il secondo obiettivo di espandere gradualmente la selezione. expand-regionalla fine selezionerà anche l'intero buffer mentre continui ad espandere la regione. Dai un'occhiata al suo readme su github per maggiori informazioni. Questo pacchetto è disponibile tramite MELPA.

Ecco una breve introduzione a questo pacchetto dal suo github:

Espandi regione aumenta la regione selezionata di unità semantiche. Continua a premere il tasto fino a quando non seleziona ciò che desideri.

Un esempio:

 (setq alphabet-start "abc def") 

Con il cursore in corrispondenza di c, inizia contrassegnando l'intera parola abc, quindi espandi al contenuto delle virgolette abc def, quindi all'intera citazione "abc def", quindi al contenuto del sexp setq alphabet-start "abc def "e infine a tutto il sexp.

Vorrei aggiungere però che modificando la selezione della regione in entrambi i casi si sposterà comunque il cursore.


+1, ma nota che C-x hsposta il cursore: alla fine del buffer e quindi all'inizio del buffer. Hai bisogno di C-u C-spcdue volte per tornare dove eri.
ShreevatsaR,

9

Se la regione cresce, il cursore cambia posizione. Questo perché il cursore si trova sempre a un'estremità della regione.

Se si seleziona tutto il testo del buffer ( C-x he quindi si usa C-x C-xper scambiare punto e segno, quindi il cursore si trova alla fine del testo) e quindi si digita un po 'più di testo, quindi si è ottenuto ciò che si desidera: l'area è stata esteso per includere il testo digitato. (Ciò presuppone che non sia stato delete-selection-modeacceso.)

Anche la regione è stata disattivata, automaticamente, quindi il testo della regione non è più evidenziato. Per riattivare la regione, eseguire C-x C-x(che è possibile ripetere se si desidera mantenere il cursore all'estremità del buffer.


4

Come accennato, il expand-regionpacchetto è fantastico ma mi sento anche degno di nota easy-kill. Viene fatturata come una goccia in sostituzione kill-ring-saveche trasforma la normale M-w"copia" in un comando di copia dinamica che funge anche da prefisso per il salvataggio di varie cose. Ad esempio, M-wcopierebbe la regione attiva, l'URL, l'e-mail o la riga corrente (in ordine di easy-kill-try-things), ma seguita da una "d" M-w dcopierebbe forzatamente l'attuale defun.

C'è anche un metodo per espandere / ridurre la selezione corrente, in qualche modo simile expand-region, così come un comando chiamato easy-markper contrassegnare le regioni senza cambiare il punto corrente.


1

Dopo aver copiato qualcosa, puoi aggiungere testo alla selezione in seguito con l'uso di C-M-w:

  • copia una linea / regione
  • Fai qualcos'altro
  • vuoi aggiungere sthg al testo precedentemente copiato: digita C-M-w( append-next-kill) e poi copia ciò che vuoi ( M-w).

1

Come indicato in altre risposte:

C-xh selezionerà l'intero buffer; (mark-whole-buffer)

Se vuoi aumentare la tua selezione, il modo più semplice sarebbe usare i mark-*comandi.

Come esempio di keybound:

C-M-SPC (mark-sexp)segnerà il sexp al punto. Se ripeti il ​​comando, aggiungerà il seguente sexp alla selezione. Il cursore rimarrà nella posizione corrente o si sposta all'inizio dell'oggetto (paragrafo / sexp) per assicurarsi che sia interamente contrassegnato.


Preludio esegue la mappatura (mark-whole-buffer)su <kbd> Cmd-a </kbd> su OSX per mantenere una certa somiglianza con la tipica funzionalità OSX.
Aaron Lee,

1

Se stai bene usando il mouse, puoi usare la selezione secondaria . Premere Meta, quindi fare clic e trascinare il pulsante sinistro del mouse ( M-drag-mouse-1). Questo non sposta il punto fintanto che stai copiando solo il testo visibile sullo schermo. È possibile copiare la selezione secondaria con M-mouse-3e trascinarla con M-mouse-2.

Oltre alla selezione secondaria, dovrai spostare il cursore per selezionare un testo arbitrario, poiché il cursore è un'estremità della selezione (l'altra è il segno).

Se si desidera lavorare in un buffer senza influire sul punto, è possibile aprire il buffer in una seconda finestra ( C-x 2oC-x 3 ). Ogni finestra ha il suo punto. Al termine della selezione e della modifica, chiudere la finestra ( C-x 0) e tornare all'altra.

Per una maggiore flessibilità, è possibile clonare il buffer corrente. Esegui M-x clone-indirect-buffero C-x 4 cper creare anche una nuova finestra che mostra quel buffer. Il clone ha lo stesso testo dell'originale, ma ha il proprio segno e punto.

Se hai già ucciso del testo, puoi aggiungere altro testo digitando C-M-w( append-next-kill) e quindi utilizzando un comando kill. Ad esempio, C-M-w C-kaggiunge la coda della riga corrente al testo che è già nella parte anteriore dell'anello di eliminazione ed elimina il testo copiato. C-M-w M-waggiunge la selezione al testo nella parte anteriore del kill ring (al contrario del M-wquale spinge il testo selezionato come una nuova voce nel kill ring).

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.