Укажите вариант оболочки в локальных переменных Emacs для файла

866
bignose

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

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

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

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

3
[отчет об ошибке] в bignose (http://debbugs.gnu.org/cgi/bugreport.cgi?bug=17333) был исправлен. Таким образом, в следующем выпуске Emacs (предположительно, 24.5) это действительно будет так же просто, как установка `sh-shell` как локальная переменная файла. Ура! До тех пор, [мой ответ ниже] (http://superuser.com/a/743456/66748) действительно работает без добавления явной линии Шебанга (несмотря на первоначальное впечатление Бигноузы об обратном). Ben Liblit 10 лет назад 0
Исправление в сообщении об ошибке Bugnose появляется в Emacs 25.1. Файл `NEWS` гласит:« В sh-режиме вы теперь можете использовать `sh-shell` как локальную переменную файла, чтобы указать тип используемой оболочки (` bash`, `csh` и т. Д.)». Ben Liblit 8 лет назад 0

1 ответ на вопрос

2
Ben Liblit

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

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

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

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

Я отправил сообщение об ошибке, спасибо. bignose 10 лет назад 1
Команда `sh-set-shell` делает не то, что нужно: она * добавляет * строку shebang к файлу, который не должен иметь такой строки. bignose 10 лет назад 0
`sh-set-shell` добавляет строку shebang только при интерактивном вызове или с третьим аргументом, отличным от` nil '. При вызове, как я предлагаю выше, он не добавляет строку shebang. Попробуйте и убедитесь сами. Ben Liblit 10 лет назад 0

Похожие вопросы