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.
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.
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.)
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.
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
.
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.
vim peut détecter par le commentaire haut
essayez cette ligne en haut du fichier
#!/bin/sh
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.
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
.
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.
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
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.