Cara menonaktifkan emacs di sini penyelesaian dokumen


11

Saat mengedit file skrip bash dengan emacs, dan mencoba masuk <<<, pada <emacs kedua masukkan templat untuk dokumen di sini, seperti dalam contoh berikut:

<<EOF

EOF

Ini bukan output yang diinginkan, karena saya akan memasukkan literal <<<.

Untuk saat ini saya memilih untuk masuk < < <, dan kemudian menghapus spasi, tetapi saya lebih suka diizinkan untuk masuk secara langsung.


2
Bukannya aku terlalu peduli, tapi alangkah baiknya meninggalkan komentar untuk downvote.
enzotib

Jawaban:


12

Sebenarnya tidak perlu untuk my-disable-here-documentfungsi kustom Tom rebinding tombol. Fitur ini dapat diaktifkan dan dinonaktifkan dengan sh-electric-here-document-mode:

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

(Ini juga dapat diaktifkan untuk buffer aktif via M-x sh-electric-here-document-mode.)


Juga: sh-mode-hooktidak bekerja untuk saya, tetapi sh-set-shell-hookberhasil.
Felipe Lema

6

Bind <ke self-insert-commanddalam mode bash dan kemudian hanya akan memasukkan karakter.

Secara default itu terikat sh-maybe-here-documentketika dalam mode bash dan fungsi itu melakukan penyisipan otomatis.

Ini cara untuk mengembalikan kunci:

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

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

Bisakah Anda memberikan beberapa informasi lebih lanjut tentang apa yang harus dimasukkan secara tepat ke file init? Maaf, tapi saya pengguna pemula emacs.
enzotib

Saya menambahkan contoh sederhana untuk jawaban saya. Ini menonaktifkan penyisipan otomatis dalam setiap jenis shell, bukan hanya bash, tetapi mungkin itulah yang Anda inginkan.
Tom

Solusi ini tidak berfungsi lagi (diuji pada emacs 24.3), karena <terikat self-insert-commandsecara default.
T. Verron

2

Jika satu-satunya alasan Anda ingin menonaktifkan perilaku di sini-doc adalah bahwa hal itu mencegah Anda memasukkan string di sini- <<<, kemudian mengikat C-<ke fungsi yang berisi (insert "<<<")akan berfungsi, dan masih memungkinkan templat otomatis di sini-doc

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

1
Terima kasih, solusi yang menarik, tetapi saya masih lebih suka jawaban @ Tom, karena saya menganggap bahwa penyelesaian salah untuk file skrip bash.
enzotib


1

Tipe < C-q < <


Ini lebih pendek daripada solusi saya, dan mungkin berguna untuk situasi lain juga, tetapi tidak persis apa yang saya cari. Terima kasih.
enzotib

1

Setelah melihat: http://web.mit.edu/dosathena/sandbox/emacs-19.28/lisp/sh-script.el Saya menemukan solusi ini:

;; 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.")
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.