2011-06-08 11 views
5

Problem: Mam dwa bufory rozdzielone obok siebie. Przechodzę do linii w lewym buforze i chcę wykonać coś, które przesuwa punkt w prawym buforze do tego samego numeru linii. Na przykład, jeśli jestem w linii 26 w lewym buforze, uruchamiam makro pewnego rodzaju i voila Jestem w linii 26 na prawym buforze.Przenieś punkt w jednym buforze do tego samego numeru wiersza co punkt w innym buforze

Czego próbowałem które nie pracowały jak lubiłem (lub w ogóle):

  • scroll-all-mode. Działa, jeśli bufory są zsynchronizowane na początku (np. Punkt znajduje się na tym samym numerze linii w obu buforach) i jeśli trzymam się podstawowego ruchu linii. Ale szybko traci synchronizację, jeśli I isearch-forward-regexp lub page-up/page-down. Jeśli istniało polecenie, które mogłoby "zsynchronizować się", to rozwiązuje mój problem.
  • Zapisanie bieżącego numeru linii w rejestrze i użycie tej wartości rejestru w goto-line. Zapisywanie i przywracanie pozycji zawsze powraca do tego samego bufora.
+0

Jeśli faktycznie nie wymagają, aby przesunąć punkt (i 'hl-line-mode' może to odrobinę nadrobić), zauważyłem, że funkcja autoscroll' 2C' sprawia, że ​​bufory w lock-step są o wiele lepsze niż 'scroll-all-mode'. Łączenie tych dwóch elementów nie przynosi oczekiwanego skutku, niestety. Zobacz 'M-: (info" (emacs) Dwóch kolumn ") RET' – phils

+0

@Ben Czy chcesz porównać dwa bufory/pliki? Jeśli tak, użyj 'ediff-files' lub' ediff-buffers'. – CodyChan

Odpowiedz

6

Ten kawałek Emacs Lisp powinien robić to, co chcesz:

(goto-line (line-number-at-pos) (window-buffer (next-window)) 

związać go do sekwencji klawiszy,

(global-set-key (kbd "C-c l") 
    (lambda() 
    (interactive) 
    (goto-line (line-number-at-pos) (window-buffer (next-window))))) 
+0

Możesz również utworzyć tryb pomocniczy, który ponownie powiąże twoje klawisze 'C-n' i' C-p', które pozwolą ci przejść przez oba bufory w trybie blokady. –

+0

Wy, chłopaki, rock ... – Ben

Powiązane problemy