2011-11-21 10 views
5

¿Es posible en emacs buscar el nombre del archivo de forma que escribo primero la extensión y luego el espacio y luego el nombre del archivo? P.ej. org notes org o no se cambiará a notes.org.Emacs - cambiar al búfer ingresando la extensión y luego el nombre del archivo

¿O hay alguna forma de escribir tal función para hacer exactamente eso?

+0

Por curiosidad: ¿Cuál es el caso de uso para este tipo de función? –

+1

Me dejaría ver fácilmente todos los archivos del tipo dado en caso de que se abran muchos buffers. – Jarek

+0

Ahh, vale, ya veo. ¡Gracias! –

Respuesta

11

Si utiliza ido, puede escribir notas de org c-space.

Ido toma un tiempo para acostumbrarse, pero personalmente no puedo vivir sin él.

+0

Para aquellos de ustedes a punto de votar ido, checkout anything-config. La ventana dividida le permite ver cadenas largas como nombres de archivos/búferes mucho mejor, y hay una gran cantidad de fuentes predefinidas que puede mezclar y combinar. –

+0

Personalmente uso ido, y sí, puede hacerlo. Algo como esto '' C-x b .extension M-m name''. @event_jr Nunca he usado "carámbanos" o "nada" antes (pero usé iswitchb y lo comenté, ya que ido puede hacerlo mejor). ¿Puedes decir en pocas palabras sobre la compatibilidad con Ido/Icicles/Anything? ¿Están todos haciendo las mismas cosas, o hay una razón para usarlos juntos? – desudesudesu

+0

AFAIK cualquier cosa es compatible con ido. No veo una razón para usar ambos sin embargo. Ido y cualquier cosa hacen cosas similares, excepto que todo muestra las opciones en un búfer regular, no en el minibúfer. –

3

Anything puede hacer esto fácilmente, cualquier cosa ejecutar, escriba cualquier palabra en nombre de la memoria intermedia, muestra los resultados:

Emacs Anything

siguen este instalarlo: http://emacs-fu.blogspot.com/2011/09/finding-just-about-anything.html

si se puede querer filtrar búfer, aquí hay una configuración de ejemplo para usted:

(require 'anything-config) 
(global-set-key (kbd "C-x b") 
      (lambda() (interactive) 
       (anything 
       :prompt "Switch to: " 
       :sources 
       '(anything-c-source-buffers)))) 
+0

Lástima que no se abra una versión más grande de la imagen si hago clic en ella. Sería útil leer realmente lo que está en la captura de pantalla para obtener una idea de esta característica. – Tom

+0

El igualador de cualquier configuración de elementos predeterminado hace exactamente lo que solicitó el OP. Si la primera palabra también es un modo mayor, es decir, org, todo usa el modo principal como filtro. –

+1

Tom: acaba de abrir la imagen directamente, en realidad es más grande que eso (por no mencionar que es recursiva). – phils

1

Estoy completamente de acuerdo con Y ers, IDO es bastante útil. Por ejemplo, si tiene dos almacenamientos intermedios "some-video-page.js" y "video.py" puede ingresar "C-x b vidjs" o "C-x b vidpy" para cambiar a cualquiera de esos.

(ido-mode) 
(setq ido-enable-flex-matching t) 

También considere utilizar ibuffer para organizar sus búferes. Puede filtrar los almacenamientos intermedios por nombre de archivo completo y cerrar varios almacenamientos intermedios en función de su filtro actual.

(global-set-key (kbd "C-x C-b") 'ibuffer) 

Volviendo a su pregunta. Hay una biblioteca uniquify que se envía ahora con Emacs e incluirá el nombre del directorio principal en los nombres de los buffers de forma predeterminada. Pero esto es emacs de lo que estamos hablando y puedes personalizarlo como quieras. Tengo un gancho de archivo personalizado que prefija solo los búferes de Python con el nombre del módulo de Python. ¿IDO será suficiente para usted o aún desea su función personalizada de buffers de conmutación?

1

Icicles hace esto fuera de la caja - sólo tiene que utilizar S-TAB en lugar de TAB para la terminación - es decir, apropos completion en lugar de terminación de prefijo.

Para completar varios patrones (por ejemplo, subcadenas) independientemente de su orden, utilice progressive completion. Utiliza S-SPC para separar los patrones.

 
    C-x C-f notes S-SPC org 

o

 
    C-x C-f org S-SPC notes 

o, para estar seguro de que org está adaptada como una extensión de archivo, utilice \.org. (O use C-` para alternar juego subcadena/expresión regular, es decir, escapando de los caracteres especiales de expresiones regulares.)

Lo mismo si se utiliza la terminación buffer-name (o cualquier otro tipo de terminación) en lugar de nombre de archivo terminación.

En cuanto a la coincidencia de "flexión" de Ido, carámbanos tiene la misma cosa (se llama coincidencia "dispersión"), así como varios otros tipos de fuzzy matching. (Pero todas las formas de concordancia difusa son menos útiles de lo que suenan, en mi humilde opinión.)

1

Puede (aproximadamente) hacer esto de forma predeterminada mediante el uso del nombre globbing.

C-xb*.orgTAB

Emacs mueve el punto de sentarse de forma automática después de que el asterisco, para que pueda seguir inmediatamente a escribir parte del nombre del búfer.

También *org es un poco más fácil de escribir que *.org y probablemente obtendrá resultados suficientemente similares para sus propósitos.

1

Iswitchb, enviado con Emacs, no hace exactamente esto, pero está cerca. Muestra una lista de nombres de búfer en el minibúfer. A medida que escribe, la lista se reduce a los almacenamientos intermedios cuyo nombre contiene el texto que ha escrito (en cualquier lugar, no solo al principio). Entonces, si escribe .org, estará en los buffers cuyo nombre contiene .org. Para abrir un archivo específico entre estos, deberá mover el cursor hacia la izquierda y escribir las últimas letras del nombre del archivo, o presionar C-r o C-s para rotar entre las coincidencias.

La wiki de Emacs tiene un page on Iswitchb y un comparison of Icicles, Ido and Iswitchb.

+0

Me encanta iswitchb, pero nunca supe lo de C-r/C-s, que es increíblemente útil. :) – RealityMonster

Cuestiones relacionadas