Powiedz, że mam kod elisp, taki jak:
(+ 2 3▮(+ 3
4))
Czy istnieje sposób automatycznego ponownego wcięcia seksu za kursorem, gdy dodam lub usunę symbole?
Po naciśnięciu SPC 4 SPC
automatycznie uzyskałbym:
(+ 2 3 4 ▮(+ 3
4))
Mogę wykonać tę instrukcję, dzwoniąc, mark-sexp
a następnie indent-region
. Czy są na to lepsze sposoby?
elisp
indentation
Maciej Goszczycki
źródło
źródło
electric-indent-mode
ile lepiej niż mapowanie<return>
donewline-and-indent
Odpowiedzi:
Zamiast
mark-sexp
+indent-region
możesz nacisnąćC-M-q
. To zadzwoniindent-pp-sexp
. Nie automatyczny, ale nieco lepszy niż konieczność wywoływania dwóch poleceń.Lub jeśli używasz
paredit-mode
, naciśnijM-q
. To ponownie oprze się na całej definicji funkcji, w której się znajdujesz.źródło
(add-hook 'post-self-insert-hook 'indent-pp-sexp)
działa zaskakująco dobrze.M-x sp-indent-defun
. Wiążę to zC-M-q
.Tryb agresywnego wcięcia
Ponieważ niektórzy o to prosili, zamieniłem tę odpowiedź w pakiet .
Jeśli masz skonfigurowaną Melpę, możesz ją zainstalować za pomocą
Zobacz plik Readme dla wszystkich opcji, ale najprostszym sposobem na jego włączenie jest:
Stara odpowiedź
Następujące automatyczne wcięcie dotyczy tylko buforów elisp. Ma tę zaletę, że działa również podczas wymazywania lub szarpania (zamiast pisania). Łatwo jest również dodać do innych trybów.
Ta funkcja wcina dowolne wyrażenie s, w którym znajduje się obecnie punkt. Możesz powiązać go z kluczem, jeśli chcesz, ale najpierw zobacz poniżej.
Ten haczyk sprawi, że ta funkcja będzie uruchamiana po wpisaniu czegokolwiek, ale tylko w buforach elisp. To powinno sprawić, że wszystko będzie zawsze wcięte.
Spróbuj! Działa wyjątkowo dobrze.
Ponadto, postępując zgodnie z sugestią @ holocronweaver w komentarzach, możesz użyć czegoś takiego jak dla języków podobnych do c:
źródło
Nie znam wcześniejszego rozwiązania, ale możesz
post-self-insert-hook
to zrobić samodzielnie:Martwiłbym się jednak potencjalnymi problemami z wydajnością.
źródło
Możesz wypróbować tryb wcięcia el-fly , który jest bardziej
aggressive-indent-mode
grzeczny niż w przypadku Elisp.źródło