Как избежать лишних пробелов при добавлении первого выражения

При использовании 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,

Другие вопросы по тегам