2010-07-01 10 views
10

Sto cercando un modo in emacs per spostare il testo a destra oa sinistra entro n spazi. Una funzionalità simile a quella in vim << o >>. Dovrebbe funzionare su una regione o se nessuna regione è selezionata su una linea corrente e non spostare il cursore dalla sua posizione corrente.Spostare una regione o una linea in emacs

La soluzione da EmacsWiki non funziona molto bene come M-x indent-rigidly poiché ricorda in qualche modo l'ultima regione utilizzata e sposta quella in questione. Il più vicino sembra essere quello here ma non sono riuscito a farlo funzionare. Non sono uno sviluppatore fiacco, quindi è difficile modificare il codice. Apprezzerò qualsiasi aiuto.

Grazie!

risposta

6

Forse funziona come vuoi tu.

 
(defun shift-text (distance) 
    (if (use-region-p) 
     (let ((mark (mark))) 
     (save-excursion 
      (indent-rigidly (region-beginning) 
          (region-end) 
          distance) 
      (push-mark mark t t) 
      (setq deactivate-mark nil))) 
    (indent-rigidly (line-beginning-position) 
        (line-end-position) 
        distance))) 

(defun shift-right (count) 
    (interactive "p") 
    (shift-text count)) 

(defun shift-left (count) 
    (interactive "p") 
    (shift-text (- count))) 
+0

Eccellente! Questo è esattamente quello che stavo cercando! Molte grazie. Non vuoi metterlo anche su EmacsWiki? – fikovnik

5

Per raggiungere questo di solito faccio un trucco:

  • attivare la modalità CUA
  • andare all'inizio della linea
  • C-RET, ora se si sposta il cursore si dovrebbe vedere una rettangolare regione rossa
  • Spostare il cursore lungo le linee e digitare lo spazio fino a quando non si ottiene lo spostamento corretto.

Questo può essere fatto anche in modo programmatico (allo stesso modo).

EDIT: Ho appena letto l'articolo in wiki di emacs, è la stessa soluzione ad eccezione della modalità CUA che è infinitamente più potente della selezione "comune" rectanguar (dal momento che è visiva).

+2

È possibile abilitare le eccellenti funzioni di modifica del rettangolo di CUA separatamente dalle sue altre funzioni con '(cua-selection-mode t)'. A patto che tu non abbia 'C-RET' legato a qualcos'altro, puoi metterlo nel tuo file init e non entrerà in conflitto con niente. – phils

+1

Note rapide sull'utilizzo di base per le linee mobili: 'C-RET' + movimenti del cursore per specificare il rettangolo,' RET' per ciclare gli angoli, digitare inserimenti prima/dopo il rettangolo, 'C-RET' per uscire. Vedi le note sotto "Supporto rettangolo CUA" in cua-base.el per i dettagli completi su ciò che fornisce questa modalità secondaria, o leggi http://trey-jackson.blogspot.com/2008/10/emacs-tip-26- cua-mode-specific.html – phils

+0

Ho una confessione. Io uso la modalità CUA. –

31

È possibile selezionare la regione, quindi C-u C-x <tab> sposterà 4 spazi. Puoi digitare un numero dopo C-u per cambiare 4 in qualsiasi altra cosa.

+0

Un altro consiglio: il numero dopo "C-u" potrebbe essere negativo, in questo caso la regione verrà spostata a sinistra anziché a destra. –

Problemi correlati