Как избежать лишних пробелов при добавлении первого выражения
При использовании Paredit я часто сталкиваюсь со следующим (pipe char представляет курсор):
(foo |bar baz)
Я хочу вложить bar
в паранах, поэтому я использую paredit-wrap-around
(M-(), чтобы получить это:
(foo (|bar) baz)
То же самое применимо, когда я хочу вместо этого поместить строку в строку, я могу использовать M-", чтобы получить это:
(foo "|bar" baz)
Однако Clojure также использует квадратные скобки []
и фигурные скобки {}
для векторов, карт и наборов. Похоже, что у них нет команды paredit "обернуть вокруг". Так что в этом случае, например, чтобы поместить bar в вектор, я обычно использую клавишу [, чтобы создать новый вектор:
(foo [|] bar baz)
с последующим paredit-forward-slurp-sexp
(C-→), что приводит к:
(foo [| bar] baz)
Я хотел бы удалить пробел, который был вставлен ранее bar
, Это возможно? Почему paredit сохраняет пробел при переходе от пустого выражения к тому, которое содержит один элемент? Разве первый элемент, добавленный к S-выражению, не должен всегда давить прямо на открывающее слово?
2 ответа
Паредит уже довольно давно paredit-wrap-curly
а также paredit-wrap-square
, Если вы хотите их использовать, просто привяжите их к звучащему ключу и держите его. Если вы используете такую старую версию paredit, что эти функции не существуют, вам следует выполнить обновление (но я не думаю, что это так, поскольку команды slurp работают с ними).
Последняя версия разработки paredit binds M-[
в paredit-wrap-square
который делает именно то, что вы хотите. Emacs уже связывает M-{
это к backward-paragraph
, но если вы никогда не используете это, вы можете настроить paredit, чтобы скрыть это:
(eval-after-load 'paredit
'(progn
(define-key paredit-mode-map (kbd "M-{") 'paredit-wrap-curly)))
Если вы хотите удалить все пространство вокруг точки, вы всегда можете набрать M-\
за delete-horizontal-space
,