file - comandos emacs terminal
¿Cómo puedo abrir rápidamente un archivo en emacs? (4)
OPCIÓN # 1 - una función por clave asignada:
(global-set-key (kbd "<f6>") (lambda () (interactive)
(find-file "/Users/HOME/.0.data/todo.org")
(message "Opened: %s" (buffer-name))))
OPCIÓN # 2 - función con opciones:
(global-set-key (kbd "<f5>") ''lawlist-bookmark)
(defun lawlist-bookmark (choice)
"Choices for directories and files."
(interactive "c[D]ired | [v]ocab.org | [g]td.org | [d]iary.org | [n]otes.org")
(cond
((eq choice ?D)
(dired "/very/long/and/boring/path/which/make/me/use/tab/for/..."))
((eq choice ?v)
(find-file "/Users/HOME/.0.data/vocab.org")
(message "Opened: %s" (buffer-name)))
((eq choice ?g)
(find-file "/Users/HOME/.0.data/gtd.org")
(message "Opened: %s" (buffer-name)))
((eq choice ?d)
(find-file "/Users/HOME/.0.data/diary.org")
(message "Opened: %s" (buffer-name)))
((eq choice ?n)
(find-file "/Users/HOME/.0.data/notes.org")
(message "Opened: %s" (buffer-name)))
(t (message "Quit"))))
OPCIÓN # 3 : haga clic con el botón secundario en el menú contextual (emergente):
(global-set-key [mouse-3] ''lawlist-popup-context-menu)
(defvar lawlist-context-menu-map
(let ((map (make-sparse-keymap "Context Menu")))
(define-key map [find-file-todo] (cons "ToDo" (lambda () (interactive)
(find-file "/Users/HOME/.0.data/todo.org"))))
(define-key map [find-file-gtd] (cons "GTD" (lambda () (interactive)
(find-file "/Users/HOME/.0.data/gtd.org"))))
(define-key map [find-file-notes] (cons "Notes" (lambda () (interactive)
(find-file "/Users/HOME/.0.data/notes.org"))))
(define-key map [find-file-vocab] (cons "Vocab" (lambda () (interactive)
(find-file "/Users/HOME/.0.data/vocab.org"))))
(define-key map [find-file-diary] (cons "Diary" (lambda () (interactive)
(find-file "/Users/HOME/.0.data/diary.org"))))
(define-key map [seperator-three] ''(menu-item "--"))
(define-key map [help-for-help] (cons "Help" ''help-for-help))
(define-key map [seperator-two] ''(menu-item "--"))
(define-key map [my-menu] (cons "LAWLIST" (make-sparse-keymap "My Menu")))
(define-key map [my-menu 01] (cons "Next Line" ''next-line))
(define-key map [my-menu 02] (cons "Previous Line" ''previous-line))
(define-key map [seperator-one] ''(menu-item "--"))
map) "Keymap for the LAWLIST context menu.")
(defun lawlist-popup-context-menu (event &optional prefix)
"Popup a context menu."
(interactive "@e /nP")
(define-key lawlist-context-menu-map [lawlist-major-mode-menu]
`(menu-item ,(symbol-name major-mode)
,(mouse-menu-major-mode-map) :visible t))
(popup-menu lawlist-context-menu-map event prefix))
OPCIÓN # 4 - Menú desplegable de la barra de menú:
(require ''easymenu)
(easy-menu-define lawlist-menu global-map "My own menu"
''("lawlist"
["Next Line" next-line t]
["Previous Line" previous-line t]
["Dired Mode" dired t]
["--" my-function t]
("Favorites"
["Diary" (find-file "/Users/HOME/.0.data/diary.org")]
["--" diary]
["GTD" (find-file "/Users/HOME/.0.data/gtd.org")]
["--" gtd]
["Vocab" (find-file "/Users/HOME/.0.data/vocab.org")]
["--" vocab]
["Notes" (find-file "/Users/HOME/.0.data/notes.org")]
["--" notes]
["ToDo" (find-file "/Users/HOME/.0.data/todo.org")]
) ))
Tengo una estructura muy compleja y densa de carpetas y archivos. Me gustaría abrir rápidamente un archivo que está muy lejos de mi casa en emacs.
Cx Cf
no es lo suficientemente rápido porque tengo que escribir la ruta que podría ser muy larga (ejemplo: /very/long/and/boring/path/which/make/me/use/tab/for/autocompletion/too/much/and/ruins/my/hands/with/repetitive/strain/injuries/my_file_finally.tex
)
Entonces, ¿es otra manera, más rápida (que Cx Cf
) para abrir dicho archivo y, de no ser así, existe una forma de crear accesos directos para los archivos más usados?
PD: no quiero mover archivos (las rutas largas significan para mí una computadora limpia y organizada).
También mencionaré filecache.el
. Básicamente proporciona una finalización especializada (que puede vincular a una clave para usar al ingresar nombres de archivo) que primero se completa en "nombres de archivo, independientemente del directorio", y una vez que se completa, recorre los pocos directorios donde se encuentran dichos archivos.
Además de las respuestas anteriores, el timón puede ser una buena solución a su problema. Si bien hace menos que carámbanos en el ámbito de la coincidencia de patrones sofisticados y la creación / gestión / guardado de conjuntos complejos de archivos, el timón hace lo que hace bien y rápido (desde la perspectiva de teclas y la perspectiva de software / latencia). Just Mx package-install <ret> helm <ret>
y listo.
Primero, el timón puede rastrear recenf
, una lista de los archivos que ha usado recientemente. Solo Mx helm-recentf
y escriba una cadena / expresión regular que coincidirá con el nombre de archivo que desea, lo Mx helm-recentf
con los nombres de archivos que haya abierto recientemente en tiempo real. Desplázate y escribe para seleccionar el uno.
¡Pero espera! Hay más: (disculpe si esto empieza a sonar como un anuncio) Si está en Linux (supongo que ya que usa barras en sus rutas y parece que emacs + linux> mac + linux), puede use GNU locate, una herramienta para encontrar archivos en cualquier lugar de su sistema, siempre que el daemon de localización lo haya visto antes, lo que probablemente ocurra si el archivo ha estado disponible por un período de tiempo (ver abajo cuando no) . Es prácticamente tiempo real. El proceso de localización es rápido y el timón transmite los resultados en tiempo real. El comando para eso es Mx helm-locate
.
Ahora, ¿y si quieres encontrar archivos en git / mercurial / bazaar / etc. proyectos? Puede usar el proyectil , una "biblioteca de interacción del proyecto". Con proyectil de timón (necesitarás tanto proyectil de proyectil como proyectil de timón instalados de la misma manera que tú mismo). Transmitirá los nombres de archivos / directorios y cualquier otra cosa al timón. Una vez más. Todo lo que necesita es escribir una subcadena que coincida con cualquier lugar, y el timón lo encontrará por usted. Mx helm-projectile
Es GITHUB README dice "el timón es capaz de mucho". Hay mucho, mucho más para timonear. Pruebe helm-moccur, helm-ack (paquete externo), helm-imenu, helm-browse-code, helm-tracker-search, helm-dabbrev etc. etc. etc.
Y finalmente: ¿por qué elegir uno? Una cosa que el timón hace muy bien es crear tus propios comandos. Aquí hay una función que busca todo lo anterior.
;; you''ll need to require helm-config and helm-projectile somewhere above
(defun my-helm-omni (&rest arg)
;; just in case someone decides to pass an argument, helm-omni won''t fail.
(interactive)
(helm-other-buffer
(append ''(helm-c-source-buffers-list ;; list of all open buffers
helm-c-source-recentf) ;; all recent files
;; projectile errors out if you''re not in a project
(if (projectile-project-p) ;; so look before you leap
''(helm-source-projectile-files-list
helm-source-projectile-recentf-list
helm-source-projectile-buffers-list)
''())
''(
helm-c-source-files-in-current-dir ;; files in current directory
helm-c-source-locate ;; file anywhere
helm-c-source-bookmarks ;; bookmarks too
helm-c-source-buffer-not-found ;; ask to create a buffer otherwise
))
"*helm-omni*"))
Tengo esto obligado a Cc o
Vea esta respuesta a casi la misma pregunta. En particular, considere usar (a) los marcadores Dired y los otros marcadores relacionados con el proyecto en Bookmark + y (b) las ayudas relacionadas con el proyecto en Icicles .
Puede crear abreviaturas para nombres de directorios largos; consulte
directory-abbrev-alist
.