Abrir plantilla en el editor vi / vim según la extensión del fichero
En el editor vi podemos tener una serie de plantillas para distintos tipos de ficheros, bien para tener la estructura básica de un fichero ya creada o bien para tener una ayuda como tener la estructura de las funciones más usuales de ese lenguaje.
Así, podemos tener una serie de plantillas para Markdown, HTML, JavaScript, Python, Shell Script, PHP….
$ ls ~/.vim/*_template html_template js_template md_template php_template py_template sh_template
En las que cada cual puede incluir el contenido que más oportuno le parezca o más le vaya a ayudar en su trabajo, por lo que no hablaré de esas plantillas sino de cómo usarlas.
Configuración en ~/.vimrc
Para que abra una plantilla concreta en función de la extensión del fichero cuando el fichero esté vacío, es decir, que no modifique un fichero existente, sino que ayude a crear la estructura de un nuevo fichero, debemos incluir en el fichero ~/.vimrc (configuración de vi) la o las siguientes líneas:
au bufnewfile *.html 0r html_template au bufnewfile *.js 0r js_template au bufnewfile *.md 0r md_template au bufnewfile *.php 0r php_template au bufnewfile *.py 0r py_template au bufnewfile *.sh 0r sh_template
Donde:
- au -> indica que ejecute un autocomando (autocmd)
- bufnewfile -> indica que se ejecute cuando haya un buffer de un nuevo fichero (para no afectar a los ficheros existentes)
- *.extensión -> cuando se abra un fichero con ese patrón. También es útil crear plantillas según un patrón más elaborado, como, además de una extensión, añadir un prefijo (module_, class_, import_) que no necesariamente tiene que ser el nombre definitivo del fichero, ya que luego podemos guardar el fichero con el nombre que queramos (:w nuevo_nombre)
- 0r -> para que añada la plantilla al comienzo del fichero (línea 0)
- fichero_plantilla -> el fichero a incluir cuando se abra un nuevo fichero con ese patrón en el nombre
Posibles errores
El patrón y el fichero puede cambiar, para asociar distintas plantillas a distintos patrones, no así el resto de instrucciones, ya que olvidar el 0r daría un error:
Se ha detectado un error al procesar BufNewFile Auto-órdenes para "*.sh": E488: Caracteres en exceso al final de la línea
E intentar colocarlo en otra línea distinta a la cero también dará error:
Se ha detectado un error al procesar BufNewFile Auto-órdenes para "*.sh": E16: El rango no es válido: 10r ~/.vim/sh_template
Obviamente, el fichero a incluir debe existir, si no, también vi mostrará un mensaje de error:
Se ha detectado un error al procesar BufNewFile Auto-órdenes para "*.sh": E484: No se pudo abrir el archivo "/home/fernando/.vim/sh_template0r"