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.