Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

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

Как временное обходное решение, команда :set syn=sh включит подсветку синтаксиса оболочки script.

Ответ 2

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

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

# vim: set filetype=sh :

или

# vim: filetype=sh

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

Ответ 3

Vim также может определять типы файлов, проверяя их содержимое (например, если первая строка содержит shebang), вот цитата из файла справки filetype.txt:

Если ваш тип файла может быть обнаружен только путем проверки содержимого файла

Создайте свою рабочую папку пользователя. Обычно вы используете первый элемент опции "runtimepath". Пример для Unix:

:!mkdir ~/.vim

Создайте файл vim script для этого. Пример:

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.

Ответ 4

Фактически подсветка синтаксиса является особенностью vim not vi. Попробуйте использовать команду vim, а затем выполните

:syntax on.

Ответ 5

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

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

#!/bin/sh

Ответ 7

Я пришел к этому ответу, ища конкретно, как выделить синтаксис 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 не вступает в силу немедленно.

Вы можете сделать это глобальным по умолчанию, сделав переменную global, т.е. let g:is_bash = 1.

:help ft-sh-syntax - это страница руководства, которую я должен был найти; он объясняет это и как инициировать выделение других ароматов оболочки.

Ответ 8

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

vim устанавливает тип файла для определенных имен файлов, таких как .bashrc, .tcshrc и т.д. автоматически. Но файл с расширением .sh будет распознаваться как csh, ksh или bash script. Чтобы определить, какой тип script это именно так, vim читает первую строку файла, чтобы посмотреть на #! линия.

Если первая строка содержит слово bash, файл идентифицируется как bash script. Обычно вы видите #!/bin/bash, если предполагается, что script будет выполняться напрямую, но для файла конфигурации оболочки с помощью простого # bash будет работать.

Если вы хотите посмотреть подробности, это реализовано в $VIMRUNTIME/filetype.vim.

Ответ 9

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

Ответ 10

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

vim -c 'setfiletype sh' path/to/script
vim -c 'setfiletype python' path/to/script

Ответ 11

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

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