Lispコードを書くとき、私は時々ネストされた式に深くなっていて、私が欲しいのは、欠けている閉じ括弧をすべて挿入することです。現時点では、不一致の括弧が表示されるまでそれらを挿入していますが、効率的ではありません。
不足している括弧をすべて挿入するコマンドはありますか?
参考までに、私はsmartparensを使用して、一致する括弧を自動的に挿入しています。それでも、時々これを行う必要があるだけです。
Lispコードを書くとき、私は時々ネストされた式に深くなっていて、私が欲しいのは、欠けている閉じ括弧をすべて挿入することです。現時点では、不一致の括弧が表示されるまでそれらを挿入していますが、効率的ではありません。
不足している括弧をすべて挿入するコマンドはありますか?
参考までに、私はsmartparensを使用して、一致する括弧を自動的に挿入しています。それでも、時々これを行う必要があるだけです。
回答:
これは、閉じられていない括弧と他の一致したペアをすべて閉じる関数です。Emacsのsexp解析に依存しています。単一文字の一致ペアのみをサポートしているため、のようなもの{-
はで閉じられ}
ません-}
。Lispでは、それは問題ではありません。
(defun close-all-parentheses ()
(interactive "*")
(let ((closing nil))
(save-excursion
(while (condition-case nil
(progn
(backward-up-list)
(let ((syntax (syntax-after (point))))
(case (car syntax)
((4) (setq closing (cons (cdr syntax) closing)))
((7 8) (setq closing (cons (char-after (point)) closing)))))
t)
((scan-error) nil))))
(apply #'insert (nreverse closing))))
([-!-foo]
、あなたが挿入しない])
時点で、または)
後にfoo]
?
([-!-foo]
、私は)
後に挿入しfoo]
ます。しかし、私はもちろん間違っている可能性があります。たぶん、@ rlazoは詳しく説明できます。
それを行うための非常に原始的な(そしてほぼ間違いなく)方法は
(defun buffer-needs-parens-fixing ()
(save-excursion
(condition-case nil
(check-parens)
(error (point)))))
(defun buffer-fix-parens ()
(interactive)
(while (buffer-needs-parens-fixing)
(insert ")")))
他の制限の中で、挿入が必要なすべての括弧は次のことを前提としています。
私はそれがあなたの特定のユースケースに役立つのに十分かもしれないと思う
]
要求に応じて、すべての開いているかっこを閉じる、超右のかっことして動作する機能がありました。