ver convertir codificacion bom archivos archivo linux bash vim syntax-highlighting vim-syntax-highlighting

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



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 .