Как выделить скрипты Bash в Vim?
мой редактор Vim автоматически выделяет файлы PHP (vim file.php
), файлы HTML (vim file.html
) и так далее.
но когда я типа: vim file
и внутри него напишите сценарий Bash,он не выделяет его.
как я могу сказать Vim, чтобы выделить его как сценарий Bash?
Я начинаю набирать текст #!/bin/bash
в верхней части файла, но это не делает его работы.
11 ответов
ответы до сих пор верны, что вы можете использовать расширение (например,.sh
) или линия shebang (например,#!/bin/bash
) для идентификации типа файла. Если у вас нет одного из них, вы все равно можете указать тип файла вручную, используя комментарий modeline в верхней или нижней части файла.
например, если вы хотите определить скрипт без расширения в качестве сценария оболочки, вы можете добавить этот комментарий в верхнюю часть файл:
# vim: set filetype=sh :
или
# vim: filetype=sh
это скажет vim рассматривать файл как сценарий оболочки. (Вы также можете установить другие вещи в modeline. В vim тип :help modeline
для получения дополнительной информации.)
Vim также может обнаруживать типы файлов, проверяя их содержимое (например, если первая строка содержит bash shebang), вот цитата из filetype.txt
Help файл:
если ваш тип файла может быть обнаружен только путем проверки содержимого файла
создайте каталог времени выполнения пользователя. Вы обычно используете первый пункт опции 'runtimepath'. Пример для Unix:
:!mkdir ~/.vim
создайте файл скрипта vim для этого. Пример:
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
см. $VIMRUNTIME / скрипты.ВИМ дополнительные примеры. Напишите этот файл как " скрипты.vim " в каталоге времени выполнения пользователя. Для например, для Unix:
:w ~/.vim/scripts.vim
обнаружение будет работать сразу, нет необходимости перезапускать Vim.
скрипты.vim загружается до проверки по умолчанию типов файлов, которые означает, что ваши правила переопределяют правила по умолчанию в $VIMRUNTIME/скрипты.напор.
на самом деле подсветка синтаксиса является особенностью vim, а не vi. Попробуйте использовать команду vim, а затем сделайте
:syntax on
.
Я пришел к этому ответу, ища конкретно, как выделить bash
синтаксис, а не оболочка POSIX. Просто делать set ft=sh
(или эквивалент) приведет к выделению файла для оболочки POSIX, что оставляет много синтаксиса, который действителен в bash
выделены красным цветом. Чтобы получить подсветку 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
обратите внимание, что если ft
уже sh
, вам все еще нужны , иначе let
не вступает в силу немедленно.
вы можете сделать это глобальным по умолчанию, сделав переменную глобальной, т. е. let g:is_bash = 1
.
:help ft-sh-syntax
это страница руководства, которую я должен был найти; это объясняет это, и как вызвать выделение других ароматов оболочки.
Как только вы добавите shebang в верхней части файла, сохраните его и перезагрузите (например,:w|e
) и синтаксическая раскраска может сработать.
см. также Vim непоследовательно подсветка синтаксиса файлов bash, принятый ответ также может помочь.
ВИМ уже распознает многие типы файлов по умолчанию. Большинство из них работают с расширениями файлов, но в таком случае vim также проанализирует содержимое файла, чтобы угадать правильный тип.
vim устанавливает тип файла для определенных имен файлов, таких как .bashrc
, .tcshrc
, etc. автоматически. Но файл с .sh
расширение будет распознано как csh, KSH или bash скрипт. Чтобы определить, что это за скрипт, vim читает первую строку файла, чтобы посмотреть на #! линия.
если первая строка содержит слово bash
, файл идентифицируется как сценарий bash. Обычно вы видите #!/bin/bash
если скрипт предназначен для непосредственного выполнения, но для файла конфигурации оболочки с помощью простого # bash
будет работать также.
если вы хотите посмотреть на детали, это реализовано в $VIMRUNTIME/filetype.vim
.
вероятно, самый простой способ получить подсветку синтаксиса в новом файле - просто перезагрузить его после написания строки shebang. Простой :w
:e
запишет файл, перезагрузит его и интерпретирует строку shebang, которую вы только что написали, чтобы предоставить вам соответствующую подсветку синтаксиса.
Если вы уже знаете тип файла перед открытием скрипта или создаете новый скрипт без общего расширения, вы можете передать его vim в командной строке следующим образом:
vim -c 'setfiletype sh' path/to/script
vim -c 'setfiletype python' path/to/script
при создании нового файла в игру вступает только обнаружение имени файла; обнаружение содержимого (#!/bin/bash
) не применяется, если ввести его после создания нового буфера.
разумно просто сделать :set ft=bash
в первый раз вокруг, и далее время редактирования,#!/bin/bash
автоматически установит правильный тип файла.