2008-10-06 13 views
8

Tengo una copia de emacs que uso en un par de computadoras diferentes (Windows) de una memoria USB, y me pregunto si es posible crear algo que sea algo así como un alias bash o enlace simbólico dentro de emacs ? Algo que podría usar dentro de find-file es lo principal que estoy buscando, así que por ejemplo: C-f <some link> me llevaría a algún lado. Actualmente tengo que agregar un defun nuevo cada vez que llego a una computadora nueva, lo cual es un poco doloroso y lo haría juro lo he visto en alguna parte, pero los meses de Google no han encontrado nada.¿Crear alias en emacs?

lo que tengo en este momento es algo así como:

(defun go-awesome() 
    "Find my way to my work home" 
    (interactive) 
    (find-file "c:/cygwin/home/awesome")) 

Pero eso se siente increadibly exageradas y hacky por sólo visitar un bastante hacky para simplemente visitar un archivo que volviese a semi-regular. Y requiere un gran esfuerzo configurar un nuevo archivo.

Sin embargo, el mayor problema es que, en mi opinión, no encaja en mi flujo de trabajo. Cuando quiero visitar un archivo siempre hago C-x C-f, y si me doy cuenta de que "hey estoy en el trabajo", entonces tengo que C-g M-x go-awesome. Quizás sería más claro si dijera que quería poder hacer algo que sea equivalente a ln -s /some/awesome/dir pero interno a emacs, en lugar de estar integrado en el sistema operativo, de modo que C-x C-f ~/awesome/some/sub/dir funcione en Windows o en cualquier otro lugar.

+0

Por favor, explique más de lo que está buscando. ¿Estás volviendo a escribir funciones cuando vas a una computadora nueva (es decir, no tienes tu archivo .emacs en la memoria USB)? – dwj

+0

¿Qué funciones estás reescribiendo? (¿Cuál es el propósito de estas funciones, abrir ciertos archivos? P. Ej. (Find-config-file)?) ¿Quieres ir a "Cf config-file" y cargar automáticamente blah.conf desde una ubicación que depende ¿En qué máquina estás usando? –

Respuesta

11

No tengo muy claro qué es lo que estás pidiendo. Almaceno mis archivos comúnmente usados ​​en los registros en mis .emacs:

(set-register ?c '(file . "c:/data/common.txt")) 
(set-register ?f '(file . "c:/data/frequent.txt")) 

Entonces puede saltar a un archivo con jump-to-register (C-x r j):

Por ejemplo, "C-x r j c" me lleva a c:/data/common.txt (carga si es necesario).

¿Es eso lo que estás buscando?

-1

Me moví esto en la pregunta original, pero lo estoy dejando aquí porque la gente respondió a ella ya

Eso es mucho mejor que lo que tengo, pero lo siento que probablemente existe es algo que sustituiría, por ejemplo:

(defun nuke() 
    "alias delete-trailing-whitespace" 
    (interactive) 
    (delete-trailing-whitespace)) 

y se sienten menos hacky, y al igual que se estaba haciendo realidad lo que se supone que deben hacer, en vez de hacer algo realmente pesado para lo que se siente como algo que debe ser realmente ligero.

¿Tiene sentido?

Sin embargo, su asignación a los registros en realidad podría ser mejor de lo que estoy buscando.

+0

Esto realmente debería haberse agregado a la pregunta. (O tal vez aclarar la pregunta y luego publicar esto como una respuesta.) – cjm

2

Si desea un alias a una función, se utiliza defalias:

(defalias 'nuke 'delete-trailing-whitespace) 

Pero si te quejas de que los nombres de funciones de Emacs son demasiado largos, usted debe buscar en partial-completion-mode.Con eso encendido,

M-x d-t-w [RET] 

se ejecutará delete-trailing-whitespace.

0

Lo que quiere es abrir un archivo determinado con solo un comando, puede definir una macro de teclado. Esta macro abrir el archivo ~/.bashrc

C-x(# start defining the macro 
C-x C-f ~/.bashrc 
C-x) # end definition 

A continuación, puede llamar a esta macro

M-x name-last-kbd-macro 
visitbashrc #give it a name 

entonces se le puede llamar por su nombre Mx visitbashrc

Usted puede guardar la definición de un archivo, .emacs, por ejemplo, visitando este archivo e insertando la definición en él, con

M-x insert-kbd-macro 
0

Tengo esta configuración a continuación. Entonces, por ejemplo, si quiero encontrar un archivo en mi escritorio (D:/Escritorio), escribo F3 j F3 y no importa en qué camino comencé, el minibúfer ahora dice "D: \ Desktop \" y yo ' Estoy listo para escribir cualquier nombre de archivo en el escritorio. Configuré mi atajo en j, k, l, i b/c, que están cerca de donde está mi mano izquierda, pero con esta configuración, cualquier atajo de hasta 4 letras funcionará. Así que puede agregar una entrada para su archivo "impresionante", decir "asombro", y puede escribir F3 awe F3 enter para visitar su archivo. No sé si esto es lo que estás buscando; pero esto me ahorra una gran cantidad de mecanografía;)

(global-set-key [f3] 'ffap) 

;comcplete shortcut in minibuffer 
(define-key minibuffer-local-completion-map (kbd "<f3>") 
         'complete-minibuffer-path) 

(defun complete-minibuffer-path() 
    "Extension to the complete word facility of the minibuffer by 
replacing matching strings to a specific path" 
    (interactive) 
    (setq found t) 
    (cond 
    ; just add new entries if needed; shortcut up to 4 letters will work 
    ((looking-back "j" 5 nil) (setq directory "D:/Desktop/")) 
    ((looking-back "k" 5 nil) (setq directory "D:/Documents/")) 
    ((looking-back "l" 5 nil) (setq directory home-dir)) 
    ((looking-back "i" 5 nil) (setq directory "D:/Programs/")) 
    (t (setq found nil))) 
    (cond (found (beginning-of-line) 
       (kill-line) 
       (insert directory)) 
     (t (minibuffer-complete)))) 
0

Este blog entry define casi exactamente lo que quería, básicamente vamos a me golpeó $ en el minibúfer y luego me presenta con una lista de mis marcadores que puedo saltar a. Podría ajustarlo de modo que si especifico un marcador de archivos me lleve al archivo en lugar del directorio, pero eso es un detalle, especialmente teniendo en cuenta que el archivo que marca es de todas maneras el encabezado de la lista.

2

Esto es lo que necesita -

  • Definir marcadores que corresponden a los contextos que desea revisar. Con Bookmark+, no es necesario que sea solo un archivo. También puede ser todo un escritorio Emacs o un búfer Dired con sus marcas (guardado), un conjunto de otros marcadores, ...

  • Uso Icicles junto con Favorito +. Siempre que use C-x C-f etc. para visitar un archivo, también puede visit a file or directory bookmark (completar con el nombre del marcador). Simplemente pulse C-x m cuando se encuentre en el minibúfer para completar el nombre del archivo.

+0

Gracias por los consejos para estos increíbles paquetes de emacs.Me alegra ver que icicles es un paquete disponible para Ubuntu (comenzando con Lucid). Bookmark + toma algunos pasos manuales tontos para instalar, pero vale la pena .... – nealmcb