Emacs, как автоматически заполнить слова включаемых файлов на C? - PullRequest
4 голосов
/ 04 октября 2009

Как я могу сделать Emacs, чтобы завершить слова, которые находятся в C, включают файлы?

#include <stdio.h>
int main(){
print//<-- this is where I want it to complete printf

Какой самый простой способ? (что-то проще, чем Cedet )

Ответы [ 4 ]

4 голосов
/ 04 октября 2009

В отличие от complete-tag, dabbrev-expand или hippie-expand (которое выполняет dabbrev-expand как вещи), пакет CEDET делает именно то, что описывает вопрос. Когда его просят выполнить завершение, он смотрит и видит, что вы включили stdio.h, а затем ищет возможные дополнения.

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

Подробнее об этом здесь: текст ссылки

4 голосов
/ 04 октября 2009

Сначала сгенерируйте теги для источника и включите файлы, для которых вы хотели бы иметь возможность автозаполнения. См. Мой блог с советами по использованию тегов , если вы ранее не использовали таблицы тегов.

Теперь, если у вас есть таблица TAGS, которая включает в себя stdio.h, вы можете выполнить автозаполнение 'printf' с помощью команды `complete-tag '.

Возможно связать `complete-tag 'с ключом:

(global-set-key [f3] 'complete-tag) 
0 голосов
/ 04 октября 2009

Вы также можете попробовать hippie-expand, который имеет дополнительные опции, касающиеся поиска информации о завершении. Я связываю M- / с hippie-expand, а затем изменяю порядок элементов в hippie-expand-try-functions-list следующим образом:

(global-set-key (kbd "M-/") 'hippie-expand)
(setq hippie-expand-try-functions-list '(try-expand-dabbrev try-expand-dabbrev-all-buffers try-expand-dabbrev-from-kill try-complete-file-name-partially try-complete-file-name try-expand-all-abbrevs try-expand-list try-expand-line try-complete-lisp-symbol-partially try-complete-lisp-symbol))

Это заставляет hippie-expand действовать сначала как нормальный M- /, но повторные нажатия приведут к более возможным расширениям.

0 голосов
/ 04 октября 2009

Вы можете попробовать M- / (dabbrev-expand). Эта команда пытается завершить идентификатор, непосредственно предшествующий точке (т. Е. Там, где находится ваш курсор), используя содержимое текущего буфера, а затем содержимое других буферов того же режима. Если первое предложенное завершение не то, что вам нужно, просто продолжайте вводить M- /. Если у вас есть привычка постоянно открывать один сеанс Emacs (который, если у вас его нет, вы должны действительно его получить) и иметь несколько открытых файлов из текущего проекта, вы, скорее всего, сможете найдите расширение, которое вы хотите для любого конкретного префикса.

Итак, чтобы ответить на ваш оригинальный вопрос, M- / найдет нужное завершение printf, если (а) вы использовали printf где-либо еще в буфере, который вы редактируете, или (b) он появляется в любом другом файле .c или .h, который вы открыли в emacs.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...