Come selezionare o evidenziare un blocco in Emacs?


85

Voglio selezionare o evidenziare un blocco in emacs senza usare il mouse ma farlo dalla tastiera come la modalità visuale di vim. Qual è il modo più semplice per farlo da una tastiera?


2
CMhmark-defun
barra finale

Risposte:


66

Dai un'occhiata alla regione-rettangolo in emacs.

In breve, inizi la selezione come al solito con Control- Space, quindi uccidi la regione con Control- x r ke incolla (o strappa ) il blocco ucciso con Control- x r y.


12
Questo non uccide le regioni, uccide i rettangoli, che è molto diverso da quello che fa la modalità visiva di vim, nella mia esperienza.
Allen

74

Se capisco correttamente la domanda, in origine non si tratta di regioni rettangolari.

C-Spc mette un segno nella posizione corrente.

Ovunque si trovi il cursore, il testo tra l'ultimo segno e la posizione corrente viene "selezionato" (puoi evidenziarlo attivandolo transient-mark-mode, ma questo significa anche che i segni devono essere cancellati quando non vuoi evidenziare).

Puoi operare su quella regione con comandi come:

C-w. . Uccidi la regione. Questo elimina e inserisce la regione nel kill ring.
C-y. . Yank. Questo inserisce l'ultimo frammento del kill ring.
M-y. . Cycle kill ring. Immediatamente dopo C-y, questo sostituisce la parte strappata con gli altri frammenti nel kill ring.
M-w. . Salva la regione nel kill ring. Mi piace C-w, ma non elimina.

Questo è solo l'uso di base. I marchi hanno anche altri usi. Raccomando il tutorial ( C-h t).


6
Da segnalare che C-s C-rsono comunemente usati in questo contesto per andare a trovare la fine / inizio della regione. (Particolarmente utile in una macro.)
ocodo

Bene, sono comandi molto buoni, ma ... Come selezionare la regione contrassegnata? Dopotutto ne ho ancora bisogno, cioè per far rientrare il codice tra i segni.
Hi-Angel

La regione tra l'ultimo marker e il punto corrente (ovvero dove si trova il cursore) è la regione selezionata. Corri e basta M-x indent-region.
Svante

@Svante No, non è selezionato. Sebbene indent-regionfunzioni bene, ma c-indent-line-or-region(quello associato al tasto Tab ) non lo è. L'ultima funzione non agisce sulle regioni contrassegnate , ma su quelle selezionate , ovvero la regione che viene evidenziata come se l'avessi selezionata con il mouse.
Hi-Angel

2
@YagamyLight Ah, puoi farlo colpendo C-Spcdue volte nel punto in cui metti il ​​segno. Ciò attiva temporaneamente la modalità contrassegno transitorio (finché non annulli (con C-g)). Quindi spostare il punto per visualizzare la regione selezionata.
Svante



12

Sebbene C-SPCsia un modo comune per iniziare a contrassegnare qualcosa da qualunque punto si trovi, ci sono spesso modi più rapidi / semplici che non implicano il passaggio esplicito ai punti di inizio / fine ...

Scorciatoie di selezione integrate

  • M-h- un mezzo importante per contrassegnare un paragrafo . Un "paragrafo" spesso significa un blocco di codice.

  • C-M-he C-M-@- rispettivamente per contrassegnare sexps e defuns . Funziona per diverse lingue, non solo per i lisps.

  • tenere premuto il tasto Maiusc - un altro modo semplice per evidenziare durante il movimento. Ad esempio, M-S-fseleziona in avanti una parola intera. Questo è shift-select-mode, ed è abilitato di default in Emacs 24+. Su alcune tastiere (non chiclet) dovresti riuscire a tenere premuto C-S-un solo mignolo.

È possibile premere ripetutamente uno di questi per aumentare la selezione.

Ci sono anche alcuni modi speciali per contrassegnare le cose:

  • C-x h- segna l'intero buffer

  • C-x SPC- entra in modalità segno rettangolo

(NOTA: utilizzare C-gspesso per annullare la marcatura durante la sperimentazione.)

Componenti aggiuntivi

Ci sono alcuni pacchetti aggiuntivi che migliorano la selezione di regioni e cose. Questi funzionano tutti bene insieme e si adattano a diversi casi d'uso. Usali tutti!

  • expand-region : Expand region aumenta la regione selezionata di unità semantiche. Continua a premere il tasto finché non seleziona ciò che desideri. C-=è un'associazione consigliata per esso. Premilo un paio di volte per ottenere ciò di cui hai bisogno.

  • easy-kill : usaM-we un mnemonico per selezionare diversi tipi di cose, come parole, sexps, elenchi, ecc.

  • zop-to-char : come zap-to-char , ma fornisce una buona selezione e altre azioni guidate dal menu.

  • diff-hl : evidenzia le regioni modificate non salvate. Utilizzarediff-hl-mark-hunkper selezionare / contrassegnare un pezzo.

  • sovrapposizione di simboli : selezionare il simbolo nel punto premendo un tasto (M-i). Quindi puoi fare altre cose con esso, come copiare, cercare, saltare, sostituire, ecc.


7

Utilizzare Control- Spaceper impostare un contrassegno e spostare il cursore.

Il transient-mark-modemetterà in evidenza le selezioni per te. M- x transient-mark-mode.

Puoi impostare Emacs per abilitare questa modalità di default usando una personalizzazione. M- x customize-option RET transient-mark-mode.


1

... e nel caso in cui utilizzi Ubuntu e C-spcnon funziona per te: devi cancellare l'associazione di tasti "metodo di input successivo" IBus, come in

eseguire ibus-setupe modificare l'associazione dei tasti per "metodo di immissione successivo" in qualcos'altro (o eliminarlo completamente facendo clic sul pulsante "..." e quindi sul pulsante "Elimina").

Citazione tratta da una risposta a una domanda SO.


0

Per espandere la risposta di Edin Salkovic, se usi la modalità CUA, puoi usare per iniziare una selezione di blocchi visivi. Ci sono molte scorciatoie per controllare la selezione dei blocchi descritte nella documentazione di CUA .


-1

Con Emacs 25, è sufficiente premere C- Spacee quindi spostare il cursore ovunque si desideri evidenziare / selezionare la regione di testo che ti interessa. Successivamente, potresti aver bisogno di questi comandi:

  • C- wper il taglio.
  • M- wper la copia.
  • C- yper incollare.
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.