ここでEmacsを無効にする方法


11

emacsを使用してbashスクリプトファイルを編集し、を入力しようとする<<<と、2番目の<emacsで、次の例のように、ヒアドキュメントのテンプレートを挿入します。

<<EOF

EOF

リテラルを入力するため、これは望ましい出力ではありません<<<

現時点では私が入るに頼る< < <、その後、スペースを削除するが、私はそれを直接入ることを許可されていることを好みます。


2
私はあまり気にしないというわけではありませんが、反対票にコメントを残すのはいいことです。
enzotib 2011

回答:


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うまくいきました。
フェリペレマ2016年

6

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))

initファイルに正確に何を挿入するかについて、もう少し情報を提供していただけますか?申し訳ありませんが、私はemacsの初心者です。
enzotib

簡単な例を回答に追加しました。bashだけでなく、あらゆる種類のシェルでの自動挿入を無効にしますが、とにかくそれが必要です。
トム

このソリューションはデフォルトで<バインドさself-insert-commandれているため、もう機能しません(emacs 24.3でテスト済み)。
T. Verron、2015

2

ヒアドキュメントの動作を無効にする唯一の理由がヒア文字列 <<<を挿入できないことである場合、C-<を含む関数へのバインドは機能し(insert "<<<")、自動ヒアドキュメントテンプレート を引き続き許可します

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

1
興味深い解決策に感謝しますが、@ Tomの回答を優先します。これは、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.")
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.