2011-09-25 18 views
20

hice un ctrlhb para ver todos mis fijaciones en emacs. Ahora quiero desvincular un lote de claves, simplemente porque nunca uso esas funciones de Emacs y no quiero realizarlas cuando presiono accidentalmente las teclas encuadernadas. Esto también libera muchas teclas para otras tareas (para usar con Cedet, por ejemplo). Entonces, aparte de global-unset-key, ¿hay algún método para eliminar enlaces a granel?¿Hay una forma rápida de desvincular claves en Emacs?

 
C-a  move-beginning-of-line 
C-b  backward-char 
C-c  mode-specific-command-prefix 
C-d  delete-char 
C-e  move-end-of-line 
C-f  forward-char 
C-g  keyboard-quit 
C-h  help-command 
C-k  kill-line 
C-l  recenter-top-bottom 
C-n  next-line 
C-o  open-line 
C-p  previous-line 
C-q  quoted-insert 
C-t  transpose-chars 
C-u  universal-argument 
C-v  scroll-up 
C-x  Control-X-prefix 
C-z  suspend-frame 
ESC  ESC-prefix 

Quiero eliminar la mayor parte de estos enlaces que son absolutamente inútiles para mí.

+0

Si desea utilizar las combinaciones de teclas "estándar" de 'Cv' para' yank', 'Cx' para' kill-region' y así sucesivamente, revise 'cua-mode', que logra esto mientras preserva la funcionalidad de Emacs . – haxney

+2

Tenga en cuenta que estos son realmente un ** lote ** de enlaces, especialmente con emacs [Named-ASCII-Chars] (http://www.gnu.org/software/emacs/manual/html_node/emacs/Named-ASCII -Chars.html # Named-ASCII-Chars). ** Deshabilitar 'ESC' (' "\ e" ') deshabilita casi todo en función de la tecla meta ** (aquí al menos). También 'C-c' y' C-x' son prefijos de primera clase que se ramifican a muchos comandos. –

Respuesta

33

No hay manera integrada para desarmar una gran cantidad de llaves, porque es fácil de hacerlo usted mismo:

(Editado por estricta corrección :)

(dolist (key '("\C-a" "\C-b" "\C-c" "\C-d" "\C-e" "\C-f" "\C-g" 
       "\C-h" "\C-k" "\C-l" "\C-n" "\C-o" "\C-p" "\C-q" 
       "\C-t" "\C-u" "\C-v" "\C-x" "\C-z" "\e")) 
    (global-unset-key key)) 

Aunque tengo que decir que la mayoría de los comandos que llamas "inútiles" a los que llamaría "esenciales".

(Editado para añadir :)

En cuanto a la liberación de teclas para otras tareas, hay un montón de sin usar las propiedades inmobiliarias clave:

  • secuencias de teclas que consisten en C-c seguido de una letra son por convención reservada para los usuarios.
  • Si tiene un modificador adicional disponible, como la opción en la Mac o la tecla de Windows en una PC, puede asociarlo con un modificador de Emacs como super. Tengo super-b vinculado a browse-url-at-point, por ejemplo.
  • Si no está en un terminal plano, la tecla Mayús está disponible para distinguir secuencias de teclas. Por ejemplo, tengo shift-meta-b vinculado a bury-buffer.
  • Para los comandos que son útiles pero no se ejecutan con la frecuencia suficiente para garantizar una secuencia de clave dedicada, puede usar defalias para proporcionar un nombre más corto. En mi archivo .emacs, tengo (defalias 'ru 'rename-uniquely) y (defalias 'c 'calendar) (entre muchos otros).
+0

sí, pero utilizo 'home'' end' y las teclas de flecha, etc. para lograr el mismo efecto. Estoy tan acostumbrado a estos que me resulta muy difícil adaptarme a otras teclas de navegación. Además, me gustaría que claves como estas estén disponibles para mí para realizar tareas que son más importantes para mí. Por ejemplo, me gustaría deshacer el uso de C-z porque me resulta muy difícil hacer múltiples deshacer usando la opción predeterminada 'C-x C-u'. – AnkurVj

+1

Esto ha funcionado para todas las teclas, excepto C-z, que de alguna manera está minimizando emacs, aunque se supone que es "buffer de suspensión". ¿Hay algo que me falta aquí? – AnkurVj

+0

Oye, funcionó una vez y la próxima vez que dejó de funcionar ... ¿podría ayudarme a depurarlo? Copié pegado exactamente lo mismo las dos veces y ahora no puedo hacer que funcione. Sigue diciendo "Error de propagación: (clave de enter-o-marcador-argumento de tipo-erróneo)". :(:( – AnkurVj

8

global-unset-key y local-unset-key son útiles, pero vale la pena tener una respuesta a esta pregunta que señala que la generales manera de desenlaza una clave (por cualquier mapa de teclas) es definir una unión de nil:

(define-key KEYMAP KEY nil) 

Si sigue el código para cualquiera de esas otras funciones, notará que esto es exactamente lo que hacen.

+2

En emacs 24, establecer una clave predeterminada en cero no tiene ningún efecto, y conserva el valor predeterminado. – alinsoar

+0

¿Qué quiere decir con "una clave predeterminada"? – phils

+0

Una clave que viene con los valores predeterminados de emacs, sin agregar un .emacs ni cambiar el archivo de inicio. Por ejemplo, "M-)" se predetermina para 'move-past-close-and-resindent'. – alinsoar

Cuestiones relacionadas