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


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

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

#!/bin/sh

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