回答:
実際には、トムのカスタム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
うまくいきました。
bashモードでバインド<
するself-insert-command
と、文字のみが挿入されます。
デフォルトでは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))
<
バインドさself-insert-command
れているため、もう機能しません(emacs 24.3でテスト済み)。
ヒアドキュメントの動作を無効にする唯一の理由がヒア文字列 <<<を挿入できないことである場合、C-<
を含む関数へのバインドは機能し(insert "<<<")
、自動ヒアドキュメントテンプレート を引き続き許可します
(defun my-here-string()
"Insert <<< (eg. for a bash here-string)"
(interactive)
(insert "<<<"))
(global-set-key (kbd "C-<") 'my-here-string)
見てみた後: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.")