#emacs #bookmarks
#emacs ( эмакс ) #закладки #emacs
Вопрос:
Я использую Emacs и ESS для программирования на R и обычно работаю в нескольких определенных папках. Из-за конфигурации моей рабочей среды папки, с которыми я работаю, обычно расположены «очень глубоко» в структуре каждой папки, т. Е. мне нужно указать несколько вложенных папок, прежде чем перейти к каталогу, в котором я работаю:
/Desktop/SUB1/SUB2/SUB3/SUB4...
Это утомительно, и мне приходится многократно использовать CTR X
CTR F
для поиска файлов, даже если мне нужно работать всего в нескольких местах. Мне интересно, есть ли какая-либо возможность, позволяющая мне определить несколько переменных, которые хранят общие местоположения, над которыми я работаю, и когда мне нужно найти какой-либо скрипт, мне нужно только вызвать что-то вроде:
$SHORTCUT/Script.R
Это была бы функция, подобная закладке в оконном менеджере Linux. Я понимаю, что существует глобальная среда настройки, которая позволяет вам установить каталог по умолчанию. Однако это лишь немного облегчит работу с одной папкой. Это улучшение, но все еще недостаточно хорошее, если я работаю над несколькими проектами одновременно.
Есть какие-нибудь предложения?
Комментарии:
1. попробуйте
M-x bookmark-set
. Вы также могли бы использовать файловые регистры. СмотритеC-h f set-register
2. В дополнение к установке закладок для файлов или каталогов, вы можете определить переменную среды операционной системы и использовать завершение. IOW, вы можете использовать точно
$SHORTCUT/Script.R
.TAB
завершает ввод, начинающийся с$SHORTCUT
, путем расширения переменной среды. Однако закладки, как правило, выполняются быстрее (их меньше набирать) и более гибки.3. @Нарисовал. Спасибо, и я смог создать системную среду. Однако Emacs должен быть запущен из командной строки, чтобы позволить системной среде работать. В любом случае, вы могли бы порекомендовать, чтобы он автоматически загружал системные среды? Опция
(getenv var)
почему-то работает плохо и поддерживает только одну конкретную переменную.4. Смотрите руководство Emacs, Среда узла. То, как вы устанавливаете переменные среды вне Emacs (к которым Emacs затем может получить доступ), зависит от вашей операционной системы. И смотрите Имена файлов узлов для получения информации о расширении переменных среды.
Ответ №1:
Здесь у вас есть несколько вариантов. У меня есть для вас 2 закладки и файловые регистры, если вы выполните следующую команду
(set-register ?a '(file . "~/.emacs"))
Затем выполните, C-x r j a
или M-x jump-to-register a
вы перейдете к вашему файлу .emacs. Я рекомендую вам прочитать документы по регистрам, они довольно удобны.
Вторая — это bookmark. Вы можете создавать закладки для файлов или каталогов, используя 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. (set-register ?a'(файл . «~/.emacs»))
2. Закладка отлично работает. Один вопрос: Я заметил, что вы также можете использовать register для позиций. Поддерживает ли имя регистра несколько символов, например, вместо
r
, может быть, я мог бы использоватьcrr
?3. нет, насколько я знаю, учетные записи не поддерживают несколько символов, но они чувствительны к регистру, так что у вас есть множество вариантов. Другой альтернативой является использование
key-chords
для открытия файлов. Но вам нужно установить пакет из melpa. смотрите обновление
Ответ №2:
Это то, что я делал в прошлом:
(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 затем «eval-buffer» без кавычек в нижней области).
Как использовать? В этом случае я сопоставил функцию с F7 ключом. Выберите тот, который вы еще не используете. Итак, после установки с eval-buffer я могу перейти:
- F7
- Он запрашивает меня «Какой файл?»
- Я набираю 1, 2 или 3 и нажимаю RETURN
- emacs открывает файл
У меня сейчас нет доступа к компьютеру с Windows, но вам может потребоваться немного изменить пути, например: "C:\Program Files (x86)\Aspell\bin\aspell.exe"
this с дополнительными \ экранированиями.
Каждый раз, когда вы хотите добавить файл в jea-open-deep-file, вам нужно будет повторно оценить функцию (сначала это кажется немного странным, но именно так вы «редактируете редактор во время редактирования», что действительно приятно, когда не нужно перезагружать все приложение emacs.).
Редактировать:
Если вы хотите перейти к определенной строке, пожалуйста, попробуйте:
(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»
Комментарии:
1. Спасибо, Джеймс. Один вопрос: поддерживает ли эта функция позиции вместо файлов? Обычно в определенной папке находится несколько файлов, с которыми я работаю, и таким образом это будет более гибко.
2. Я добавил версию, которая переходит к строке. Это то, чего вы хотите? Или я неправильно понял. Если вы хотите перейти к каталогам, я бы предложил фантастический org-mode
3. существует также система закладок (которую я никогда не использую, но, вероятно, она хороша)
4. Я имею в виду именно каталоги. Извините за путаницу. Я не знаю, хорошо ли работает org-mode с R-кодированием, но попробую позже!
5. попробуйте создать файл, подобный «mylinks.org » чтобы запустить режим организации. Затем добавить
[[file emacs:/Users/name/logs/tasks/l/learn/][learn]]
режим org, который должен сделать ссылку, в которой просто написано «learn». при нажатии вы должны открыть тот каталог, который предшествует ему. org-mode действительно стоит потратить некоторое время на изучение.