Быстрый поиск файлов проекта с помощью Emacs EDE
Недавно я начал использовать EDE (через CEDET через ECB), пытаясь настроить Emacs в качестве разумной IDE для разработки в длинном проекте C/C++/Python.
Что-то, что было немного неудобно в настройке (так как я новичок в Emacs и Lisp), это быстрый поиск файлов. Решение, которое у меня есть на данный момент, состоит в том, чтобы создать исходный / пустой проект (для одного EDE не нужно знать, как управлять сборочными файлами или сборками), как в моем .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
в корневой папке проекта и казам!, M-x ede-find-file
работает.
Тем не менее, есть одна главная проблема, с которой я пытаюсь разобраться:
Мне нужно ввести полное, чувствительное к регистру имя файла.
Это менее чем идеально для проекта такого размера, потому что вы часто помните только часть имени файла, и это не всегда так. Было бы замечательно, если бы я мог настроить его, поэтому мне нужно было только ввести нечувствительную к регистру подстроку имени файла, а затем получить буфер IDO или аналогичный файл, по которому я могу переходить, пока не получу искомый файл.
1 ответ
Я прибег к использованию M-x cscope-find-this-file
вместо. Это вынуждает меня выбирать из возможных опций filepath в буфере, но делает разумную работу по быстрому получению нужного файла и не мешает чувствительности к регистру. Если я смогу подключить это к IDO, то оно должно делать именно то, что я хочу.
Для Python CScope/xcscope.el хорош, но не идеален для навигации по тегам Python. Итак, я начал использовать Elpy. M-x elpy-goto-definition
работает очень хорошо для файлов Python, а для остальных (C/C++) я использую M-x cscope-find-this-symbol
,