linux - convertir - ¿Cómo resaltar los scripts de Bash en Vim?
convertir archivos a utf 8 sin bom (11)
¿Estás dando correctamente al script de shell una extensión .sh
? La selección de sintaxis automática de Vim se basa casi por completo en la detección del nombre de archivo (extensión). Si un archivo no tiene un conjunto de sintaxis (o es la sintaxis incorrecta), Vim no cambiará automáticamente a la sintaxis correcta simplemente porque comenzó a escribir un script en un idioma determinado.
Como una solución temporal, el comando :set syn=sh
activará el resaltado de sintaxis de shell-script.
El editor de My Vim resalta automáticamente los archivos PHP ( vim file.php
), los archivos HTML ( vim file.html
), etc.
Pero cuando escribo: vim file
y dentro de él escribo un script Bash, no lo resalta.
¿Cómo puedo decirle a Vim que lo destaque como un guión de Bash?
Empiezo a escribir #!/bin/bash
en la parte superior del archivo, pero no funciona.
Cuando crea un nuevo archivo, solo la detección del nombre de archivo entra en juego; la detección de contenido ( #!/bin/bash
) no se aplica si la escribe después de crear un nuevo búfer.
Lo sensato es simplemente hacer :set ft=bash
la primera vez, y la próxima vez que lo edite, el #!/bin/bash
establecerá el tipo de archivo correcto automáticamente.
En realidad, el resaltado de sintaxis es una característica de vim not vi. Intenta usar el comando vim y luego hazlo
:syntax on
Las respuestas hasta ahora son correctas, puede usar la extensión (como .sh
) o una línea shebang (como #!/bin/bash
) para identificar el tipo de archivo. Si no tiene uno de esos, puede especificar el tipo de archivo manualmente utilizando un comentario en línea en la parte superior o inferior de su archivo.
Por ejemplo, si desea identificar un script sin una extensión como un script de shell, puede agregar este comentario al principio de su archivo:
# vim: set filetype=sh :
o
# vim: filetype=sh
Eso le dirá a vim que trate el archivo como un script de shell. (También puede configurar otras cosas en la línea de modo. En vim escriba :help modeline
para obtener más información).
Llegué a esta respuesta buscando específicamente cómo resaltar la sintaxis bash
, no el shell POSIX. Simplemente hacer un set ft=sh
(o equivalente) dará como resultado que el archivo se destaque para el shell POSIX, lo que deja mucha sintaxis que es válida en bash
resaltada en rojo. Para resaltar Bash:
" Set a variable on the buffer that tells the sh syntax highlighter
" that this is bash:
let b:is_bash = 1
" Set the filetype to sh
set ft=sh
Tenga en cuenta que si su ft
ya es sh
, aún necesita el comando set
; de lo contrario, let
no surte efecto de inmediato.
Puede hacer que esto sea un valor predeterminado global al hacer que la variable sea global, es decir, let g:is_bash = 1
.
:help ft-sh-syntax
es la página de manual que tuve que buscar; lo explica y cómo activar el resaltado de otros sabores de shell.
Probablemente la forma más fácil de obtener resaltado de sintaxis en un nuevo archivo, es simplemente volver a cargarlo después de escribir la línea shebang. Un simple :w
:e
escribirá el archivo, lo volverá a cargar e interpretará la línea shebang que acaba de escribir para proporcionarle el resaltado de sintaxis apropiado.
Si ya conoce el tipo de archivo antes de abrir el script o si está creando un nuevo script sin una extensión que es común, puede pasarlo a vim en la línea de comandos de la siguiente manera:
vim -c ''setfiletype sh'' path/to/script
vim -c ''setfiletype python'' path/to/script
Una vez que agregue el shebang en la parte superior del archivo, guárdelo y vuelva a cargarlo (p :w|e
Ej . :w|e
) y la coloración de sintaxis puede activarse.
Véase también la sintaxis inconsistente de Vim que destaca los archivos bash , la respuesta aceptada también puede ser de ayuda.
Vim también puede detectar tipos de archivos inspeccionando sus contenidos (como por ejemplo si la primera línea contiene un bash shebang), aquí hay una cita del filetype.txt
ayuda filetype.txt
:
Si su tipo de archivo solo puede detectarse inspeccionando el contenido del archivo
Crea tu directorio de tiempo de ejecución de usuario. Normalmente usaría el primer elemento de la opción ''runtimepath''. Ejemplo para Unix:
:!mkdir ~/.vim
Cree un archivo de script vim para hacer esto. Ejemplo:
if did_filetype() " filetype already set..
finish " ..don''t do these checks
endif
if getline(1) =~ ''^#!.*/<mine/>''
setfiletype mine
elseif getline(1) =~? ''/<drawing/>''
setfiletype drawing
endif
Ver $ VIMRUNTIME / scripts.vim para más ejemplos. Escriba este archivo como "scripts.vim" en su directorio de tiempo de ejecución de usuario. Por ejemplo, para Unix:
:w ~/.vim/scripts.vim
La detección funcionará de inmediato, no es necesario reiniciar Vim.
Su scripts.vim se carga antes de las comprobaciones predeterminadas para los tipos de archivos, lo que significa que sus reglas anulan las reglas predeterminadas en $ VIMRUNTIME / scripts.vim.
vim puede detectar por el comentario superior
prueba esta línea en la parte superior del archivo
#!/bin/sh
vim ya reconoce muchos tipos de archivos de forma predeterminada. La mayoría de ellos funcionan por extensiones de archivo, pero en un caso como este, vim también analizará el contenido del archivo para adivinar el tipo correcto.
vim establece automáticamente el tipo de archivo para nombres de archivo específicos, como .bashrc
, .tcshrc
, etc. Pero un archivo con una extensión .sh
se reconocerá como script csh, ksh o bash. Para determinar qué tipo de script es exactamente, vim lee la primera línea del archivo para ver el #! línea.
Si la primera línea contiene la palabra bash
, el archivo se identifica como una secuencia de comandos bash. Por lo general, ve #!/bin/bash
si la secuencia de comandos se debe ejecutar directamente, pero para un archivo de configuración de shell con un simple # bash
también funcionaría.
Si desea ver los detalles, esto se implementa en $VIMRUNTIME/filetype.vim
.