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!

Foi útil?

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).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top