3

Как я могу указать вариант оболочки для файла в локальных переменных Emacs этого файла, если файл не является отдельной программой?

Emacs позволяет мне указать, что включаемый файл оболочки следует открывать в режиме sh , установив локальную переменную в подсказках редактора:

# Local variables:
# coding: utf-8
# mode: sh
# End:
# vim: fileencoding=utf-8 filetype=bash :

Я могу указать Vim, что в качестве варианта оболочки файла используется Bash, и он подчиняется подсказке редактора для представления особой подсветки синтаксиса Bash. Но в Emacs есть режим sh который охватывает все варианты оболочки.

Emacs правильно интерпретирует такой файл, если у него есть строка shebang (например, #! /bin/bash). Но некоторые файлы не являются автономными программами, поэтому я не хочу, чтобы у них была строка Шебанга.

В режиме Emacs sh эти файлы рассматриваются как синтаксис оболочки Posix, а это не так. режим sh имеет понятие «вариант» синтаксиса оболочки; но я не могу узнать, как указать в подсказках редактора файла, какой вариант использовать для файла.

Как я могу установить подсказки редактора в файле, чтобы сообщить Emacs, что его синтаксис - Bash?

Обновление 2014-04-24: я сообщил об ошибке Emacs # 17333 из- за этого недостающего поведения.

1 ответ1

2

Глядя на код sh-mode , кажется, что кто-то, возможно, намеревался разрешить это, установив sh-shell или, возможно, sh-shell-file как локальную переменную file. Хотя на самом деле ничего не работает. Пожалуйста, рассмотрите возможность отправки отчета об ошибке сопровождающему sh-mode . Похоже, что это должно быть так же просто, как добавить sh-shell: bash к вашему блоку локальных переменных файла, и это, возможно, даже было первоначальным намерением, но это просто не работает.

То, что работает, является одним из следующих:

  1. Назовите ваш файл как-нибудь, оканчивающийся на .bash .

  2. Добавьте eval: (sh-set-shell "bash") в свой блок локальных переменных файла. По умолчанию Emacs будет показывать предупреждение о том, что это может быть небезопасный код, хотя его можно отключить.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .