Я знаю, что это пограничный случай, действительно ли он принадлежит stackoverflow или суперпользователю, но, поскольку кажется, что здесь довольно много вопросов о «редактировании кода», я публикую его на SO.
У меня есть куча файлов XML, которые кто-то в своей бесконечной мудрости решил разбить на несколько файлов, используя теги, что в результате делает их отладку/редактирование огромным P-i-t-A. Поэтому я ищу:
- Способ в VIM открывать их в одном буфере (желательно, чтобы изменения сохранялись в правильных внешних файлах сущностей), ИЛИ;
- Способ расширения файлов в VIM, чтобы внешние сущности считывались и заменялись в буфере, ИЛИ;
- простой способ bash/sed/python сделать это в командной строке (или в .vimrc)
Файлы, включенные на верхнем уровне, могут включать новые файлы и т. д., кто знает, на скольких уровнях это должно быть рекурсивно...
Вот пример макета того, как выглядит файл верхнего уровня:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foobar PUBLIC "foobar:dtd" "foobar.dtd" [
<!ENTITY foo SYSTEM "foo.xml">
<!ENTITY bar SYSTEM "bar.xml">
]>
<foo>
<params>
&foo;
</params>
<bar>
&bar;
</bar>
</foo>
РЕДАКТИРОВАТЬ: список расположен в порядке предпочтения - если нет доступных решений 1. или 2., награда достается лучшему #3...
EDIT 2: похоже, что ответ @Gaby работает, но, к сожалению, только частично, если я не делаю что-то не так - я напишу какой-нибудь инструмент, используя его ответ, и опубликую его здесь для улучшений. Конечно, решение №1 или №2 будет оценено... :)
РЕДАКТИРОВАТЬ 3: Хорошо, лучший не-Emacs-ответ получит награду;)
Заключение. Благодаря @hcayless у меня теперь есть работающее решение №2. Я добавил:
autocmd BufReadPost,FileReadPost *.xml silent %!xmllint --noent - 2> /dev/null
к моему .vimrc
и все в порядке.