Fechando automaticamente os aparelhos em EMACs?
Pergunta
Eu vi um plugin para vim chamado Autoclose (descoberto de isto post) que adiciona automaticamente a cinta de fechamento ao digitar '(', '{' etc.
Por exemplo; Quando eu digito o seguinte ( |
é o cursor):
int main(|
Eu gostaria do fechamento )
ser inserido automaticamente para mim:
int main(|)
Alguém conhece um recurso semelhante para o Emacs - o Google falhou comigo desta vez!
Solução
Há também 'paredit
. o folha de dicas mostra todos os comandos disponíveis. Acontece que gosta melhor do que o modo elétrico sugerido em outra resposta. Embora o Paredit se aplique apenas a (), isso pode não ser suas necessidades.
Mas, para ser sincero, há um monte de pacotes em torno dos parênteses. O wiki tem todos eles listado aqui. Os modos que abordam sua pergunta são:
Outras dicas
sim, Este modo é chamado de energia elétrica. Você pode combinar o comportamento elétrico com esta macro simples para o máximo conforto:
(defun electric-pair ()
"If at end of line, insert character pair without surrounding spaces.
Otherwise, just insert the typed character."
(interactive)
(if (eolp) (let (parens-require-spaces) (insert-pair))
(self-insert-command 1)))
Em seguida, ative -o vinculando os caracteres apropriados a ele nos seus modos de programação favoritos. Por exemplo, para Pythonmode:
(add-hook 'python-mode-hook
(lambda ()
(define-key python-mode-map "\"" 'electric-pair)
(define-key python-mode-map "\'" 'electric-pair)
(define-key python-mode-map "(" 'electric-pair)
(define-key python-mode-map "[" 'electric-pair)
(define-key python-mode-map "{" 'electric-pair)))
O modo CPERL fornece isso como um embutido:
;; from my .emacs
(add-hook 'cperl-mode-hook
(lambda ()
(setq cperl-hairy nil
abbrev-mode t ;; automatic keyword expansion
cperl-highlight-variables-indiscriminately t
cperl-auto-newline t
cperl-auto-newline-after-colon t
cperl-regexp-scan nil
cperl-electric-keywords t
cperl-electric-linefeed t
cperl-electric-parens nil) ;; <------ electric parens!
Outros modos podem fornecer algo semelhante.
Cmarcelo tem escrito um post maravilhoso sobre isso usando o modo esqueleto. Ele também mostra como remover o suporte equilibrado se você excluir o suporte de abertura e como lidar com o caso em que você digita acidentalmente o suporte de fechamento. (Aliás, ambos os comportamentos copiam o TextMate).
Atualizar:
Desde que publiquei esta resposta, descobri Autopair que é um sistema praticamente perfeito para este caso de uso. Eu tenho usado muito e adorando.
Vou necro este tópico e fornecer outra alternativa. Há um novo projeto iniciado recentemente que lida com a inserção automática de pares, embrulho de regiões, navegação em torno de expressões equilibradas e muito mais. A lista de recursos é muito longa para dar aqui, então vou apenas vincular ao SmartParens Github Repo onde você pode ler Readme detalhado.
É o superconjunto do Autopair acima mencionado e fornece a maioria das principais características do Paredit (e estendido a todos os tipos de pares diferentes, não apenas aqueles reconhecidos pelo EMACS Syntax-Tables).