Как выделить скрипты Bash в Vim? - PullRequest
66 голосов
/ 05 апреля 2010

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

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

Как я могу сказать Vim выделить его как скрипт Bash?

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

Ответы [ 11 ]

76 голосов
/ 05 апреля 2010

Правильно ли вы даете сценарию оболочки расширение .sh? Автоматический выбор синтаксиса Vim почти полностью основан на обнаружении имени (расширения) файла. Если файл не имеет установленного синтаксиса (или имеет неправильный синтаксис), Vim не будет автоматически переходить на правильный синтаксис только потому, что вы начали вводить скрипт на заданном языке.

В качестве временного решения, команда :set syn=sh включит подсветку синтаксиса сценария оболочки.

30 голосов
/ 01 сентября 2012

Ответы пока верны, что вы можете использовать расширение (например, .sh) или строку shebang (например, #!/bin/bash) для определения типа файла. Если у вас нет одного из них, вы все равно можете указать тип файла вручную, используя комментарий моделин вверху или внизу вашего файла.

Например, если вы хотите идентифицировать скрипт без расширения как скрипт оболочки, вы можете добавить этот комментарий в начало вашего файла:

# vim: set filetype=sh :

или

# vim: filetype=sh

Это скажет vim обрабатывать файл как скрипт оболочки. (Вы также можете установить другие параметры в моделине. Для получения дополнительной информации в vim введите :help modeline.)

17 голосов
/ 10 февраля 2015

На самом деле подсветка синтаксиса - это особенность vim, а не vi. Попробуйте использовать команду vim, а затем выполните

:syntax on.

14 голосов
/ 05 апреля 2010

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 / scripts.vim для дополнительных примеров. Запишите этот файл как «scripts.vim» в пользовательский каталог времени выполнения. За пример для Unix:

:w ~/.vim/scripts.vim

Обнаружение будет работать сразу, нет необходимости перезапускать Vim.

Ваш scripts.vim загружается перед проверками по умолчанию для типов файлов, которые означает, что ваши правила переопределяют правила по умолчанию в $ VIMRUNTIME / scripts.vim.

11 голосов
/ 02 марта 2017

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

7 голосов
/ 05 декабря 2014

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

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

#!/bin/sh
2 голосов
/ 16 мая 2015

Как только вы добавите shebang вверху файла, сохраните его и перезагрузите (например, :w|e), и раскраска синтаксиса может включиться.

См. Также Vim с непоследовательной синтаксической подсветкой файлов bash , также может помочь принятый ответ.

0 голосов
/ 20 августа 2017

Если вы уже знаете тип файла перед открытием скрипта или если вы создаете новый скрипт без распространенного расширения, вы можете передать его в vim в командной строке следующим образом:

vim -c 'setfiletype sh' path/to/script
vim -c 'setfiletype python' path/to/script
0 голосов
/ 24 января 2014

Вероятно, самый простой способ получить подсветку синтаксиса для нового файла, это просто перезагрузить его после написания строки shebang. Простой :w :e запишет файл, перезагрузит его и интерпретирует строку shebang, которую вы только что написали, чтобы предоставить вам соответствующую подсветку синтаксиса.

0 голосов
/ 01 сентября 2012

Когда вы создаете новый файл, в игру вступает только обнаружение имени файла; обнаружение содержимого (#!/bin/bash) не применяется, если вы набираете его после создания нового буфера.

Разумно просто сделать :set ft=bash в первый раз, и следующий при редактировании #!/bin/bash автоматически установит правильный тип файла.

...