Има ли начин за синхронизиране на промените, направени в html файл само в някои области във Vim? (оставяйки останалите елементи непокътнати.)

Има ли начин за синхронизиране на промени направени в html файл само в някои области? оставяйки останалите елементи непокътнати.

Да кажем, че имам тези 2 файла:

hello-world-english.html:

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

hello-world-spanish.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
Защо имаш предвид Vim? Искате ли да направите това интерактивно? (След това просто използвайте 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, или списъкът се актуализират, и сте готови.

Или по-скоро не. Мисля, че проблемът вече е решен от някой с по-добър опит от мен. Google е ваш приятел ;).

person moatPylon    schedule 17.02.2010

Кратък отговор: Не.

По-дълъг отговор: наистина зависи от това какви промени правите във файла. Две възможности идват на ум:

1) направете промените в един файл и го пуснете през вашия diff за контрол на версиите (вие използвате контрол на версиите, нали?), за да получите файл с корекция. След това приложете файла с корекция към другия 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