Vim: ограничение методов, показанных omnicomplete, теми, которые присутствуют в ctags - PullRequest
5 голосов
/ 03 июня 2010

Я редактирую простой файл PHP с классом, который имеет несколько методов, если $bar является экземпляром этого класса, и я набираю

$bar-> * Ctrl 1006 * х 1010 * Ctrl * о

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

1 Ответ

1 голос
/ 04 июня 2010

Я уверен, что вы видели документацию VIM (:help ft-c-omni) для этого:

При использовании CTRL-X CTRL-O после имени без "." или "->" завершено из файла тегов напрямую. Это работает для любого идентификатора, а также функции имена. Если вы хотите заполнить имя локальной переменной, которая не отображается в файле тегов используйте вместо этого CTRL-P.

При использовании CTRL-X CTRL-O после того, что имеет "." или "->" Vim попытается распознать тип переменной и выяснить, какие члены у нее есть. Это означает, что будут перечислены только члены, допустимые для переменной.

Когда имя члена уже было завершено, CTRL-X CTRL-O добавит «.» или же «->» для составных типов.

Если я правильно прочитал, встроенная функциональность, в лучшем случае, позволит вам использовать только CTRL-P и сопоставлять имена локальных переменных, таким образом полностью обходя файл TAGS.

Что вам действительно нужно, так это файл TAGS, относящийся к единице перевода, над которой вы сейчас работаете (файл header / cpp). Вот шаги, которые я бы выполнил, если бы попытался решить эту проблему:

  1. Создайте сценарий (или, что еще лучше, включите в make-файл) автоматическое создание файлов TAG, специфичных для единицы перевода.
  2. Создайте команду в vim, которая выгружает существующие файлы TAGS, перезагружает файл TAGS для конкретного файла и выполняет регулярное CTRL-X CTRL-O omni-завершение. При необходимости вернитесь к исходным тегам.

Кроме того, мне кажется, что вы хотели бы иметь возможность вызывать сценарий для # 1 напрямую из VIM, поскольку вы часто меняете текущую единицу перевода при кодировании.

Я надеюсь, что это поможет вам начать в правильном направлении, и я был бы рад видеть / помочь вам с реализацией =).

...