Как вы прокомментируете все или часть LISP S-EXP, используя Paredit?

StackOverflow https://stackoverflow.com/questions/4288339

  •  28-09-2019
  •  | 
  •  

Вопрос

При редактировании кода LISP, иногда полезно полностью прокомментировать определение верхнего уровня, как это:

;(defun some-fn-which-is-broken (x)
;  ...)

... Или прокомментировать только часть S-выражения, как это:

(foo x
;    y
     z)

... а затем перекомпилируйте файл и проверьте что-то в репре.

С включенным режимом Paredit, это не работает. Вот что произойдет, если точка прямо перед первым парнем ниже:

(defun some-fn (x)
  ...)

А вы введите точку с запятой, что введено, является точкой с запятой и новой строкой:

;
(defun some-fn (x)
  ...)

То же самое с комментированием частью S-выражения:

(foo x
;    
     y
     z)

Я думаю, что если определение все на одной строке, это работает:

;(defparameter *foo* 10)

... но иначе я не могу узнать, как это сделать. Paredit отлично, мне очень хотелось бы продолжать его использовать. Есть ли какие-нибудь леги, которые знают об этом, или эмац-волшебники, которые могут взломать немного эмац, чтобы связать что-то вроде paredit-comment-out-s-expr?

Если есть более светлый или эмацсийский способ достичь по существу то же самое, комментируя части источника для перекомпилирования, пожалуйста, не стесняйтесь предложить им!

Это было полезно?

Решение

Поместите точку на первом персонаже всего секса, отметьте весь сексп с CM-Space., и выпуск М-; делать комментирование. Если нужно это сделать, ваш исходный код также будет переопределен так, чтобы только селсп был помечен, и ничего, который также был на одной линии, находится в комментарии.

Вы можете очень легко сделать простую команду или даже макрос, чтобы сделать это:

(Defun Comment-Sexp () «Прокомментируйте SEXP в точке» (Interactive) (Easy-Excursion (Mark-Sexp) (Paredit-Comment-Dwim))))

Другие советы

Только сбоку Примечание:

То #+ и #- Макрос читателя довольно приятно для комментирования секса. Они позволяют игнорировать следующую SEXP, если данный символ не / находится в *FEATURES*. Отказ Просто выберите символ не в *FEATURES*, и используйте его с #+ как это:

#+nil
(defun foo ()
  ...)

Теперь определение функции будет игнорироваться (если NIL в *FEATURES*, который не очень вероятно).

В качестве меры StopGap вы можете использовать CQ (quoted-insert) Чтобы вставить произвольный персонаж, не запуская любую магию, связанную с режимом. Например, в Java-Mode, набрав скобки переименовать текущую строку, что не всегда то, что я хочу; В таких случаях я вставлю скобки с CQ сохранить мой отступ. (Или чаще, я ввожу скобки, наблюдающую изменение вдавливания, проклятие, отменить и повторно войти с CQ.)

Для комментирования в целом, вероятно, было бы легче использовать М-; (comment-dwimВместо того, чтобы набрать запястья вручную.

Ты можешь использовать C-M-SPC M-; Чтобы отметить S-выражение (C-M-SPC за mark-sexp) а затем комментировать это (M-; за comment-dwim).

В Parredit 23, просто набрав ; не оттолкнет ничего, что не нужно от линии. Так что это сделает правильные вещи для вашего второго примера. И если вы хотели прокомментировать z вместо y Это будет толкать только закрывающий разделитель в другую строку.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top