Codifique modelos com o emacs

4

Como posso configurar o emacs para gerar algum esqueleto de código?

Por exemplo, para arquivos C:

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char **argv) {

    return EXIT_SUCCESS;
}

ou algo mais dinâmico em Python:

#!<insert result of 'which python' here>

def main():

if __name__ == "__main__":
    main()

Eu gostaria de definir dois modos para inserir os modelos:

  • crie uma função insert-template (ou algo assim), ligando-a a uma determinada combinação de teclas ( C-c C-t ) que inseriria o modelo correto de acordo com o modo principal.

  • crie uma opção para inserir automaticamente o modelo na criação do arquivo, detectando o tipo correto pelo sufixo do nome do arquivo (semelhante ao modo principal detectado). Esta opção deve ser facilmente ativada / desativada no arquivo .emacs .

Idealmente, gostaria de evitar módulos / pacotes de terceiros. Mas eu não sou completamente contra isso.

    
por rahmu 05.06.2012 / 13:20

5 respostas

3

Por favor, verifique yasnippet . É um ótimo sistema de templates Emacs, facilmente instalado e personalizável para o que você quer fazer. Além disso, verifique a documentação (sobre como usar seções e uma demonstração em vídeo).

    
por 05.06.2012 / 15:04
2

Por que evitar modos do emacs de terceiros se eles já estão lá? O EmacsWiki tem uma longa lista de soluções para o seu problema . Destes, abbrev-mode está conosco há décadas. Pode ser muito suavemente abusado para fazer o que você precisa. auto-insert-mode é ainda melhor e parte do emacs.

Eu suspeito que você tenha que escrever um pouco do Lisp do emacs para pesquisar o caminho do binário do interpretador Python (ou qualquer outra coisa).

E existem até poderosas opções poderosas por aí (confira a página do EmascWiki - não há limite que cubra todas as suas necessidades)

    
por 05.06.2012 / 15:03
1

Para inserir automaticamente esses arquivos na criação de arquivos, acho que você precisa adicionar ganchos aos modos apropriados. Por exemplo

(add-hook 'python-mode-hook '(lambda () (when (empty-buffer?) (insert-python-template))))

(defun empty-buffer? () (= (buffer-end 1) (buffer-end -1)))

(defun insert-python-template ()
  (interactive)
  (insert "Template stuff goes here"))

Agora, sempre que você abrir um novo buffer em python-mode , ele será automaticamente preenchido com esse modelo.

Se você estiver aberto a módulos de terceiros e quiser adicionar modelos / modelos parciais a um buffer aberto, confira o yasnippet modo menor. Eu não cheguei a usá-lo, mas continuo ouvindo coisas boas sobre isso.

    
por 05.06.2012 / 15:13
0

Que tal o modo de modelo? Eu o usei quando precisei criar muitos arquivos novos.

Isso não lida com seu desejo de inserir funções de um modelo, mas lida com a criação de novos arquivos de maneira bastante flexível.

Confira o link

Acabei de baixar a versão 3.1c, e ela pareceu funcionar com o meu emacs (versão 22.0.90.1 darwin)

    
por 05.06.2012 / 17:52
0

Você pode usar o auto-insert-mode incorporado. Adicione o seguinte ao seu arquivo .emacs :

(auto-insert-mode)
(setq auto-insert-directory "~/.emacs.d/templates/")  ;; trailing slash IMPORTANT
(define-auto-insert "\.py" "python-template.py")

e, em seguida, coloque o conteúdo do modelo em python-template.py no diretório ~/.emacs.d/templates/ .

Se você não quiser ser solicitado a inserir cada vez, também poderá adicionar a seguinte linha ao arquivo .emacs :

(setq auto-insert-query nil) ;; don't prompt before template insertion
    
por 04.02.2016 / 04:59

Tags