Есть ли способ синхронизации изменений, сделанных в html-файле, только в некоторых областях Vim? (оставляя остальные элементы нетронутыми).

Есть ли способ синхронизировать изменения, сделанные в html-файле, только в некоторых областях? оставляя остальные элементы нетронутыми.

Допустим, у меня есть эти 2 файла:

привет-мир-english.html:

<div>
<p>Hello World</p>
</div>

привет-мир-испанский.html:

<div>
<p>Hola Mundo</p>
</div>

И я вношу следующее изменение в первый (hello-world-english.html):

<div id=new-div">

<div>

<h2 id="new-header-2">
</h2>

<p>Hello World</p>
</div>

<div>

Затем я хочу, чтобы второй синхронизировал изменения, но оставил нетронутым то, что находится внутри <p> tag:

<div id=new-div">

<div>

<h2 id="new-header-2">
</h2>

<p>Hola Mundo</p>
</div>

<div>

P S:

Я использую Vim!


person alexchenco    schedule 17.02.2010    source источник
comment
Почему вы говорите о Виме? Вы хотите сделать это интерактивно? (Тогда просто используйте vimdiff и игнорируйте разделы, которые вы не хотите синхронизировать.) Вопрос звучит так, как будто вы предпочитаете скриптовое решение. Но тогда почему предлагаемое ограничение командным языком vim или любого другого редактора?   -  person dubiousjim    schedule 17.02.2010


Ответы (3)


Вы можете использовать <iframe> для разделения того, что вы хотите синхронизировать в разных файлах, например:

hello-world.html:
<div id="new-div">
<div>
<h2 id="new-header-2">
</h2>
</div>
</div>

'

hello-world-english.html:
<iframe src="hello-world.html"></iframe>
<p>Hello World</p>

'

hello-world-spanish.html:
<iframe src="hello-world.html"></iframe>
<p>Hola Mundo</p>

Но это будет проблемой, если вы хотите, чтобы неизмененные данные находились, например, внутри одного из этих <div>. В качестве альтернативы вы можете написать генератор, который будет принимать два файла: hello-world.html и список частей, которые вы хотите разделить. Хитрость здесь заключается в том, чтобы использовать специальный маркер, такой как @ (или любой другой редко используемый символ), и заменить его одним из элементов в списке, что было бы довольно тривиально. Просто создайте заново, когда hello-world.html или список обновятся, и все готово.

Или, скорее, нет. Я думаю, что проблема уже решена кем-то с большим опытом, чем у меня. Гугл тебе друг ;).

person moatPylon    schedule 17.02.2010

Короткий ответ: Нет.

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

1) внесите изменения в один файл и запустите его через свой контроль версий (вы используете контроль версий, не так ли?), чтобы получить файл исправления. Затем примените файл исправления к другому файлу HTML.

2) напишите сценарий vim с рядом команд редактирования, которые вносят нужные вам изменения, а затем откройте каждый файл в vim и :source сценарий.

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

Лучший ответ: поддерживать две версии html-файла с разными языками — очень плохая идея, и они не будут масштабироваться (а что, если вы захотите добавить третий язык? Четвертый? Десятый?). Я предлагаю иметь файл шаблона с заполнителями для всего видимого пользователем текста и скрипт (на Python, Ruby или любом другом языке, который вам удобен), который заменяет заполнители текстом из таблицы преобразования для конкретного языка. Затем добавление нового языка — это просто вопрос написания новой таблицы преобразования, и вы можете вносить любые изменения в шаблон и перегенерировать HTML для каждого языка.

person Dave Kirby    schedule 17.02.2010

:h diff

Попросите vim отобразить различия между двумя файлами и используйте dp и do для обновления той части, которую вы хотите.

person Luc Hermitte    schedule 17.02.2010