Обход XSD в VIM - PullRequest
       9

Обход XSD в VIM

6 голосов
/ 14 июня 2010

Я использую VIM в качестве текстового редактора и редактирую множество файлов XML и WSDL.

Файлы WSDL имеют раздел XSD. Есть ли какой-нибудь плагин VIM, который я могу использовать для прохождения типов XSD? то есть, если у меня есть следующая строка и каретка находится где '|' знак:

<xsd:element minOccurs="0" name="FooName" type="Magic|FooType"/>

и я нажимаю Ctrl + Alt + Foo (или какую-то другую магическую комбинацию), чтобы получить определение MagicFooType, т.е.

<xsd:complexType name="MagicFooType">

Я не мог найти, как использовать ctags для этого и все другие плагины, которые я мог найти, для императивных языков (то есть Java). Есть ли какой-нибудь плагин / скрипт для работы?

Ответы [ 3 ]

3 голосов
/ 20 мая 2015

Это сравнительно легко сделать с помощью ctags. Я использую Vim исключительно для редактирования XSD и в сочетании с обильными ctags (http://ctags.sourceforge.net/), для меня это очень хорошо работает.

Поскольку exuberant ctags не поддерживает XSD "из коробки", вам нужно создать собственное определение языка.

Я использую файл ниже как .ctags в моем проекте XSD. После запуска команды ctags в корне проекта я могу использовать стандартную навигацию по тегам VIM (Ctrl-[ для отслеживания и Ctrl-O для возврата) для перехода к определениям.

Чтобы заставить vim собирать файлы тегов в родительских каталогах, я использую следующий фрагмент в моем .vimrc

set tags=./tags;

Поместите это в .ctags в корне вашего проекта.

--langdef=XSD
--langmap=XSD:+.xsd
--langmap=XSD:+.wsdl
--regex-XSD=/element name="([a-zA-Z0-9_]+:){0,1}([a-zA-Z0 -9_]+)"/\2/d,definition/
--regex-XSD=/Type [a-zA-Z0-9="]*[ ]{0,1}name="([a-z_]+:){0,1}([a-zA-Z0-9_]+)"/\2/d,definition/
--exclude=.git
--recurse=yes
2 голосов
/ 17 июня 2010

Я немного смотрел эту ветку и сам удивлялся, так как я являюсь пользователем VIM и работаю с большим количеством очень больших файлов XML и связанных файлов XSD, XSLT и XQuery, каждый из которых может извлечь пользу из этого вещь, как я уверен, вы можете себе представить.

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

{tagname}<tab>{tagfile}<tab>{tagaddress}

Поскольку тег-адрес является командой ex mode, он может привести вас в любое место в определенном файле, чтобы получить право на определение.

По сути, все, что нам нужно сделать, - это создать скрипт, который будет работать через WSDL (или XSD, или что-то еще) и, зная расположение тега и файла, создать соответствующие строки в файле ctags для отображения всех определения. Звучит как забавный и полезный маленький проект.

Извините, что это не совсем полный ответ, но это возможно сделать с помощью ctags и даст вам надежность, которую вы ищете.

2 голосов
/ 15 июня 2010

gd («перейти к объявлению») не знает о формате XML, но может выполнить эту работу в этом случае, предполагая, что раздел XSD находится в верхней части WSDL.

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