Быстрый поиск файлов проекта с помощью Emacs EDE

Недавно я начал использовать EDE (через CEDET через ECB) в попытке получить Emacs настроен как разумная IDE для разработки на большом проекте C / C ++ / Python.

Что-то, что было немного неудобно для настройки (поскольку я новичок в Emacs и Lisp), было быстрым поиском файлов. В настоящее время у меня есть решение - создать необработанный / пустой проект (одному EDE не нужно знать, как управлять make-файлами или сборками), как в моем .emacs файле:

;; Enable EDE mode
(global-ede-mode 1)
;; EDE knows nothing of my project type, so use CSCope to inform it of the project
;; and its files
(setq ede-locate-setup-options
    '(ede-locate-cscope
      ede-locate-base))
;; This is probably a dubious shortcut allocation, 
;; but it's what I'm using at the mo.
(global-set-key (kbd "C-f") 'ede-find-file)
;; Set up the project for EDE
(ede-cpp-root-project "LargeApp" :file "/workspace/me/LargeApp/SConstruct")

M-x ede-find-file раньше вообще не работал, потому что EDE ничего не знала о файлах в каталоге и подкаталогах проекта. Настройка файлов в проекте EDE заняла бы много времени (более 10000 файлов), но, к счастью, EDE понимает вывод CSCope, поэтому нужно было сделать это в корневом каталоге моего проекта с помощью небольшого сценария bash (на основе информации ссылка на главную страницу проекта CScope):

   #! /usr/bin/env bash

   cd /workspace/me/LargeApp
   find /workspace/me/LargeApp \
        -type d -name '.git*' -prune -o \
        -type d -name '.svn*' -prune -o \
        -type d -name 'build' -prune -o \
        -type d -name 'bin' -prune -o \
        -type d -name 'lib' -prune -o \
        -name '*.h' -print -o \
        -name '*.hpp' -print -o \
        -name '*.c' -print -o \
        -name '*.cpp' -print -o \
        -name '*.cc' -print -o \
        -name '*.py' -print -o \
        -name '*.lua' -print -o \
        -name '*.xml' -print >./cscope.files
    cscope -b -q -k

Затем EDE выбирает cscope.out в корневой папке проекта, и kazam !, M-x ede-find-file работает.

Однако есть одна серьезная проблема, которую я пытаюсь решить:

Мне нужно ввести полное имя файла с учетом регистра.

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


person Rob    schedule 30.05.2014    source источник
comment
Вы знаете о снаряде? github.com/bbatsov/projectile Он также основан на GNU find для интерактивного поиска файлов в вашем проекте ( определяется VCS или снарядом). Мне тоже нравится helm-projectile. Я не понимаю преимуществ использования EDE (чего я не знаю) и cscope для поиска файлов.   -  person Ehvince    schedule 30.05.2014
comment
@Ehvince - Я слышал о снаряде и шлеме, но еще не успел их опробовать. Спасибо за советы!   -  person Rob    schedule 30.05.2014


Ответы (1)


Вместо этого я прибег к использованию M-x cscope-find-this-file. Он заставляет меня выбирать из возможных вариантов пути к файлу в буфере, но он делает разумную работу по быстрому получению нужного файла и не ограничивается чувствительностью к регистру. Если я смогу подключить это к IDO, тогда он должен делать именно то, что я хочу.

Для Python CScope / xcscope.el хорош, но не идеален для навигации по тегам Python. Итак, я начал использовать Elpy. M-x elpy-goto-definition очень хорошо работает с файлами Python, а для остальных (C / C ++) я использую M-x cscope-find-this-symbol.

person Rob    schedule 06.06.2014