Jaki jest najlepszy sposób na osiągnięcie czegoś takiego jak składanie kodu lub typ cyklu używanego w trybie org. Jakie byłoby najlepsze rozwiązanie w elisp do tworzenia tego typu zachowań?
EDYCJA: Przepraszam, nie było jasne. Chcę zaprogramować w elisp coś, co robi rzeczy bardzo podobne do zwijania kodu, a właściwie najbardziej przypomina tryb org z hierarchią, którą można rozszerzyć. Zastanawiam się, jak najlepiej osiągnąć ten efekt. Wydaje mi się, że nakładki emacsa są dobrym rozwiązaniem, ale nie wiem.
Jeśli chodzi o składanie, po prostu używam wbudowanego zestawu selektywnego wyświetlania
EDYTUJ NUMER 2:
Dziękuję za odpowiedzi, ale myślę, że zadaję niewłaściwe pytanie, więc pozwól mi sprecyzować, co próbuję zrobić. Chciałbym stworzyć następujące
Kiedy umieścisz punkt na funkcji i wywołasz tę funkcję elisp, umieści definicję funkcji z dowolnego miejsca (myślę o użyciu do tego celu po prostu find-tag) i rozwinie ją w bieżącym buforze. Chodzi o to, że jeśli musisz przeskoczyć do innego bufora, aby odczytać definicję funkcji, czuję, że jest to przełącznik kontekstu do innego pliku. Chciałbym więc, żeby zachowywał się jak zwijanie kodu, tylko że pobiera kod zewnętrzny z bufora. Stwarza to pewne problemy, ponieważ nie może faktycznie wkleić kodu do bufora lub jeśli ktoś go zapisze, zapisze ściągnięty kod. Zastanawiam się więc, czy istnieje sposób na utworzenie obszaru wewnątrz bufora, który również nie jest częścią bufora. Myślę, że to ma sens.
źródło
EDIT NB 2
i zadać nowe pytanie.Odpowiedzi:
Zwalnianie jest generalnie niepotrzebne w emacsie, ponieważ zawiera narzędzia, które jawnie implementują czynności wykonywane ręcznie podczas zwijania kodu.
Większość ludzi odnosi sukcesy dzięki prostym wyszukiwaniom przyrostowym. Widzisz gdzieś wspomniane „foo”? Wpisz C-s
foo
, znajdź definicję, naciśnij klawisz Enter, przeczytaj ją, a następnie naciśnijC-x C-x aby wrócić do poprzedniego miejsca. Proste i bardzo przydatne.Większość trybów obsługuje imenu . M-x
imenu
pozwoli ci przejść do definicji funkcji (itp.) według nazwy. Możesz również powiązać go z kliknięciem myszy, aby uzyskać menu funkcji (lub dodać je do paska menu; więcej szczegółów znajdziesz na stronie Informacje). Dostarcza danych dla trybu-funkcji, który pozwoli ci zobaczyć, w której funkcji aktualnie się znajdujesz w modelu. (Dlaczego jednak twoje funkcje są tak długie?)Jest też speedbar , który wyświetla graficznie informacje imenu (i inne rzeczy).
Jeśli chcesz uzyskać przegląd swojego pliku, spróbuj M-x
occur
". Biorąc pod uwagę wyrażenie regularne, utworzy nowy bufor z każdym dopasowaniem w bieżącym buforze. Możesz wyszukać" (defun ", aby uzyskać przegląd funkcji bieżącego pliku narzędzia. Kliknięcie wyniku przeniesie Cię do tej pozycji w pliku.W każdym razie pomyśl o tym, co naprawdę chcesz osiągnąć, a Emacs prawdopodobnie to implementuje. Nie walcz z niedoskonałymi narzędziami, które powodują, że ciągle składasz i rozkładasz rzeczy.
źródło
tryb ukrywania (
hs-minor-mode
) z domyślnym przypisaniem klawiszy,C-c @ C-M-h
aby wywołać zwijanie (hs-hide-all
)źródło
zR
,zM
,zo
,zc
.Inny sposób na oskórowanie kota:
M-1 Cx $ i dzieje się magia!
Jak zwykle, to biała magia: Cx $ przywróci kod.
z pomniejszego bloga o czarodziejach emacsa
Tylko dla kompletności: M-3 Cx $ pokaże głębszy zagnieżdżony kod i tak dalej.
FWIW Zrobiłem dzisiaj małego pomocnika, bazującego na czymś. znaleziony tutaj , aby F5 przełącza zwijanie kodu w oparciu o bieżącą pozycję kursora:
źródło
Używam trybu pomocniczego zarysu, aby złożyć mój kod w Pythonie. Zamiast potrzeby umieszczania {{{i}}}, jak w trybie zwijania, używa tego, gdzie zdefiniowano blok.
http://www.gnu.org/software/emacs/manual/html_node/emacs/Outline-Mode.html http://www.emacswiki.org/emacs/OutlineMinorMode
Jestem prawie pewien, że pochodzi z emacsa. Następnie dodaję to do mojego .emacs
źródło
outline-mode
obsługuje Pythona od razu po wyjęciu z pudełka w emacs 24 - nie ma potrzeby korzystania z niestandardowychoutline-level
funkcji. To wszystko, co musiałem dodać do mojegouser.el
:(add-hook 'python-mode-hook 'outline-minor-mode)
outline-minor-mode-prefix
- domyślne skróty klawiszowe są okropne - używam(setq outline-minor-mode-prefix (kbd "C-;"))
Możesz również uzyskać zwijanie kodu za pomocą CEDET z następującym kodem w pliku init:
Po ocenie tego kodu mały trójkąt pojawi się w obszarze fringle, dzięki czemu będziesz mógł składać i rozkładać kod za jego pomocą. Ta metoda jest bardziej precyzyjna, ponieważ wykorzystuje informacje składniowe wyodrębnione z kodu źródłowego
źródło
hs-minor-mode działa pięknie.
Działa jeszcze piękniej w połączeniu z fold-dwim (rób co mam na myśli). Następnie jest fold-dwim-org, który zapewnia tryb org, podobny do przypisywania klawiszy do zwijania kodu! Oba można zainstalować za pomocą marmolady (i chyba elpa).
źródło
Niby nie ma idealnego rozwiązania, ale myślę, że najlepsze jest to:
http://www.emacswiki.org/emacs/FoldingMode
źródło
vimish-fold
to także przyjemne i łatwe rozwiązanie.https://github.com/mrkkrp/vimish-fold .
Ze strony głównej:
Korzystając z doskonałego
use-package
, instaluję i aktywuję go za pomocą tego fragmentu kodu w mojej konfiguracji:źródło
Dziwię się, że nikt nie wspomniał o zwężaniu-poszerzaniu. Jest super niesamowity, jest również dostarczany w pakiecie z emacsem. Po prostu wybierz kod, na którym chcesz się skupić i naciśnij
C-x n n
, aby wrócić do trybu pełnego widoku, po prostu zróbC-x n w
. Zawsze wolę używać wbudowanej funkcjonalności emacsa niż zaśmiecać moją przestrzeń użytkownika innym pakietem. Jeśli emacs może to zrobić z wbudowaną funkcjonalnością, to wolę to od jakiegoś pakietu innej firmy, ale to tylko ja, nie oznacza ani nie sugeruje niczego innego poza tym, że lubię proste rzeczy od złożonych, długich konfiguracji.źródło
emacs zawiera tryb hs-minor, który fascyluje składanie kodu pomiędzy wyważonymi wyrażeniami http://www.emacswiki.org/emacs/HideShow
źródło
Uważam, że twoje porównanie twojego "projektu" do składania nie jest całkiem dobre, ponieważ składanie polega na zmianie wyglądu przy zachowaniu nienaruszonej zawartości bufora (tekstu). Twój projekt wymagałby pokazania dodatkowego tekstu przy zachowaniu nienaruszonej zawartości bufora, AFAIU. Więc. nie jest to możliwe do zaimplementowania jako kompozycja wstawiania tekstu i zawijania (wtedy zawartość bufora uległaby zmianie).
Ale być może jest to rzeczywiście możliwe, ten sam mechanizm jak składanie odbywa się - „nakładek” ... Rozważmy i „przed-string” „after-string” właściwości nakładki ; być może mógłbyś umieścić definicje funkcji w tych napisach należących w punkcie do nakładki o zerowej długości. Przyjrzyj się funkcji outline-flag-region, aby zobaczyć, jak nakładki są używane w trybie konturu.
źródło
Jeśli używasz
hs-minor-mode
, dobrym pomysłem może być również ustawienie wygodniejszego skrótu, np:źródło
Z inspiracji odpowiedź einSelbst za :
Voila,
C-x $
nagle stał się użyteczny nawet bezC-u
aniM-4
działalności.źródło
Jeśli wykonujesz trochę JavaScript i używasz
js2-mode.el
, możesz:C-c C-f
: przełącz ukryj / pokaż wszystkoC-c C-e
: ukryj elementC-c C-s
: pokaż elementźródło