Разные окна в vim - PullRequest
       19

Разные окна в vim

5 голосов
/ 25 апреля 2011

Я работаю над сценарием, который стал довольно запутанным. Я подозреваю, что есть несколько разделов, которые имеют почти идентичный код. Могу ли я (и как я могу) открыть файл в vim с двумя (или более) окнами в буфере и разнести содержимое окон в одном и том же файле? vimdiff работает только с двумя файлами. Если я сделаю копию файла и попробую vimdiff двух версий, источник начала различий останется заблокированным в начале файла. Хотя я могу отменить прокрутку-блокировку окон и переместить окна в те части файла, которые я хочу сравнить, различия не отображаются. Любые советы или подсказки? Я мог бы вырезать и вставлять разделы, которые я хочу сравнить, в разные файлы, а затем применять vimdiff, но тогда я рискую потеряться в том, из какого раздела возникла ошибка, когда я пытаюсь соединить отдельные файлы вместе, и я уверен, что должно быть более простое , более простой способ.

Ответы [ 2 ]

2 голосов
/ 25 апреля 2011

То, что я обычно делаю, это diff к копии

:%w %.alt
:vert diffsplit %.alt

И затем счастливо изменить версию 'alt' так, чтобы псевдосогласованные биты были выровнены.


Обратите внимание, что (по-видимому) git содержит корректные слияния / слияния коров, которые должны быть в состоянии обнаружить изменения перемещенных блоков подфайла .

Хотя я (пока) на самом деле не применял это на практике, у меня есть предположение, что очень хороший плагин git fugitive для vim может использовать некоторые из этих лошадиных сил, чтобы упростить это. Примечание: полностью ожидайте, что для этого потребуется scriptinh, прежде чем его можно будет использовать , но я все же подумал, что было бы неплохо поделиться этой идеей (возможно, вы можете поделиться сценарием, если сначала дойдете до него!)

1 голос
/ 24 апреля 2012

В качестве альтернативного решения, которое я иногда использовал и которое, на мой взгляд, работает очень хорошо, это linediff.vim .

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

Один из моих сценариев использования - это решение проблем слияния, связанных ссоставить сценарий рефакторинга и переупорядочения, когда функция была перемещена и, возможно, также изменена.Чтобы убедиться, что вы не потеряете ни одну из модификаций, поступающих от какого-либо предка, вам нужно изменить две версии одной функции, визуально выбрав их и выполнив команду linediff.

...