web-dev-qa-db-fra.com

Comment mettre en évidence les scripts Bash dans Vim?

Mon éditeur Vim met automatiquement en surbrillance les fichiers PHP (vim file.php), les fichiers HTML (vim file.html), etc.

Mais lorsque je tape: vim file et que j'écris un script Bash à l'intérieur, il ne le met pas en évidence.

Comment puis-je dire à Vim de le surligner en tant que script Bash?

Je commence à taper #!/bin/bash en haut du fichier, mais cela ne le fait pas fonctionner.

61
never_had_a_name

Attribuez-vous correctement une extension .sh au script shell? La sélection automatique de la syntaxe 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 a une syntaxe incorrecte), Vim ne changera pas automatiquement à la syntaxe correcte simplement parce que vous avez commencé à taper un script dans une langue donnée.

En guise de solution temporaire, la commande :set syn=sh activera la coloration syntaxique du script Shell.

74
Mark Rushakoff

Jusqu'à présent, les réponses sont correctes. Vous pouvez utiliser l'extension (telle que .sh) ou une ligne Shebang (telle que #!/bin/bash) pour identifier le type de fichier. Si vous n'en avez pas, vous pouvez toujours spécifier le type de fichier manuellement à l'aide d'un commentaire modeline situé en haut ou en bas de votre fichier.

Par exemple, si vous souhaitez identifier un script sans extension en tant que script Shell, vous pouvez ajouter ce commentaire en haut de votre fichier:

# vim: set filetype=sh :

ou

# vim: filetype=sh

Cela indiquera à vim de traiter le fichier comme un script Shell. (Vous pouvez également définir d'autres paramètres dans le modèle. Dans vim, saisissez :help modeline pour plus d'informations.)

27
bryant

En fait, la coloration syntaxique est une fonctionnalité de vim pas vi . Essayez d’utiliser la commande vim puis faites

:syntax on.

17
Gaurav Khare

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 du fichier d'aide filetype.txt:

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

Créez votre répertoire d'exécution utilisateur. Vous utiliserez normalement le premier élément de l'option 'runtimepath'. Exemple pour Unix:

:!mkdir ~/.vim

Créez un fichier de script vim pour cela. 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 sous le nom "scripts.vim" dans votre répertoire d'exécution utilisateur. Pour Exemple, pour Unix:

:w ~/.vim/scripts.vim

La détection fonctionnera immédiatement, pas besoin de redémarrer Vim.

Votre script.vim est chargé avant les vérifications par défaut des types de fichiers, ce qui signifie que vos règles remplacent les règles par défaut de $ VIMRUNTIME/scripts.vim.

13
Matteo Riva

Je suis venu à cette réponse en cherchant spécifiquement comment mettre en évidencebashsyntaxe, pas POSIX Shell. Si vous faites simplement un set ft=sh (ou l’équivalent), le fichier sera mis en surbrillance pour POSIX Shell, ce qui laisse beaucoup de syntaxe valide dans bash surlignée en rouge. Pour obtenir bash soulignant:

" 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 la let ne prend pas effet immédiatement. 

Vous pouvez en faire une valeur globale par défaut en définissant la variable globale, c'est-à-dire let g:is_bash = 1.

:help ft-sh-syntax est la page de manuel que je devais trouver; cela explique cela, et comment déclencher la mise en évidence d'autres saveurs de Shell.

11
Thanatos

vim peut détecter par le commentaire en haut 

essayez cette ligne en haut du fichier

#!/bin/sh
6
Arun Karikalan

Une fois que vous avez ajouté le Shebang en haut du fichier, enregistrez-le et rechargez-le (par exemple, :w|e). La coloration de la syntaxe peut commencer.

Voir aussi Vim met en évidence de manière incohérente la syntaxe des fichiers bash , la réponse acceptée peut également aider.

1
dash-tom-bang

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

vim -c 'setfiletype sh' path/to/script
vim -c 'setfiletype python' path/to/script
0
Edge-Case

Le moyen le plus simple d’obtenir la coloration syntaxique sur un nouveau fichier est simplement de le recharger après avoir écrit la ligne Shebang. Un simple :w:e écrit le fichier, le recharge et interprète la ligne Shebang que vous venez d'écrire pour vous fournir la coloration syntaxique appropriée.

0
cmaster

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

vim définit automatiquement le type de fichier pour des noms de fichiers spécifiques tels que .bashrc, .tcshrc, etc. Mais un fichier avec une extension .sh sera reconnu comme étant un script csh, ksh ou bash. Pour déterminer le type de script exact, vim lit la première ligne du fichier et examine le #! ligne.

Si la première ligne contient Word bash, le fichier est identifié en tant que script bash. Généralement, vous voyez #!/bin/bash si le script doit être exécuté directement, mais un fichier de configuration Shell utilisant un simple # bash fonctionnerait également.

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

0
raimue