如何在这里禁用emacs文件补全


11

当使用emacs编辑bash脚本文件并尝试输入时<<<,在第二个<emacs处插入一个here文档模板,如以下示例所示:

<<EOF

EOF

这不是所需的输出,因为我将输入一个literal <<<

目前< < <,我倾向于输入,然后删除空格,但我更喜欢被允许直接输入。


2
并不是我太在乎,但是留下您的反对意见会很高兴。
enzotib 2011年

Answers:


12

实际上,不需要Tom的自定义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-commandbash模式,然后将仅插入字符。

默认情况下,绑定到sh-maybe-here-documentbash模式时,该函数会自动插入。

这是反弹钥匙的一种方法:

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

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

您能否提供一些有关在init文件中准确插入内容的更多信息?抱歉,但是我是emacs的初学者。
enzotib 2011年

我在回答中添加了一个简单的示例。它禁用了自动插入各种shell的功能,不仅是bash,而且很可能正是您想要的。
汤姆(Tom)

该解决方案不再起作用(已在emacs 24.3上测试),因为默认情况下<已绑定self-insert-command
T. Verron

2

如果要禁用here-doc行为的唯一原因是它阻止您插入here-string <<<,则绑定C-<到包含的函数(insert "<<<")将起作用,并且仍然允许自动here-doc模板

(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 2011年


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.")
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.