Как выделить скрипты Bash в Vim?
Мой редактор Vim автоматически выделяет PHP-файлы (vim file.php
), HTML-файлы (vim file.html
) и так далее.
vim file
и внутри него пишу сценарий Bash, он не выделяет его.
Как я могу сказать Vim, чтобы он выделил его как сценарий Bash?
Я начинаю печатать #!/bin/bash
в верхней части файла, но это не дает ему работать.
11 ответов:
Правильно ли вы даете скрипту оболочки расширение
.sh
? Автоматический выбор синтаксиса Vim почти полностью основан на определении имени файла (расширения). Если файл не имеет набора синтаксиса (или является неправильным синтаксисом), Vim не будет автоматически меняться на правильный синтаксис только потому, что вы начали вводить сценарий на заданном языке.В качестве временного решения Команда
:set syn=sh
включит подсветку синтаксиса shell-script.
Ответы до сих пор верны, что вы можете использовать расширение (например,
.sh
) или строку shebang (например,#!/bin/bash
) для идентификации типа файла. Если у вас нет одного из них, вы все равно можете указать тип файла вручную, используя комментарий modeline в верхней или нижней части файла.Например, если вы хотите идентифицировать скрипт без расширения как скрипт оболочки, вы можете добавить этот комментарий в начало файла:
# vim: set filetype=sh :
Или
# vim: filetype=sh
Что скажет ВИМ лечить файл в виде скрипта оболочки. (Вы можете установить и другие вещи в модельном ряду. В vim введите
:help modeline
для получения дополнительной информации.)
Vim также может определять типы файлов, проверяя их содержимое (например, если первая строка содержит bash shebang), вот цитата из файла справки
filetype.txt
:Если ваш тип файла может быть обнаружен только путем проверки содержимого файла
Создайте каталог среды выполнения пользователя. Обычно вы используете первый пункт опции '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
, вам все еще нужна командаset
; в противном случаеlet
не вступает в силу немедленно.Вы можете сделать это глобальным по умолчанию, сделав переменную глобальной, т. е.
let g:is_bash = 1
.
:help ft-sh-syntax
это страница руководства, которую я должен был найти; она объясняет это, и как вызвать выделение других ароматов оболочки.
Как только вы добавите shebang в верхней части файла, сохраните его и перезагрузите (например,
:w|e
), и синтаксическая раскраска может сработать.Смотрите также Vim непоследовательно синтаксис подсветки bash файлов, принятый ответ также может помочь.
Vim уже распознает многие типы файлов по умолчанию. Большинство из них работает с расширениями файлов, но в таком случае vim также анализирует содержимое файла, чтобы угадать правильный тип.
ВИМ наборы файлов для конкретных именах файлов, как
.bashrc
,.tcshrc
, и т. д. автоматически. Но файл с расширением.sh
будет распознан как csh, ksh или bash script. Чтобы определить, что это за скрипт, 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
автоматически установит правильный тип файла.