Emacs - Wiele kolumn, jeden bufor

165

Próbuję edytować kod asemblera, który jest zwykle formatowany w długich, ale cienkich listach. Chciałbym móc wykorzystać niektóre akry przestrzeni poziomej, które mam i zobaczyć więcej kodu na ekranie w tym samym czasie. Czy istnieje metoda na uzyskanie Emacsa (lub innego edytora), aby pokazać mi wiele kolumn wskazujących na ten sam bufor?

Cx 3 (emacs) i: vsplit (vim) świetnie nadają się do wielu oddzielnych widoków kodu, ale chciałbym, aby przepływał z jednej kolumny do drugiej (jak tekst w gazecie).

user119857
źródło
1
Cx 3 i: vsplit świetnie nadają się do wielu oddzielnych widoków w kodzie, ale chciałbym, aby przepływał z jednej kolumny do drugiej (jak tekst w gazecie)
user119857
1
Dzięki! Zakochałem się w przeglądaniu kodu 4-6 kolumnowego, próbowałem sformatować cały mój kod do 30-40 znaków i bardzo podoba mi się wynik - przez skracanie wszystkich linii, a nie tylko tych naturalnie krótkich, o wiele mniej miejsca jest marnowane, a cała powierzchnia ekranu jest używana do wyświetlania tekstu; Ponadto bloki kodu stają się bardziej dwuwymiarowe, ułatwiając zrozumienie wizualne i nadzór strukturalny.
Erik Kaplun,

Odpowiedzi:

248

Zobacz tryb śledzenia . Fragment:

Tryb śledzenia jest drugorzędnym trybem, w którym dwa okna, oba pokazujące ten sam bufor, przewijają się jako pojedyncze wysokie „wirtualne okno”. Aby użyć trybu śledzenia, przejdź do ramki zawierającej tylko jedno okno, podziel je na dwa okna obok siebie za pomocą Cx 3, a następnie wpisz tryb śledzenia Mx. Od tego momentu możesz edytować bufor w dowolnym z dwóch okien lub przewijać jedno z nich; drugie okno podąża za nim. W trybie Śledź, jeśli przesuniesz punkt poza część widoczną w jednym oknie do części widocznej w drugim oknie, spowoduje to zaznaczenie drugiego okna - ponownie, traktując te dwa elementy tak, jakby były częściami jednego dużego okna.
huaiyuan
źródło
3
Czy mogę tego używać z więcej niż dwoma oknami? Czy mogę korzystać z tego w czterech oknach?
Yktula,
Zastanawiam się, czy da się edytować dwie kolumny tego samego źródła w sposób indywidualny, nie podzielony na dwa okna. To nie jest najlepszy przykład, ale wyobraź sobie, że mam jedną kolumnę na kod skryptu, a drugą na komentarze, a jeśli jestem w drugiej kolumnie, chcę nacisnąć „enter” i kontynuować w następnej linii, ale w drugiej kolumnie. Czy jest to możliwe z Emacsem lub innym edytorem tekstu?
św.
Bardzo przydatne jest edytowanie długich funkcji lub metod. zawsze znajduję ten tryb i otwieram dwa bufory i robię to sam, dzięki huaiyuan
Yuan He
17

Używam tej funkcji do wywołania follow-mode, chociaż wymagałoby to dostosowania dla innego rozmiaru ekranu:

;;; I want a key to open the current buffer all over the screen.
(defun all-over-the-screen ()
  (interactive)
  (delete-other-windows)
  (split-window-horizontally)
  (split-window-horizontally)
  (balance-windows)
  (follow-mode t))
Kragen Javier Sitaker
źródło
Plus 1 za samo wskazywanie (okna równowagi)! Wydaje mi się, że możesz sprawić, by podzielił parametryczną liczbę razy i sprawił, że funkcja będzie interaktywna. Również ustawienie scroll-marginna 0będzie miało sens w follow-mode.
Erik Kaplun
2

Vim może to zrobić używając :vsplit- i możesz mieć ten sam bufor otwarty w wielu "oknach" (które są w rzeczywistości sekcjami w jednym "oknie").

Dokumentacja tutaj

brettkelly
źródło
3
emacs też może to zrobić, jak wspomniano w pytaniu, ale nie o to pytano.
justinhj
1
Połącz to z :scrollbindi jesteś tam.
bastibe
@Kragen - Sposób na to jest: 1. podziel okno w pionie, tak aby pojedynczy bufor był widoczny w dwóch oknach 2. przewiń w drugim oknie tak, aby pierwsza linia w drugim oknie znajdowała się za ostatnią linią w pierwszym oknie, 3. wydaj polecenie :set scrollbindw każdym z okien. Teraz okna będą przewijać się razem zgodnie z potrzebami. (Uwaga: scrollopt musi zawierać opcję „ver”.)
Herbert Sitz
Hmm, to trochę działa. Chłodny! Dzięki! Ktoś powinien napisać skrypt vim, który zrobi to automatycznie.
Kragen Javier Sitaker
-1

Szybkie spojrzenie na wiki emacsa nie pokazuje trybu, jaki opisałeś. Jednak napisanie jednego z nich nie powinno być zbyt trudne ... Wystarczy podzielić okno za pomocą Cx 3 i przesunąć tekst w drugim oknie w dół, a za każdym razem, gdy przesuniesz tekst, zrób to samo w innym oknie. ..

Gdy dojdziesz do dołu bufora, mogą wystąpić problemy, czy chcesz, aby kursor natychmiast przeszedł do drugiego okna u góry?

Hmm, może to nie jest takie proste. Ale nadal powinno być wykonalne ...

Brian Postow
źródło
1
... i tak Elisp zostaje dodany do listy rzeczy, których muszę się nauczyć :) Wielkie dzięki Brian;)
user119857
Najwyraźniej ktoś już to zrobił, ale tak, elisp to niesamowite narzędzie!
Brian Postow
-5

jest to domyślne zachowanie emacsa podczas dzielenia okna (Cx 3 dla podziału w pionie) otrzymujesz dwie kolumny, z których oba mają otwarty bufor

druga
źródło
1
Ale w tym przypadku nie jest w trybie śledzenia. Tryb śledzenia zapewni, że każdy bufor zostanie umieszczony na „następnej stronie”, dzięki czemu będziesz mógł czytać bufor, poruszając oczami, a nie przesuwając punkt.
jrockway
-7

Użyj podziału pionowego z Cx 3. Spowoduje to podzielenie bieżącego bufora na dwie kolumny, między którymi można się przełączać za pomocą Cx o.

Nathaniel Flath
źródło
2
To nie przepływa automatycznie z jednej kolumny do drugiej.
kmarsh