Emacs: как определить переменные 'bookmark' для каталогов - PullRequest
2 голосов
/ 20 марта 2019

Я использую Emacs и ESS для программирования на R и обычно работаю в нескольких определенных папках.Из-за конфигурации моей рабочей среды папки, над которыми я работаю, обычно «очень глубокие» в каждой структуре папок, то есть мне нужно указать несколько подпапок, прежде чем они попадут в каталог, в котором я работаю:

/Desktop/SUB1/SUB2/SUB3/SUB4...

Это утомительно, и мне приходится многократно использовать CTR+X CTR+F, чтобы найти файлы, даже мне нужно работать только в нескольких местах.Мне интересно, есть ли возможность, позволяющая мне определить несколько переменных, в которых хранятся общие местоположения, над которыми я работаю, и когда мне нужно найти какой-либо скрипт, мне нужно только вызвать что-то вроде:

$SHORTCUT/Script.R

Это будет функция, похожая на закладку в оконном менеджере Linux.Я понимаю, что существует глобальная среда настройки, которая позволяет вам устанавливать каталог по умолчанию.Тем не менее, это только сделает работу немного проще для одной папки.Это улучшение, но все же недостаточно, если я работаю над несколькими проектами одновременно.

Есть предложения?

Ответы [ 2 ]

4 голосов
/ 20 марта 2019

Здесь у вас есть несколько вариантов. У меня есть 2 в магазине для вас закладки и файловые реестры если вы выполните следующую команду

(set-register ?a '(file . "~/.emacs"))

Затем выполните C-x r j a или M-x jump-to-register a, чтобы перейти к файлу .emacs. Я рекомендую вам прочитать документы на регистрах, они очень удобны.

Второй - закладка. Вы можете добавить в закладки файлы или каталог, используя C-x r m в буфере по интересам. Не забудьте сохранить закладки, иначе они исчезнут при следующем запуске emacs. M-x bookmark save

обновление Третьим вариантом будет использование пакета keychords, который вы можете найти на melpa

(defun open-this  ()
  (interactive)
  (find-file "~/.emacs") )

(require 'key-chord)
(key-chord-mode 1)
(key-chord-define-global "=-"  'open-this)

затем, нажав =- одновременно или достаточно быстро, вы перейдете к файлу .emacs. Приятной особенностью является то, что вы также можете использовать локальный режим, чтобы один и тот же аккорд клавиш делал разные вещи в зависимости от вашего режима.

1 голос
/ 20 марта 2019

Это то, что я делал в прошлом:

(defun jea-open-deep-file (arg)
  (interactive "sWhich File?: ")
  (cond
   ((string= "1" arg) (find-file "~/.emacs"))
   ((string= "2" arg) (find-file "/Users/jamesanderson/code/python/aws/comprehend/README.md"))
   ((string= "3" arg) (find-file "~/some/other/file/somewhere/else.el"))
   (t (message "unknown choice"))))
(global-set-key [(f7)] 'jea-open-deep-file)

Итак, что я здесь делаю? Существует функция под названием «jea-open-deep-file», которая может открыть любой файл с помощью «find-file». Если вы хотите попробовать это, вы можете вставить его в файл ".emacs" или в буфер * scratch *, чтобы просто попробовать один раз. После того, как вы отредактируете вызовы find-file, чтобы указать файлы, которые вы хотите открыть, вы можете оценить буфер (есть несколько способов сделать это, самый простой для этого обсуждения: Alt + X then) eval-buffer "без кавычек в нижней области).

Как пользоваться? В этом случае я назначил функцию клавише F7 . Выберите тот, который вы еще не используете. Итак, после установки с eval-buffer я могу перейти:

  • F7
  • Он запрашивает у меня «Какой файл?»
  • Я набираю 1, 2 или 3 и нажимаю ВОЗВРАТ
  • emacs открывает файл

Сейчас у меня нет доступа к машине с Windows, но, возможно, вам придется немного изменить пути, например: "C:\\Program Files (x86)\\Aspell\\bin\\aspell.exe" это с дополнительными \\ выходами.

Каждый раз, когда вы хотите добавить файл в jea-open-deep-file, вам потребуется переоценить функцию (сначала это кажется немного странным, но именно так вы «редактируете редактор, пока вы редактируем ", что очень приятно, не нужно перезагружать все приложение emacs.).

Edit:

Если вы хотите перейти к определенной строке, попробуйте:

(defun jea-open-file-goto-line (fname line)
  (progn
    (find-file fname)
    (goto-char 0)
    (forward-line line)))

(defun jea-open-deep-file (arg)
  (interactive "sWhich File-Line?: ")
  (let* ((split (split-string arg "-"))
         (file (car split))
         (line (string-to-number (cadr split))))
    (cond
     ((string= "a" file) (jea-open-file-goto-line "~/.emacs" line))
     ((string= "b" file) (jea-open-file-goto-line "/Users/jamesanderson/code/python/aws/comprehend/README.md" line))
     ((string= "c" file) (jea-open-file-goto-line "~/some/other/file/somewhere/else.el" line))
     (t (message "unknown choice")))))

(global-set-key [(f7)] 'jea-open-deep-file)

при появлении запроса введите «b-13» (без кавычек), если вы хотите перейти к 13-й строке файла с пометкой «b»

...