Существует три реализации, которые можно рассмотреть:
Bash, встроенный getopts
. Это не поддерживает длинные имена опции с префиксом двойного тире. Это только поддерживает односимвольные опции.
реализация UNIX BSD автономных getopt
команда (который является тем, что MacOS использует). Это не поддерживает долгие опции также.
реализация GNU автономных getopt
. GNU getopt(3)
(используемый командной строкой getopt(1)
на Linux) поддержки, анализирующие долгие опции.
Некоторые другие ответы показывают решение для использования удара, встроенного getopts
для имитации долгих опций. То решение на самом деле делает короткую опцию, символ которой "-". Таким образом, Вы добираетесь "-" как флаг. Затем что-либо после этого становится OPTARG, и Вы тестируете OPTARG с вложенным case
.
Это умно, но это идет с протестами:
getopts
не может осуществить выбирать спецификацию. Это не может возвратить ошибки, если пользователь предоставляет недопустимую опцию. Необходимо сделать собственную проверку ошибок, поскольку Вы анализируете OPTARG. Поэтому, в то время как возможно написать больше кода для работы вокруг отсутствия поддержки долгих опций, это - намного больше работы и частично побеждает цель использовать getopt синтаксический анализатор для упрощения кода.
CEDET просто великолепен, определенно нужно время в начале, но оно того стоит.
Я обычно использую etags.
Для интеграции с emacs: http://www.gnu.org/software/emacs/emacs-lisp-intro/html_node/etags.html
О том, как запускать etags. http://www.delorie.com/gnu/docs/emacs/etags.1.html
В качестве бонуса, это сообщение в блоге описывает немного больше настроек emacs и того, как использовать etags. http://tulrich.com/geekstuff/emacs.html
Изменить: Чтобы ответить на комментарий, после запуска etags по вашему коду вы можете завершить слова с помощью Cx t (это то, к чему он привязан на моей машине). Или вы можете вызвать метод tag-search .
Когда я редактирую код Python в Emacs, мне нравится использовать pysmell для завершения кода:
Я считаю, что умение быстро печатать (и приличная память) каждый раз превосходит автоматическое завершение. Как далеко мы должны зайти, чтобы попытаться упростить программирование?
Вы можете попробовать корпоративный режим . Это механизм завершения в буфере с несколькими серверными модулями.
Посмотрите скринкаст , чтобы получить представление о том, как это работает.
Некоторые из вспомогательных компонентов:
И это также доступно через ELPA .
честно говоря, мне нравится старый добрый dabbrev-expand (M- /), да, он не использует никакой контекстной информации, кроме того, какие символы находятся рядом в открытых буферах, но с положительной стороны он не использует любая контекстная информация;) это означает, что вы можете заполнить текст, который вы написали первым в тестах или комментариях.
для других вариантов http://www.emacswiki.org/emacs/CategoryCompletion
От автора Режим автозавершения . Он использует gcc для поиска кандидатов на завершение кода, как следует из названия.