Как выделить скрипты Bash в Vim?


Мой редактор Vim автоматически выделяет PHP-файлы (vim file.php), HTML-файлы (vim file.html) и так далее.

Но когда я набираю: vim file и внутри него пишу сценарий Bash, он не выделяет его.

Как я могу сказать Vim, чтобы он выделил его как сценарий Bash?

Я начинаю печатать #!/bin/bash в верхней части файла, но это не дает ему работать.

11 56

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 это страница руководства, которую я должен был найти; она объясняет это, и как вызвать выделение других ароматов оболочки.

Vim можно обнаружить по верхнему комментарию

Попробуйте эту строку вверху файла

#!/bin/sh

Как только вы добавите 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 автоматически установит правильный тип файла.