Предотвращение вставки пробела при вставке скобок в paredit - и другие проблемы

Я люблю Паредит. Но есть пара вещей, которые я ненавижу, и пока не решила их исправить:

  • Открывающая скобка вставляет пробел перед скобкой. Я понимаю, что это, вероятно, предпочтительный стиль всего Интернета, но это не мой. Как можно избежать этого?
  • Когда внутри цитируемой области (''), Я не могу удалить назад. Также вводим двойную кавычку (") вставит обратную косую черту (очевидно, чтобы избежать двойной кавычки - только то, что это не нужно, по крайней мере, в python. Поэтому я не хочу обратную косую черту. Как это настроить?
  • На самом деле, paredit старается (и не может) быть очень мудрым в отношении возврата. Мой забой должен всегда удалять предыдущий символ, независимо от того, нахожусь ли я в незавершенной области цитирования (paredit просто отказывается что-либо делать, если кавычки не совпадают. Попробуйте удалить здесь: "helloo). Единственная ситуация, когда удаление имеет смысл обрабатывать специально, это когда точка находится перед открывающей скобкой.

4 ответа

Решение

Это не ответ, но слишком долго для комментария...

Паредит предназначен для языков, где нет пробела перед ( было бы ужасно, и те, которые не имеют "цитата-ум" питона. Вероятно, вы могли бы взломать его для этих проблем, но синтаксис Python достаточно отличается, так что заставить его работать там будет нетривиальным проектом.

Что касается вашего последнего замечания, это звучит так, как будто вы совсем не хотите паредита, поскольку он очень намеренно старается сохранить сбалансированность ваших паренов и цитат, так что, возможно, это не тот инструмент, который вам подходит. Итак, вы могли бы предпочесть автопары или электрические пары или кучу других подобных инструментов.

Вы можете настроить вставку пространства вокруг разделителей в paredit через paredit-space-for-delimiter-predicates Переменная - см. строку документации для деталей. Есть несколько примеров его использования в интернете, но я не помню, где они.

Обработка строк в Paredit ограничена строковой нотацией, характерной для многих Лиспов, и ее изменение не является тривиальным, поэтому, если вы хотите использовать ее с экзотическим синтаксисом, таким как различные Python-разделители с одним или тремя разделителями, одинарные или двойные кавычки форматы, вы должны возиться глубоко внутри Paredit.

Пример кода ниже работает для схемы:

(defun paredit-space-for-delimiter-predicates-scheme (endp delimiter)
  "Do not automatically insert a space when a '#' precedes parentheses."
  (or endp
      (cond ((eq (char-syntax delimiter) ?\()
             (not (looking-back "#\\|#hash")))
            (else t))))

(defun scheme-mode-paredit-hook ()
  (enable-paredit-mode)
  (add-to-list (make-local-variable 'paredit-space-for-delimiter-predicates)
               'paredit-space-for-delimiter-predicates-scheme))

(add-hook 'scheme-mode-hook 'scheme-mode-paredit-hook)

Чтобы принудительно удалить символ, вы должны выбрать его и C-w Это. Чтобы принудительно вставить только один символ, скажем, вводную цитату, вы должны использовать C-q (,

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