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

Emacs: открытие любого файла в большом репо

Что мне нужно

быстрый/эффективный способ открыть любой файл под большим (git) репо (файлы ~ 9.8k).

Контекст

Я пробовал различные решения, например Textmate.el и find-file-in-repository. Я нашел эти решения с помощью предыдущих SO-вопросов, таких как this и и через LocateFilesAnywhere EmacsWiki.

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

Я думаю, что основная проблема заключается в том, что при вводе любого символа emacs/find-file-in-repository запускается команда оболочки (git ls-files...). Мне действительно нужно только сделать это, когда я перестаю печатать.

Вопросы

  • Есть ли лучшая библиотека для этого прецедента?
  • Если нет, как я могу ввести задержку в команду при наборе текста? то есть, когда я находится в find-file-in-repository, я хочу, чтобы команда find вызывается только тогда, когда я прекращаю печатать (допустим, пробел 300 мс).
4b9b3361

Ответ 1

Резюме

После того, как я получил три ответа, я попробовал их (также отвечая на мой собственный вопрос, поскольку ни один из вышеперечисленных решений не работал у меня). Наконец я остановился на helm-ls-git. Здесь сравнение с моей точкой зрения:

Projectile

  • потребовалось около 30 минут для индексации репо. Поскольку снаряд не знает о .gitignore, фактическое количество файлов больше похоже на 52k.
  • может быть настроен, но что-то, что только работает (т.е. понимает git), является предпочтительным
  • может потребоваться время от времени отменять повторный индекс кэша. Это было бы дорогостоящим и частым, так как новые файлы добавляются каждый день к репо.

helm-cmd-t

  • выглядел хорошо из описания и источника.
  • трудно установить, так как он не опубликован в melpa/marmalade и т.д. Подробнее в этот вопрос Я открыл.

GNU Global

  • Не пыталась, так как у него, вероятно, были те же проблемы, что и у Projectile (git -unaware, ему нужен "индекс", который может потребоваться время от времени)

event-jr ответить, однако открыли еще несколько вариантов: я не знал о helm до Теперь. Глядя на melpa для плагинов, связанных с шлемом, я нашел следующее:

helm-git

  • Это выглядело действительно многообещающим.
  • Было легко установить с помощью package.el, так как он в melpa
  • Я также использую и люблю magit - так это выглядело хорошо.
  • Тем не менее, он не работал с ошибкой magit-git-dir: symbol is void. Не погружался слишком много, но похоже, что его нужно обновлять. Открыто проблема

helm-ls-git

  • Как говорится в readme, это независимое от магии.
  • До сих пор работала чудесно. Простота установки (melpa) и быстро.

Ответ 2

Я использую GNU для этого. У меня около 20K файлов в моем проекте. Вы можете запустить M-x gtags-find-file и введите первые несколько символов. TAB завершит и покажет все соответствия. Вы можете ввести любые символы, которые являются частью имени файла, и нажмите клавишу ввода. Покажет все файлы, содержащие эти символы.

Я пытался использовать для этого снаряд. Но это было слишком медленно для "индексации проекта". Он не завершил индексирование даже через 1,5 часа, и я должен его убить!. Не уверен, что здесь что-то не так. GNU global намного быстрее и завершает создание всего тэга в течение 15 минут.

Ответ 3

Я использую helm-cmd-t счастливо. Он будет кэшировать список файлов в памяти. Элементы управления кешем достаточно гибкие для моих нужд.

Я просто ответил на ваш вопрос о новом адресе репо:

fooobar.com/questions/485254/...

Это https://github.com/lewang/helm-cmd-t

Ответ 4

Вы можете проверить Projectile. Он был создан, чтобы обеспечить что-то похожее на C-p, но также имеет множество дополнительных функций уровня проекта. Первоначальная индексация проекта будет довольно медленной в таком крупном проекте, но после этого Projectile будет кэшировать файлы проекта (как в памяти, так и на жестком диске), а последующие вызовы снарядов должны быть почти мгновенными.

У снаряда также есть плагин Helm для отображения файлов проектов и буферов с помощью Helm.