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.


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.)


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))

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)

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


1

Tipo < C-q < <


É 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.")
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.