Jak obsługiwać makra klawiatury w następnym wierszu?

12

Utworzyłem makro klawiatury do łączenia linii w buforze za pomocą:

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

Działa dobrze, z wyjątkiem sytuacji, gdy linie stają się zbyt długie i zaczynają się owijać - co powoduje, że to makro zależy od szerokości ramki. next-linenie wydaje się przechodzić do następnej faktycznej linii, ale do „zawijania” części bieżącej linii.

Jak obejść ten problem?

Sébastien Le Callonnec
źródło

Odpowiedzi:

13

Masz dwie trzy opcje:

  1. Użyj next-logical-linezamiast next-linepodczas definiowania makra:

    Przesuń kursor pionowo w dół o ARGlinie. Jest to identyczne z next-linewyjątkiem tego, że zawsze porusza się liniami logicznymi zamiast linii wizualnych, ignorując wartość zmiennej line-move-visual.

  2. Ustaw line-move-visualna nil:

    (setq line-move-visual nil)

    To sprawia, że next-linezachowujemy się jak next-logical-linedomyślnie.

  3. Włącz obcinanie linii, wykonując

    M-x toggle-truncate-lines RET

    przed nagraniem makra.

itsjeyd
źródło
Doskonały! Dzięki. Zastanawiam się, w jakiej sytuacji wolisz next-lineobecne zachowanie niż next-logical-line...
Sébastien Le Callonnec
@ SébastienLeCallonnec Wydaje mi się, że istnieje przypadek użycia wszystkiego ... i dobrze wiedzieć, że Emacs obsługuje je wszystkie;)
itsjeyd
1
@ SébastienLeCallonnec Erm ... podczas pisania w języku naturalnym? W sytuacji nieliniowej naciśnięcie <down>lub C-nzwykle powoduje przejście o jedną linię w dół, a nie przeskoczenie poza granicę linii. Pomyśl, że nie każdy użytkownik pochodzi z notatnika (w ogóle nie ma zawijania linii) ... Imo, wyjątkiem są sytuacje, w których next-logical-lineoczekiwane jest zachowanie, i w takich sytuacjach często mam tendencję do visual-line-modecałkowitego wyłączania . I +1 @itsjeyd, naprawdę miło jest móc uzyskać jedno z tych zachowań w zależności od sytuacji.
T. Verron
2
@ T.Verron Do przyjęcia. Chyba zawsze mogę ponownie powiązać C-nsię next-logical-line. ;)
Sébastien Le Callonnec
0

C-ai C-eoba przyjmują argument przedrostkowy, który pozwala pomijać linie. Na przykład, C-2 C-aprzeskoczy na początek następnej linii i C-2 C-eprzeskoczy na koniec następnej linii. Argument przedrostka 3 przenosi dwie linie i tak dalej. Możesz także użyć argumentów ujemnych, aby przejść do poprzednich linii.

Oczywiście nie są one zbyt przydatne, gdy potrzebujesz kursora, aby pozostać w tej samej kolumnie, ale uważam, że większość moich makr i tak wymaga przejścia do początku lub końca linii, więc są bardzo wygodne.

Alan Third
źródło