Como adicionar uma string na cabeça de um novo arquivo criado automaticamente no VIM?

4

Para ser especificado, o que quero fazer é:

  • se eu criar xxx.php , #!/usr/bin/env php será a primeira linha do arquivo
  • se eu criar xxx.py , #!/usr/bin/env python será adicionado primeiro.

Como posso abordar isso? Obrigado!

    
por SpawnST 25.06.2010 / 05:10

4 respostas

9

Depois de algum trabalho de pesquisa, eu acho um post em SO que pode resolver minha problema usando modelos.Espero que seja útil para vocês.

Cria modelos pythontmp.txt e phptmp.txt em alguns diretório (exemplo: ~/.vim/templates/ ) como abaixo

#!/usr/bin/env python(php)

Adicione a seguinte configuração para .vimrc

autocmd bufnewfile *.py :0r ~/.vim/templates/pythontmp.txt
autocmd bufnewfile *.php :0r ~/.vim/templates/phptmp.txt
    
por 25.06.2010 / 09:47
1

Não tenho certeza se você pode configurar o vim para fazer isso sem ajuda. Você pode criar um script auxiliar para fazer isso por você.

Assumindo um ambiente linux ... Esse script verificará a extensão do arquivo e, se necessário, criará o arquivo com o cabeçalho antes de chamar o vim.

#/bin/bash

type='expr "\" : ".*\.\(.*\)"'   # Check the file extension

case "$type" in
    py) 
    interpreter=python;
    ;;
    php)
    interpreter=php;
    ;;
esac

if test ${interpreter+defined}; then echo "#!/usr/bin/env $interpreter" > $1 && /usr/bin/vim $1;
else /usr/bin/vim $1;
fi

Você poderia aliasar esse script para ser executado no lugar do vim.

alias vim='/path/to/script.sh'
    
por 25.06.2010 / 09:02
1

Existem muitos plugins que oferecem este recurso. Alguns até mesmo permitem deduzir automaticamente várias coisas, ou até mesmo parametrizar seu cabeçalho, dependendo da pasta onde você está criando o novo arquivo ( mu-template ).

    
por 25.06.2010 / 11:25
1

Eu realmente gosto da abordagem de definir uma função vim para fazer o trabalho, assim fica muito mais fácil fazer coisas mais complicadas. Por exemplo, se o texto inserido depender do nome do arquivo, como é comumente feito com C / C ++. Meu C / C ++ se parece com isto:

autocmd BufNewFile *.{h,hpp} call <SID>insert_c_gates() 

...

function! s:insert_c_gates()
   let gatename = <SID>get_gate_name()
   execute "normal i#ifndef " . gatename
   execute "normal o#define " . gatename
   execute "normal Go#endif /* " . gatename . " */"
   normal kk
endfunction

A função get_get_name () forma o nome do gate a partir do nome do arquivo que está sendo editado e, na verdade, varia dependendo do projeto em que estou trabalhando, porque alguns projetos querem que ele seja formatado de uma determinada maneira.

    
por 25.06.2010 / 16:05