abbrev – ¿Mezclar expansiones automáticas de abreviaturas con expansiones solo explícitas?

Pregunta:

P: ¿Puedo mezclar expansiones de abreviaturas de manera que algunas se expandan automáticamente y otras solo con una llamada explícita?

Cuando abbrev-mode está habilitado, una abreviatura se expande cada vez que se escribe un espacio en blanco o un carácter de puntuación que se inserta automáticamente. Sin embargo, expand-abbrev expandirá la abreviatura en el punto incluso cuando abbrev-mode esté deshabilitado .

¿Es posible habilitar abbrev-mode y hacer que algunas expansiones sucedan automáticamente (es decir, después de los espacios en blanco y la puntuación), pero otras solo se expanden cuando llamo explícitamente expand-abbrev ?

Razón fundamental:

  • Me gustaría usar abreviaturas automáticamente para corregir palabras comunes mal escritas (por ejemplo, teh => the ) …
  • … pero me gustaría tener un control explícito de otros que uso como abreviatura (por ejemplo, a veces quiero dejar dem como dem , y otras veces me gustaría expandirlo a la democracy ).
    • (Sé que podría escribir dem Cq <space> , pero es incómodo hacerlo y generalmente quiero usar la abreviatura en lugar de la expansión).

Para evitar el bienintencionado "¿por qué no usar yasnippet ?" consultas:

  • Estoy experimentando con una combinación de abbrev-mode y yasnippet , y preferiría usar el último para expansiones complicadas y el primero para expansiones simples.

Respuesta:

define-abbrev acepta un predicado, solo utilícelo para especificar que la abreviatura solo debe expandirse cuando se solicite explícitamente.

(define-abbrev text-mode-abbrev-table "dem" "democracy" nil
  :enable-function (lambda () (eq this-command 'expand-abbrev)))

La abreviatura anterior no se expandirá cuando presione SPC (o cualquier otro carácter autoinsertable), pero se expandirá cuando invoque expand-abbrev directamente.

Probablemente querrá vincularlo a una clave entonces:

(global-set-key (kbd "C-M-i") #'expand-abbrev)

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım