W języku (Julia), który ma bloki zdefiniowane przez słowa kluczowe, takie jak for..end
, begin..end
oraz nawiasy, jaki jest dobry sposób na pominięcie takiego bloku? Ponadto end
jest nie tylko słowem kluczowym blokowym, ale także prawidłowym identyfikatorem używanym w innych miejscach.
Jednym ze sposobów jest poszukiwanie wyrażenia regularnego rozpoczynającego / zamykającego blokowanie i pomijanie wszystkich ciągów, komentarzy i end
s itd., Ale jest to nieco nieefektywne i trochę brzydkie.
Czy istnieje sposób, aby własna analiza składni Emacsa rozpoznała takie słowa kluczowe bloku, aby forward/backward-sexp
działało to automatycznie i aby można było szybko określić początek bieżącego bloku na podstawie wyniku np. syntax-ppss
?
[Uwaga: nie mam nic przeciwko samodzielnej analizie pliku, ale w takim przypadku nadal chciałbym wiedzieć, w jaki sposób mój parser powinien być podłączony do reszty emacsa.]
ruby-mode
co robi coś podobnego do ruby. Inną opcją jest podłączenie do smartparens , ma specjalną konfigurację dla trybu ruby , którego można użyć jako punktu wyjściaOdpowiedzi:
Możesz zajrzeć do wbudowanej biblioteki SMIE (skrót od Simple-Minded Indentation Engine). Pomimo nazwy wcięcie jest tylko jedną z funkcji, które zapewnia. Jest to metoda używana przez wiele trybów (w tym
ruby-mode
wspomnianych w komentarzu), aby zapewnić ruch i wcięcie seksu.Wdrażanie SMIE dla języka to z grubsza dwa kroki:
Do tego celu potrzebny będzie tylko pierwszy krok!
Ogólnie, parser zdefiniowany w ten sposób ładnie pasuje do emacsa. Na przykład
show-parens
podświetli wyrażenia podobne do paren, zdefiniowane w gramatyce SMIE (przynajmniej w wystarczająco ostatnich wersjach emacsa).Zauważ, że nadal nie będziesz mógł użyć
syntax-ppss
informacji o otaczającym środowisku, ponieważ da ci to tylko wynik parsera tabeli składni. Ale funkcje ruchowe sexp (na przykładup-list
po nimbackward-sexp
) mogą zastąpić.źródło
Zrobiłem bibliotekę do tego
Po zdefiniowaniu dostępnych jest kilka poleceń, przejście do przodu, do tyłu, kopiowanie itp.
Definiowanie - w pseudo-code--:
Po zakończeniu powinien być dostępny, tzn. Skopiowany i zwrócony w ten sposób
źródło