Подтвердить что ты не робот

Emacs: Какая хорошая тактика для навигации каталогов и открытия файлов?

На прошлой неделе, в ярости (снова), чтобы справиться с разными IDE для R и Perl, ни один из которых мне не нравится или не использует достаточно, чтобы действительно чувствовать себя комфортно, я решил попробовать Emacs. Это решение не было сделано без особого беспокойства с моей стороны. Мое главное использование для Perl с cperl и для R с ESS. Моя среда - это 64-разрядная версия Windows 7 Ultimate, и я запускаю v23.4.1, и я считаю, что пакет ESS установлен от моего имени.

Почти неделя и до сих пор она была удивительно безболезненной, не более привлекательной, чем любая другая значительная часть программного обеспечения. Я переназначил свой ключ ctrl на cap-lock, изменил папки по умолчанию, перепутал с .emacs и сделал некоторые дополнения, такие как автоматическая установка, yasnippet, цветовая тема, сосульки и несколько других. Ясно, что там есть очень сложные вещи. Кроме того, некоторые функции базовых Emacs сразу же очень мощны и полезны, например, поиск вверх и вниз. В целом меня приятно удивили и успокоили.

Одна вещь, которая грубее, чем я ожидал, - это процесс поиска и открытия файлов. После беглого чтения различных учебников у меня был этот образ квазимагического расположения файла и автозавершения имени файла. Основные каталоги в моей настройке имеют пути, такие как g:/roaming/code/perl или g:/roaming/code/R/, но мне часто нужно разветвляться на совершенно разные пути, такие как g:/pricesata/support files/sector/project01/и т.д.

В настоящее время я с трудом удаляю путь к файлу, когда мне нужно взять другую вилку, а затем использовать автозаполнение, чтобы глубже проникнуть в эту ветвь файловой системы. Это как-то возвращает меня к запуску оболочки bash на Amiga двадцать лет назад.

Чего я ожидал? Что-то вроде (используя вышеприведенный пример), набрав "project01", пропустить сразу в папку внизу пути. По какой-то причине у меня появилась идея, что Emacs будет загружать каталоги. Возможно, это было нереально.

Моя догадка заключается в том, что мои трудности, вероятно, связаны с моим отсутствием знакомого, а не структурным недостатком Emacs и приводят к моим вопросам. Я не могу жаловаться, что документации недостаточно. скорее, есть много информации о том, что он рассеялся вокруг довольно беспорядочно. У сосульки есть аналогичная проблема - если что-то там слишком много.

1) Какая лучшая тактика для перемещения по различным ветвям дерева файлов при попытке открыть файлы в минибуфере или с помощью какого-либо другого метода? Существуют ли псевдонимы, которые можно использовать для быстрого доступа из одного места в другое или могут указывать каталоги для предварительной загрузки? У людей просто много? Или я прихожу к этому из совершенно неправильного угла и вам нужно принять другую стратегию?

2) С дополнительной настройкой можно автозаполнение использовать для поиска файлов (скажем) project01 непосредственно выше, путем префикса с помощью подстановочных знаков и т.д.? На что я должен сосредоточиться, чтобы стать более эффективными здесь? Разве я не использую возможности надстроек, таких как сосульки, что-нибудь и т.д.

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

4b9b3361

Ответ 1

Существуют различные подходы. Кэш имен файлов - это встроенное решение. Открытие файлов из последних файлов также очень эффективно, особенно если вы установили сохраненные файлы на большое число (например, 1000). Существуют также пакеты для открытия файлов из любого места в файловой системе. И есть мета-решения like anything.el, которые могут показать вам завершение файлов из нескольких источников (история, файлы проектов и т.д.) В общем интерфейсе.

Вы должны изучить различные варианты, чтобы узнать, что наиболее подходит для вас.

Ответ 2

helm (ранее известный как anything) может счесть вас правильным. Вы можете установить его вручную или с помощью расширения auto-install.

Для auto-install образом: загрузите его, поместите в свой load-path, затем добавьте в .emacs:

(add-to-list 'load-path "~/.emacs.d/site-lisp/auto-install")
(require 'auto-install)
(setq auto-install-directory "~/.emacs.d/site-lisp/auto-install/")

Тогда do M-x auto-install-batch anything. После этого введите .emacs:

(require 'anything)
(require 'anything-match-plugin)
(require 'anything-config)
(require 'anything-show-completion)

Тогда do M-x anything для чего угодно.

Также попробуйте ECB (означает Emacs Code Browser). Если вы находитесь в Linux - вы, вероятно, имеете его в стандартном репозитории.

Ответ 3

Вы можете воспользоваться ido-mode, что значительно улучшает автозаполнение почти везде в emacs (особенно при поиске файлов или буферов).

(setq ido-enable-flex-matching t
      ido-auto-merge-work-directories-length -1
      ido-create-new-buffer 'always
      ido-use-filename-at-point 'guess
      ido-everywhere t
      ido-default-buffer-method 'selected-window)
(ido-mode 1)
(put 'ido-exit-minibuffer 'disabled nil)
(when (require 'ido-ubiquitous nil t)
  (ido-ubiquitous-mode 1))

Хотя это может помочь вам быстро найти файлы "недалеко", это, вероятно, не поможет вам найти файлы в совершенно разных местах.

Если вы обнаружите, что одним из способов начать решение этой проблемы является использование recentf-mode для быстрого перехода к недавним местоположениям (если у вас есть только небольшое количество обычных каталогов проектов, это может сделать трюк). recentf можно связать с ido, используя что-то вроде этого (я не уверен, откуда я получил этот фрагмент):

(recentf-mode 1)
(setq recentf-max-saved-items 50)
(defun ido-recentf-open ()
  "Use `ido-completing-read' to \\[find-file] a recent file"
  (interactive)
  (if (find-file (ido-completing-read "Find recent file: " recentf-list))
      (message "Opening file...")
    (message "Aborting")))
(global-set-key (kbd "C-x C-r") 'ido-recentf-open)

С этим вы можете использовать C-x C-f (ido-find-file) для поиска файлов рядом с вами текущего местоположения и C-x C-r (ido-recentf-open), чтобы искать недавно открытые файлы (надеясь, что один из них не слишком далеко от того места, куда вы хотите отправиться).

Ответ 4

В дополнение к IDO и recetf вы можете использовать следующие методы:

  • Откройте каталог рекурсивно.

    (defun op-i:dired (rec)
      "customized dired: will display directory recursively when called with an argument"
      (interactive "P")
      (let ((dir (car (find-file-read-args "Dired: " nil))) 
            (opts (if rec (read-string "options: " "-lhAR") "-lhA")))
        (if (file-directory-p dir) (dired dir opts))))
    
    (define-key (current-global-map) (kbd "C-x C-d") 'op-i:dired)
    

    Затем вы можете перемещаться в буфере каталога, как в любом другом буфере, используя (подстановочный) поиск.

  • Используйте регистры Emacs для указания на часто используемые каталоги. Вы можете инициализировать их в своем .emacs

    (set-register ?0 (cons 'file "c:/path/to/my-project0"))
    (set-register ?1 (cons 'file "c:/path/to/my-project1"))
    

    Затем перейдите к регистру с помощью C-x r j

Ответ 5

Другие люди уже упомянули что-нибудь, достаточно сказать, я считаю, что он решает все ваши проблемы.:)

Вызов одной конкретной функции чего-либо составляет anything-locate. В системах * nix это использует базу данных, созданную командой locate для быстрого поиска файлов. В Windows я считаю, что он работает с "Все", что должно дать вам почти мгновенные результаты поиска во всех ваших файлах. Я имею в виду все.

Том упомянул file-cache. Все работает с этим.

Как побочная заметка, Dired - абсолютный монстр, когда вы привыкнете к нему. Вы должны прочитать связанные с ним страницы emacswiki. В частности, dired-x, который поставляется вместе с Emacs binds C-x C-j, переключение на текущий буфер в Dired было для меня откровением. Также dired-find, wdired.

Изменить: некоторые подробности о том, почему C-x C-j является удивительным.

Когда вы вытаскиваете текущий буфер в Dired-буфере, вы можете его изменить, то есть переименовать, удалить и т.д. И Emacs знает, что вы сделали, и соответствующим образом настроите.

Ответ 6

Другие возможности:

  • Закладки. Если вы используете Закладка +, вы также можете:

    • Закладка Заработанные буферы, которые запоминают их вставленные поддиры, их маркировку и пропуски файлов. У вас может быть закладка, которая открывает Dired для определенного набора файлов, которые не обязательно должны находиться в одном каталоге или даже в том же дереве каталогов.

    • Из Dired вы можете нажать клавишу, чтобы создать отдельную закладку для каждого помеченного файла или поддира.

    • Закладки файлов автоматически (автофилы).

    • Отметьте закладки и файлы (закладок автофайла) с помощью тегов с произвольным текстом. (Теги могут быть даже нетекстовыми Lisp объектами). Используйте теги для организации, поиска и т.д. Различных категорий закладок.

    • Закладки на закладки закладок или файлов закладок или настольных компьютеров Emacs. Перейдите к такой закладке, чтобы восстановить заданное состояние/контекст проекта.

  • Icicles.

    • Определить временные или постоянные наборы файлов "на лету", даже из разных каталогов. Используйте файлы в наборе различными способами. (Используйте набор файлов Emacs, менее мощный, таким же образом.) Заполните имена файлов из таких сохраненных наборов во время любой команды завершения, а не только для поиска файлов.

    • Действуйте по-разному в файлах-кандидатах во время завершения.

    • Поиск объектов с закладками или сохраненных наборов файлов или буферов.

  • Dired +.

    • Дополнительная navigation, включая i переключение между списком подкаталогов и строкой подкаталога в родительском списке.

работ: