Come si fa a selezionare la colonna e poi a modificare in GNU Emacs?


15

Sto usando ViM, TextMate e GNU Emacs da anni.

Ad esempio, ecco il testo che voglio modificare

foo
foo
foo

Ed ecco il risultato del testo che voglio avere

bar foo
bar foo
bar foo

Quando sono su Vim, posso fare "Ctrl v" sulla prima riga e prima colonna, quindi premere "2 j", quindi premere "i", quindi digitare "bar", fatto.

Quando sono su Textmate, posso premere "Opzione comando Apple" sia mentre seleziono giù (con il mio mouse), quindi digitare "barra", fatto.

Ma quando sono su GNU Emacs 23.1, non so come farlo. : ((

Ho cercato EmacsWiki e ho cercato su Google ma non ho trovato la soluzione. Per favore guidami se conosci la mia soluzione. Sarei grato per quello.


@Trey Jackson e @humble coffee, risolti, grazie mille !!
Arie,

Risposte:


16

Mi vengono in mente due opzioni. Il primo è rettangoli (come menzionato in un'altra risposta). Le indicazioni esplicite per questo sono:

  1. vai alla prima riga, prima colonna
  2. C-SPC
  3. vai all'ultima riga (prima colonna)
  4. C-x r t bar SPC RET

Un'altra opzione, che fornisce comandi di modifica rettangolo / colonna molto belli è la modalità CUA . Ecco un post sul blog (divulgazione: il mio blog) che descrive come usarlo. Per vedere la potenza della modalità CUA vale la pena guardare questo video di tre minuti .

Integra la modalità CUA con quanto segue (perché preferisco non avere la modalità contrassegno transitorio):

(setq cua-enable-cua-keys nil)
(setq cua-highlight-region-shift-only t) ;; no transient mark mode
(setq cua-toggle-set-mark nil) ;; original set-mark behavior, i.e. no transient-mark-mode
(cua-mode)

11

In Emacs-24.4, il supporto di base per i rettangoli è stato leggermente migliorato, quindi invece di usare C-SPCseguito da C-x r t, puoi fare:

C-x SPC
down down
C-t bar RET

Una delle cose belle rispetto al C-SPCmetodo è che otterrai un feedback visivo sul rettangolo che stai selezionando. Naturalmente anche il cua-modemetodo funziona (e funziona in modo simile).


purtroppo, mi sembra che i miglioramenti non siano affatto sufficienti: cua-modeaveva più ragione ... Solo per citare una cosa: in cua-mode, mentre un rettangolo è evidenziato, posso digitare e aggiungere testo. Nell'emacs incorporato "supporto di base" attuale, l'evidenziazione scompare (la selezione è "annullata") e l'ingresso viene inserito nel punto del cursore. Questo è contro-intuitivo e non quello che di solito voglio (e cua-modemi
abituo

@ShinTakezou: mentre trovi intuitivo il contatore della modalità contrassegno rettangolo, trovo il contatore del comportamento di cua intuitivo. Fortunatamente, puoi scegliere. Se si preferisce il supporto per cua, è possibile abilitare la modalità cua o (se si desidera solo il supporto per il rettangolo) (global-set-key [?\C-x ?\s] 'cua-rectangle-mark-mode).
Stefan,

in effetti è quello che faccio: attenermi alla modalità cua. Funziona come: evidenziare una colonna, digitare il testo, fatto. Altrimenti: evidenzia una colonna, dì che vuoi aggiungere del testo, digita il testo nel minibuffer (non lo vedrai apparire nel buffer mentre digiti ...), ... fatto. Vedrai in seguito un refuso nell'ultimo carattere ... in modalità cua, posso vederlo mentre scrivo, cancellarlo (non annullare l'intero inserimento), ripensare, inserire un altro carattere ... e il rettangolo viene evidenziato di cui ho bisogno, tra l'altro, e posso ridurlo, ingrandirlo, digitare altro testo o "tagliare" quel nuovo rettangolo ... quindi per me è più intuitivo e comodo.
ShinTakezou,

Sono contento che ti piaccia ;-)
Stefan

A proposito, in Emacs-25, l' C-toperazione rectange non CUA (aka C-x r t) mostra anche un'anteprima del testo appena inserito mentre lo digiti.
Stefan,

2

In emacs questo tipo di colonne viene chiamato 'rettangoli'. Quindi questa è la pagina di documentazione pertinente.

Tutti questi comandi richiedono che la regione contenga il rettangolo su cui stai operando. Quindi è necessario impostare il segno sul carattere in alto a sinistra nel rettangolo ed estendere la regione al carattere in basso a destra nel rettangolo. Il comando che stai cercando è M-x string-insert-rectangleche ti chiede di inserire la stringa.


1

Risposta più breve: abilitare la modalità rettangolo CUA tramite C-RET.

Quindi, per il tuo caso, lo sarebbe

  1. Vai alla prima riga, prima colonna e premi C-RETper accedere alla modalità CUA
  2. Vai all'ultima riga, prima colonna e digita semplicemente barSPC
  3. Uscire dalla modalità CUA tramite ESCo CG

Vedi la risposta di @Trey per una soluzione più elaborata e collegamenti a CUA.


2
Sì, ho poca reputazione per commentare. Non voglio ripetere la sua risposta, ma aggiungerò alcune ulteriori informazioni dal documento CUA.
Martin,

0

È possibile utilizzare sostituire-regexp per questo:

  1. imposta il segno sull'ultima riga -> C SPC e vai all'ultima riga
  2. digitare Mx sostituire-regexp RET nel minibuffer (ho un legame chiave per questo signor)
  3. Dare ^ RET
  4. digitare la barra e premere RET

Questo aggiungerà la barra all'inizio della riga.

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.