como concatenar uma variável no grupo e nome no endereço, no vim autocmd?

0

Estou tentando fazer uma função de cabeçalho automático no vim, gerar cabeçalho automático para qualquer tipo de arquivo c, php, python e etc, e só faço o modelo na pasta ~ / .vim, mas quero obter o tipo em uma variável e envie para o grupo e endereço de autocmd BufNewFile.

Algo assim:

let type=expand('%:e')
au BufNewFile *. .type  so '~/.vim/.type._header.txt'

Mas o vim não vê tipo como uma variável, vê que uma string, alguém tem uma ideia?

    
por EMN 21.12.2016 / 06:21

2 respostas

0

As regras de avaliação do Vim são diferentes da maioria das linguagens de programação. Você precisa usar :execute para avaliar uma variável (ou expressão); caso contrário, é tomado literalmente; Ou seja, o Vim usa o próprio nome da variável como argumento.

let type = expand('%:e')
execute 'au BufNewFile *.'  . type  'so ~/.vim/' . type . '_header.txt'

Provavelmente usaria printf() em vez de concatenação para melhorar a legibilidade.

execute printf('au BufNewFile *.%s so ~/.vim/%s_header.txt', type, type)

Note que com a sua abordagem, você está basicamente duplicando a detecção de tipo de arquivo , que já fornece um mapeamento de extensões de arquivos para tipos. Eu prefiro definir um gancho genérico em BufNewFile e, em seguida, avaliar &filetype . Você só precisa ter certeza de que o seu evento está definido após aquele para a detecção do tipo de arquivo, por exemplo movendo a definição de ~/.vimrc para um script ~/.vim/plugin/ .

    
por 21.12.2016 / 09:38
0

Eu diria que é melhor você usar um dos plug-ins de expansão de modelo. Há muito, eles já fazem o trabalho e muito mais.

Em relação ao como, em mu-template , eu tenho um au BufNewFile que aciona uma chamada de função onde eu simplesmente use &ft (em vez de expand('%:e') ) para escolher o arquivo de modelo correto.

Em relação às manipulações de strings, o Ingo já apontou que você esqueceu de extrair o nome da variável da string. ou seja, deveria ter sido:

au BufNewFile * exe '0read ~/.vim/'.&ft.'_header.txt'
    
por 21.12.2016 / 15:42

Tags