Como desativar o emacs aqui

11

Ao editar um arquivo de script bash com o emacs e tentar entrar <<<, no segundo <emacs insira um modelo para um documento aqui, como no exemplo a seguir:

<<EOF

EOF

Esta não é a saída desejada, porque eu digitaria um literal <<<.

No momento, eu recorro a entrar < < <e excluir espaços, mas prefiro poder entrar diretamente.

enzotib
fonte
2
Não que eu me importe muito, mas seria bom deixar um comentário para um voto negativo.
enzotib 5/09/11

Respostas:

12

Na verdade, não há necessidade da my-disable-here-documentfunção personalizada de Tom religar as teclas. Esse recurso pode ser ativado e desativado com sh-electric-here-document-mode:

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

(Também pode ser alternado para o buffer ativo via M-x sh-electric-here-document-mode.)

danlei
fonte
Também: sh-mode-hooknão funcionou para mim, mas sh-set-shell-hookfuncionou.
Felipe Lema 20/05
6

Bind <para self-insert-commandno modo bash e, em seguida, ele irá inserir apenas o caráter.

Por padrão, ele é vinculado ao sh-maybe-here-documentmodo bash e essa função faz a inserção automática.

Aqui está uma maneira de recuperar a chave:

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

(defun my-disable-here-document ()
  (local-set-key "<" 'self-insert-command))
Tom
fonte
Você pode fornecer mais informações sobre o que inserir exatamente no arquivo init? Desculpe, mas eu sou um usuário iniciante do emacs.
enzotib 5/09/11
Eu adicionei um exemplo simples à minha resposta. Ele desativa a inserção automática em todos os tipos de shell, não apenas no bash, mas provavelmente é o que você deseja.
Tom
Esta solução não funciona mais (testada no emacs 24.3), porque <está vinculada self-insert-commandpor padrão.
T. Verron
2

Se a única razão pela qual você deseja desativar o aqui-doc comportamento é que ele impede que você inserir uma cadeia de caracteres here <<<, então a ligação C-<para uma função que contém (insert "<<<")o trabalho vontade, e ainda permitir a auto aqui-doc modelo

(defun my-here-string() 
  "Insert <<< (eg. for a bash here-string)" 
  (interactive)
  (insert "<<<"))
(global-set-key (kbd  "C-<") 'my-here-string)
Peter.O
fonte
1
Obrigado, solução interessante, mas ainda prefiro a resposta do @ Tom, porque considero essa conclusão errada para um arquivo de script bash.
enzotib 5/09/11
2

Entro <<<como M-3<no modo shell.

choroba
fonte
1

Tipo < C-q < <

Urso de pelúcia
fonte
É mais curto que minha solução alternativa e talvez útil para outras situações também, mas não exatamente o que eu estava procurando. Obrigado mesmo assim.
enzotib 5/09/11
1

Depois de dar uma olhada em: http://web.mit.edu/dosathena/sandbox/emacs-19.28/lisp/sh-script.el, eu vim com esta solução:

;; 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.")
vee
fonte