Jak wyłączyć tutaj uzupełnianie dokumentów emacs


11

Podczas edycji pliku skryptu bash za pomocą emacsa i próby wprowadzenia <<<, przy drugim <emacsie wstaw szablon dla dokumentu tutaj, jak w poniższym przykładzie:

<<EOF

EOF

To nie jest pożądany wynik, ponieważ wprowadziłbym literał <<<.

W tej chwili uciekam się do wchodzenia < < <, a następnie do usuwania spacji, ale wolę, aby móc bezpośrednio do nich wchodzić.


2
Nie to, że zbytnio mnie to obchodzi, ale miło byłoby zostawić komentarz do recenzji.
— enzotib

Odpowiedzi:


12

W rzeczywistości nie ma potrzeby niestandardowej my-disable-here-documentfunkcji Toma ponownego przypisywania klawiszy. Tę funkcję można włączyć i wyłączyć za pomocą sh-electric-here-document-mode:

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

(Można go również przełączyć na aktywny bufor za pomocą M-x sh-electric-here-document-mode.)


Ponadto: sh-mode-hooknie działało dla mnie, ale działało sh-set-shell-hook.
— Felipe Lema,

6

Powiązanie <do self-insert-commandw trybie bash, a następnie wstawi tylko znak.

Domyślnie jest to związane z sh-maybe-here-documenttrybem bash i ta funkcja wykonuje automatyczne wstawianie.

Oto sposób na odzyskanie klucza:

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

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

Czy możesz podać więcej informacji na temat tego, co dokładnie wstawić do pliku init? Przykro mi, ale jestem użytkownikiem emacsa dla początkujących.
— enzotib,

Do mojej odpowiedzi dodałem prosty przykład. Wyłącza automatyczne wstawianie do każdego rodzaju powłoki, nie tylko bash, ale prawdopodobnie tego właśnie chcesz.
— Tom

To rozwiązanie już nie działa (testowane na emacs 24.3), ponieważ <jest self-insert-commanddomyślnie powiązane .
— T. Verron

2

Jeśli jedynym powodem, dla którego chcesz wyłączyć zachowanie tutaj-dokumentu, jest to, że uniemożliwia on wstawienie tutaj-ciągu <<<, to powiązanie C-<z funkcją, która zawiera (insert "<<<"), zadziała i nadal zezwala na automatyczny szablon tutaj-dokumentu

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

1
Dziękuję, ciekawe rozwiązanie, ale nadal wolę odpowiedź @ Toma, ponieważ uważam, że to uzupełnienie jest złe dla pliku skryptu bash.
— enzotib


1

Rodzaj < C-q < <


Jest krótszy niż moje obejście i być może przydaje się również w innych sytuacjach, ale nie do końca to, czego szukałem. Mimo wszystko dziekuję.
— enzotib

1

Po obejrzeniu: http://web.mit.edu/dosathena/sandbox/emacs-19.28/lisp/sh-script.el wpadłem na to rozwiązanie:

;; 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.")
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.