¿Cómo concatenar una variable en grupo y nombrar en dirección, en vim autocmd?

1

Estoy intentando hacer una función de encabezado automático en vim, para geratear el encabezado automático para cualquier tipo de archivo c, php, python y etc., y solo hago la plantilla en la carpeta ~ / .vim, pero quiero obtener el tipo en una variable y enviar al grupo y dirección de autocmd BufNewFile.

Algo como eso:

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

Pero el vim no ve el tipo como una variable, ve que una cadena, ¿alguien tiene una idea?

EMN
fuente

Respuestas:

0

Las reglas de evaluación de Vim son diferentes a la mayoría de los lenguajes de programación. Necesitas usar :execute para evaluar una variable (o expresión); De lo contrario, se toma literalmente; es decir, Vim usa el nombre de la variable como argumento.

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

Probablemente usaría printf() En lugar de concatenación para mejorar la legibilidad.

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

Tenga en cuenta que con su enfoque, básicamente está duplicando el incorporado detección de tipo de archivo , que ya proporciona un mapeo de extensiones de archivo a tipos. Preferiría definir un gancho genérico en BufNewFiley luego evaluar &filetype. Solo debes asegurarte de que tu evento esté definido después el de detección de tipo de archivo, por ejemplo, moviendo la definición de ~/.vimrc en una ~/.vim/plugin/ guión.

Ingo Karkat
fuente
0

Yo diría que es mejor que uses uno de los complementos de la plantilla de expansión. Hay muchas, ya hacen el trabajo, y mucho más.

Respecto al cómo, en plantilla de mu , Tengo un au BufNewFile que activa una llamada de función donde simplemente uso &ft (en lugar de expand('%:e') ) para elegir el archivo de plantilla correcto.

Con respecto a las manipulaciones de cadenas, Ingo ya ha señalado que ha olvidado extraer el nombre de la variable de la cadena. es decir, debería haber sido:

au BufNewFile * exe '0read ~/.vim/'.&ft.'_header.txt'
Luc Hermitte
fuente