Как автоматически обновить файл тега в энергии?

Одна книга, еще не предложенная но очень важная, "Компоновщики и Загрузчики" John Levine. Если Вы не будете использовать внешний ассемблер, Вам будет нужен способ произвести объектный файл, который может быть связан в Вашу заключительную программу. Даже при использовании внешнего ассемблера необходимо будет, вероятно, понять перемещения и как целый процесс загрузки программы работает для создания рабочего инструмента. Эта книга собирает много случайных сведений вокруг этого процесса для различных систем, включая Win32 и Linux.

35
задан Canopus 21 July 2009 в 05:13
поделиться

3 ответа

В дополнение к ответу Бликстора вам нужно немного хорошенько подумать о дизайне скрипта. Я бы рекомендовал разделить дизайн таким образом, чтобы автокоманда использовала команду Windows «start» или что-то подобное для запуска внешнего сценария в фоновом режиме : таким образом предотвращая перерыв в работе Vim во время создания файла тега.

Этот сценарий может затем сгенерировать файл тегов, используя другое имя файла (то есть не «теги»: ctags -R -o newtags. ) и, когда ctags завершен, удалить тегов и переименуйте newtags в tags . Это предотвратит то, что файл тегов будет недоступен в Vim во время генерации.

26
ответ дан 27 November 2019 в 06:56
поделиться

Идея:

Используйте автокоманды Vim (: help autocommand), чтобы запускать скрипт каждый раз, когда буфер сохраняется с помощью события BufWritePost.

Этот скрипт запускает генерацию ctags и содержит некоторую дополнительную небольшую логику, чтобы не запускаться, пока он уже запущен (или запускаться не чаще, чем каждые 10 минут и т. д.).

Изменить:

Здесь заранее запрашивалось нечто подобное, см. Vim auto-generate ctags

9
ответ дан 27 November 2019 в 06:56
поделиться

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


function! GenerateTagsFile()
  if (!filereadable("tags"))
    exec ":!start /min ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --sort=foldcase ."
  endif
endfunction

" Always change to directory of the buffer currently in focus.
autocmd! bufenter *.* :cd %:p:h
autocmd! bufread  *.* :cd %:p:h

" Generate tags on opening an existing file.
autocmd! bufreadpost *.cpp :call GenerateTagsFile()
autocmd! bufreadpost *.c   :call GenerateTagsFile()
autocmd! bufreadpost *.h   :call GenerateTagsFile()

" Generate tags on save. Note that this regenerates tags for all files in current folder.
autocmd! bufwritepost *.cpp :call GenerateTagsFile()
autocmd! bufwritepost *.c   :call GenerateTagsFile()
autocmd! bufwritepost *.h   :call GenerateTagsFile()
1
ответ дан 27 November 2019 в 06:56
поделиться
Другие вопросы по тегам:

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