Comment mettre en avant les scripts Bash dans Vim?

Mon éditeur Vim auto souligne PHP les fichiers ( vim file.php ), les fichiers HTML ( vim file.html ) et ainsi de suite.

mais quand je tape: vim file et qu'à l'intérieur, j'écris un script Bash, il ne le met pas en surbrillance.

Comment puis-je dire à Vim de le mettre en évidence comme un script Bash?

je commence à taper #!/bin/bash en haut du fichier, mais ça ne marche pas.

56
demandé sur Mateusz Piotrowski 2010-04-05 06:45:24

11 réponses

donnez-vous correctement au script shell une extension .sh ? La sélection de syntaxe automatique de Vim est presque entièrement basée sur la détection du nom de fichier (extension). Si un fichier n'a pas de syntaxe définie (ou est la mauvaise syntaxe), Vim ne changera pas automatiquement la syntaxe correcte juste parce que vous avez commencé à taper un script dans une langue donnée.

comme solution temporaire, la commande :set syn=sh activera la mise en évidence de la syntaxe des scripts shell.

67
répondu Mark Rushakoff 2010-04-05 02:53:01

Les réponses sont correctes que vous pouvez utiliser l'extension (comme .sh ) ou une ligne shebang (comme #!/bin/bash ) pour identifier le type de fichier. Si vous n'en avez pas, vous pouvez toujours spécifier le type de fichier manuellement en utilisant un commentaire modeline en haut ou en bas de votre fichier.

Par exemple, si vous souhaitez identifier un script sans extension comme un script shell, vous pouvez ajouter ce commentaire pour le haut de votre fichier:

# vim: set filetype=sh :

ou

# vim: filetype=sh

qui dira à vim de traiter le fichier comme un script shell. (Vous pouvez mettre d'autres choses dans la modeline, aussi. Dans vim type :help modeline pour plus d'informations.)

26
répondu bryant 2012-11-20 14:04:33

Vim peut également détecter les types de fichiers en inspectant leur contenu( comme par exemple si la première ligne contient un bash shebang), voici une citation de filetype.txt fichier d'aide:

si votre type de fichier ne peut être détecté qu'en examinant le contenu du fichier

créez votre répertoire utilisateur runtime. Vous utilisez normalement le premier élément de la 'runtimepath'. Exemple pour Unix:

:!mkdir ~/.vim

créer un fichier de script vim pour ce faire. Exemple:

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

voir $VIMRUNTIME/scripts.vim pour plus d'exemples. Écrivez ce fichier comme "scripts.vim" dans votre répertoire d'exécution. Pour exemple, pour Unix:

:w ~/.vim/scripts.vim

la détection va fonctionner tout de suite, pas besoin de redémarrer Vim.

vos scripts.vim est chargé avant les vérifications par défaut pour les types de fichiers, qui signifie que vos règles remplacent les règles par défaut dans $ Vimruntime / scripts.vim.

13
répondu Matteo Riva 2010-04-05 08:02:22

en fait la mise en évidence de la syntaxe est une caractéristique de vim pas vi. Essayez d'utiliser la commande vim, puis faites

:syntax on .

13
répondu Gaurav Khare 2017-01-03 08:06:43

je suis venu à cette réponse en cherchant spécifiquement comment mettre en évidence la syntaxe bash , pas l'interpréteur de commandes POSIX. Il suffit de faire set ft=sh (ou l'équivalent) pour que le fichier soit surligné pour L'interpréteur de commandes POSIX, ce qui laisse beaucoup de syntaxe valide dans bash surligné en rouge. Pour obtenir bash surlignage:

" 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

notez que si votre ft est déjà sh , vous avez toujours besoin de la commande set ; sinon, le let ne prend pas effet immédiatement.

vous pouvez en faire une valeur par défaut globale en faisant la variable global, i.e., let g:is_bash = 1 .

:help ft-sh-syntax est la page de manuel que j'ai dû trouver; elle explique cela, et comment déclencher la mise en évidence d'autres saveurs de shell.

10
répondu Thanatos 2017-03-01 22:29:49

vim peut détecter par le commentaire haut

essayez cette ligne en haut du fichier

#!/bin/sh
5
répondu Arun Karikalan 2015-06-03 14:56:51

une fois que vous ajoutez le shebang en haut du fichier, enregistrez-le et rechargez-le (par exemple :w|e ) et la coloration syntaxique peut faire effet.

Voir aussi syntaxe Vim incohérente mettant en évidence les fichiers bash , la réponse acceptée peut aussi aider.

1
répondu dash-tom-bang 2015-05-15 22:12:32

vim reconnaît déjà de nombreux types de fichiers par défaut. La plupart d'entre eux travaillent par extension de fichier, mais dans un cas comme celui-ci, vim analysera également le contenu du fichier pour deviner le type correct.

vim définit le type de fichier pour des noms de fichiers spécifiques comme .bashrc , .tcshrc , etc. automatiquement. Mais un fichier avec une extension .sh sera reconnu comme script csh, ksh ou bash. Pour déterminer quel type de script c'est exactement, vim lit la première ligne du fichier de regarder le #! ligne.

Si la première ligne contient le mot bash , le fichier est identifié comme un script bash. Habituellement vous voyez #!/bin/bash si le script est destiné à être exécuté directement, mais pour un fichier de configuration shell utilisant un simple # bash fonctionnerait aussi bien.

si vous voulez regarder les détails, Ceci est implémenté dans $VIMRUNTIME/filetype.vim .

0
répondu raimue 2011-09-16 23:36:45

Probablement la meilleure façon d'obtenir la coloration syntaxique sur un nouveau fichier, est de simplement recharger après l'écriture de la ligne shebang. Un simple :w :e écrira le fichier, le rechargera et interprétera la ligne shebang que vous venez d'écrire pour vous fournir la mise en évidence syntaxique appropriée.

0
répondu cmaster 2014-01-24 10:32:22

si vous connaissez déjà le type de fichier avant d'ouvrir le script ou si vous créez un nouveau script sans une extension qui est commune, vous pouvez le passer à vim sur la ligne de commande comme suit:

vim -c 'setfiletype sh' path/to/script
vim -c 'setfiletype python' path/to/script
0
répondu Edge-Case 2017-08-20 18:40:37

lorsque vous créez un nouveau fichier, seule la détection du nom du fichier entre en jeu; la détection du contenu ( #!/bin/bash ) ne s'applique pas si vous le saisissez après avoir créé un nouveau tampon.

la chose sensée est de simplement faire :set ft=bash la première fois, et le suivant fois que vous l'éditez, le #!/bin/bash définira le bon type de fichier automatiquement.

-1
répondu hobbs 2012-08-31 23:00:26