Làm thế nào để vô hiệu hóa emacs ở đây hoàn thành tài liệu


11

Khi chỉnh sửa tệp bash script bằng emacs và cố gắng nhập <<<, tại các <emacs thứ hai chèn một mẫu cho một tài liệu ở đây, như trong ví dụ sau:

<<EOF

EOF

Đây không phải là đầu ra mong muốn, bởi vì tôi sẽ nhập một chữ <<<.

Hiện tại tôi dùng đến việc nhập < < <, và sau đó xóa khoảng trắng, nhưng tôi thích được phép nhập trực tiếp hơn.


2
Không phải là tôi quan tâm quá nhiều, nhưng sẽ rất tốt nếu để lại một bình luận cho một downvote.
enzotib

Câu trả lời:


12

Thực sự không cần my-disable-here-documentchức năng tùy chỉnh của Tom khi đảo ngược các phím. Tính năng này có thể được bật và tắt với sh-electric-here-document-mode:

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

(Nó cũng có thể được bật cho bộ đệm hoạt động thông qua M-x sh-electric-here-document-mode.)


Ngoài ra: sh-mode-hookkhông làm việc cho tôi, nhưng sh-set-shell-hookđã làm.
Felipe Lema

6

Ràng buộc <để self-insert-commandtrong chế độ bash và sau đó nó sẽ chèn chỉ nhân vật.

Theo mặc định, nó bị ràng buộc sh-maybe-here-documentkhi ở chế độ bash và chức năng đó tự động chèn.

Đây là một cách để phục hồi chìa khóa:

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

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

Bạn có thể vui lòng cung cấp thêm một số thông tin về những gì cần chèn chính xác trong tệp init không? Xin lỗi, nhưng tôi là người dùng mới bắt đầu.
enzotib

Tôi đã thêm một ví dụ đơn giản vào câu trả lời của tôi. Nó vô hiệu hóa tính năng chèn tự động trong mọi loại vỏ, không chỉ bash, mà còn là điều bạn muốn.
Tom

Giải pháp này không hoạt động nữa (được thử nghiệm trên emacs 24.3), vì <bị ràng buộc self-insert-commandtheo mặc định.
T. Verron 20/2/2015

2

Nếu lý do duy nhất bạn muốn vô hiệu hóa ở đây-doc hành vi là nó ngăn không cho bạn chèn một ở đây dây <<<, sau đó liên kết C-<đến một chức năng, trong đó có (insert "<<<")ý chí làm việc, và vẫn cho phép tự động ở đây-doc mẫu

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

1
Cảm ơn bạn, giải pháp thú vị, nhưng tôi vẫn thích câu trả lời của @ Tom, vì tôi cho rằng việc hoàn thành sai đối với tệp bash script.
enzotib


1

Kiểu < C-q < <


Nó ngắn hơn cách giải quyết của tôi và có lẽ cũng hữu ích cho các tình huống khác, nhưng không chính xác những gì tôi đang tìm kiếm. Dù sao cũng cảm ơn bạn.
enzotib

1

Sau khi xem tại: http://web.mit.edu/dosathena/sandbox/emacs-19.28/lisp/sh-script.el Tôi đã đưa ra giải pháp này:

;; 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.")
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.