Як відключити emacs тут, завершення документа


11

Під час редагування файлу скриптів bash за допомогою emacs та спроби введення <<<, у другий <emacs вставляйте шаблон документа тут, як у наступному прикладі:

<<EOF

EOF

Це не бажаний вихід, тому що я б ввів буквальний <<<.

На даний момент я вдаюсь до входу < < <, а потім до видалення пробілів, але мені більше дозволено вводити його безпосередньо.


2
Не те, щоб я занадто сильно піклувався, але було б непогано залишити коментар для голосування.
enzotib

Відповіді:


12

Насправді немає необхідності в спеціальній my-disable-here-documentфункції Тома, відновлюючи клавіші. Цю функцію можна ввімкнути та вимкнути за допомогою sh-electric-here-document-mode:

(add-hook 'sh-mode-hook
          (lambda ()
            (sh-electric-here-document-mode -1)))

(Його також можна змінити для активного буфера через M-x sh-electric-here-document-mode.)


Також: sh-mode-hookне працював для мене, але sh-set-shell-hookробив.
Феліпе Лема

6

Прив'яжіть <до self-insert-commandрежиму bash, і тоді він вставить лише символ.

За замовчуванням він прив'язується до того, sh-maybe-here-documentколи знаходиться в режимі bash, і ця функція виконує автоматичне вставлення.

Ось спосіб відновити ключ:

(add-hook 'sh-set-shell-hook 'my-disable-here-document)

(defun my-disable-here-document ()
  (local-set-key "<" 'self-insert-command))

Чи можете ви надати трохи більше інформації про те, що саме потрібно вставити у файл init? Вибачте, але я початківець користувач emacs.
enzotib

Я додав простий приклад до своєї відповіді. Це вимикає автоматичну вставку в будь-який тип оболонки, не просто баш, але і probaly - це те, що ви хочете в будь-якому випадку.
Том

Це рішення більше не працює (тестується на emacs 24.3), тому що <воно self-insert-commandза замовчуванням пов'язане.
Т. Веррон

2

Якщо єдиною причиною ви хочете відключити поведінку тут-doc, є те, що вона заважає вам вставляти рядок <<<, тоді прив'язка C-<до функції, яка містить, (insert "<<<")буде працювати, і досі дозволяти автоматичний шаблон тут-doc

(defun my-here-string() 
  "Insert <<< (eg. for a bash here-string)" 
  (interactive)
  (insert "<<<"))
(global-set-key (kbd  "C-<") 'my-here-string)

1
Дякую, цікаве рішення, але я все ж віддаю перевагу відповідь @ Тома, тому що я вважаю, що завершення невірно для файлу скриптів bash.
enzotib


1

Тип < C-q < <


Він коротший, ніж мій спосіб вирішення, і, можливо, корисний і для інших ситуацій, але не саме те, що я шукав. В будь-якому випадку, дякую Вам.
enzotib

1

Переглянувши: http://web.mit.edu/dosathena/sandbox/emacs-19.28/lisp/sh-script.el, я придумав таке рішення:

;; disable the automatic EOF generation in Shell Mode
(defvar sh-use-prefix nil
  "If non-nil when loading, `$' and `<' will be  C-c $  and  C-c < .")
(defvar sh-mode-map
  (let ((map (make-sparse-keymap)))
    (define-key map (if sh-use-prefix "\C-c<" "<")
      (local-set-key "<" 'self-insert-command))
   map)
  "Keymap used in Shell-Script mode.")
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.