Come gestire la riga successiva nella macro della tastiera?


12

Ho creato una macro di tastiera per unire le linee in un buffer usando:

F3 C-n M-x join-line RET F4.

Funziona bene, tranne quando le linee diventano troppo lunghe e iniziano a avvolgere, il che rende questa macro dipendente dalla larghezza della cornice. next-linenon sembra passare alla riga successiva successiva, ma alla parte "a capo" della riga corrente.

Come aggirare quel problema?

Risposte:


13

Hai due tre opzioni:

  1. Utilizzare next-logical-lineinvece di next-linequando si definisce la macro:

    Sposta il cursore verticalmente verso il basso ARG. Questo è identico next-line, tranne per il fatto che si sposta sempre per linee logiche anziché per linee visive, ignorando il valore della variabile line-move-visual.

  2. Imposta line-move-visualsu nil:

    (setq line-move-visual nil)

    Questo si next-linecomporta come next-logical-lineper impostazione predefinita.

  3. Attiva il troncamento di linea facendo

    M-x toggle-truncate-lines RET

    prima di registrare la macro.


Perfetto! Grazie. Mi chiedo in quale situazione preferiresti next-linel'attuale comportamento next-logical-line, però ...
Sébastien Le Callonnec,

@ SébastienLeCallonnec Immagino che ci sia un caso d'uso per tutto ... ed è bello sapere che Emacs li gestisce tutti;)
itsjeyd

1
@ SébastienLeCallonnec Erm ... quando scrivi in ​​linguaggio naturale? In una situazione non orientata alla linea, premendo <down>o C-nsi prevede di solito di farti scendere di una riga, non saltare oltre il limite della linea. Pensa che non tutti gli utenti provengono dal blocco note (dove non esiste alcun avvolgimento di riga) ... Imo, l'eccezione è piuttosto le situazioni in cui si next-logical-linetrova il comportamento previsto e in queste situazioni, spesso tendo a disabilitarle del visual-line-modetutto. E +1 @itsjeyd, è davvero bello essere in grado di ottenere entrambi i comportamenti a seconda della situazione.
T. Verron,

2
@ T.Verron Abbastanza giusto. Credo di poter sempre associare nuovamente C-na next-logical-line. ;)
Sébastien Le Callonnec il

0

C-aed C-eentrambi accettano un argomento prefisso che consente di saltare le righe. Ad esempio, C-2 C-asalterà all'inizio della riga successiva e C-2 C-esalterà alla fine della riga successiva. Un argomento prefisso di 3 sposta due righe e così via. Puoi anche usare argomenti negativi per passare alle righe precedenti.

Chiaramente questi non sono molto utili quando è necessario che il cursore rimanga nella stessa colonna, ma trovo che la maggior parte delle mie macro coinvolge comunque l'inizio o la fine di una riga, quindi sono molto convenienti.

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.