Emacs кодируют завершение для C/C++? [закрытый]

Существует три реализации, которые можно рассмотреть:

  • Bash, встроенный getopts. Это не поддерживает длинные имена опции с префиксом двойного тире. Это только поддерживает односимвольные опции.

  • реализация UNIX BSD автономных getopt команда (который является тем, что MacOS использует). Это не поддерживает долгие опции также.

  • реализация GNU автономных getopt. GNU getopt(3) (используемый командной строкой getopt(1) на Linux) поддержки, анализирующие долгие опции.

Некоторые другие ответы показывают решение для использования удара, встроенного getopts для имитации долгих опций. То решение на самом деле делает короткую опцию, символ которой "-". Таким образом, Вы добираетесь "-" как флаг. Затем что-либо после этого становится OPTARG, и Вы тестируете OPTARG с вложенным case.

Это умно, но это идет с протестами:

  • getopts не может осуществить выбирать спецификацию. Это не может возвратить ошибки, если пользователь предоставляет недопустимую опцию. Необходимо сделать собственную проверку ошибок, поскольку Вы анализируете OPTARG.
  • OPTARG используется для длинного имени опции, которое усложняет использование, когда Ваша долгая опция сама имеет аргумент. Вы заканчиваете тем, что имели необходимость кодировать это сами как дополнительный случай.

Поэтому, в то время как возможно написать больше кода для работы вокруг отсутствия поддержки долгих опций, это - намного больше работы и частично побеждает цель использовать getopt синтаксический анализатор для упрощения кода.

25
задан StackedCrooked 1 December 2011 в 03:29
поделиться

7 ответов

CEDET просто великолепен, определенно нужно время в начале, но оно того стоит.

2
ответ дан 28 November 2019 в 21:58
поделиться

Я обычно использую 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 .

1
ответ дан 28 November 2019 в 21:58
поделиться

Когда я редактирую код Python в Emacs, мне нравится использовать pysmell для завершения кода:

http://code.google.com/p/pysmell/

-4
ответ дан 28 November 2019 в 21:58
поделиться

Я считаю, что умение быстро печатать (и приличная память) каждый раз превосходит автоматическое завершение. Как далеко мы должны зайти, чтобы попытаться упростить программирование?

-9
ответ дан 28 November 2019 в 21:58
поделиться

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

Некоторые из вспомогательных компонентов:

И это также доступно через ELPA .

9
ответ дан 28 November 2019 в 21:58
поделиться

честно говоря, мне нравится старый добрый dabbrev-expand (M- /), да, он не использует никакой контекстной информации, кроме того, какие символы находятся рядом в открытых буферах, но с положительной стороны он не использует любая контекстная информация;) это означает, что вы можете заполнить текст, который вы написали первым в тестах или комментариях.

для других вариантов http://www.emacswiki.org/emacs/CategoryCompletion

0
ответ дан 28 November 2019 в 21:58
поделиться

GCCSense

От автора Режим автозавершения . Он использует gcc для поиска кандидатов на завершение кода, как следует из названия.

emacs gccsense screenshot

7
ответ дан 28 November 2019 в 21:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: