ComparePlus#
Podstawowe informacje#
- Wersja: 1.0.0
- Architektura: 32-bit i 64-bit
- Źródło: GitHub
- Autor: Ty Landercasper (oryginał), Jean-Sebastien Leroy (fork), Pavel Nedev (aktualny fork)
- Przeznaczenie: Wprowadza mechanizm porównywania dwóch różnych plików, zaznaczeń z dwóch różnych plików, aktualnego stanu pliku względem jego ostatniego zapisu oraz aktualnego stanu pliku względem jego ostatniego dodania do repozytorium Git lub SVN.
Dodatkowe materiały:
- Plugin Central (info z webarchive)
- Help.md (aktualny fork)
- jsleroy (fork) - brak rozwoju
- ufo-pu55y (fork) - brak rozwoju
- Ty Landercasper (oryginał) - brak rozwoju
Instalacja#
Proces instalacji wtyczki przebiega w sposób standardowy. Finalnie na całą wtyczkę składają się następujące pliki i foldery:
NPP\plugins\ComparePlus\ComparePlus.dll
NPP\plugins\ComparePlus\ComparePlus\git2.dll
NPP\plugins\ComparePlus\ComparePlusz\sqlite3.dll
NPP\plugins\Config\ComparePlus.ini
- pojawia się po pierwszym zatwierdzeniu okna z ustawieniami wtyczki.
Instalowanie wtyczki poprzez okno Zarządzanie wtyczkami pobiera ostatnią stabilną wersję Compare 2.0.1. Najnowsze wersje wtyczki (jeszcze nieoficjalne) można dograć ręcznie. Różnice między obiema wtyczkami są znaczące: nowa nazwa "ComparePlus" vs "Compare", przebudowane okno opcji, więcej poleceń w menu wtyczki czy inteligentniejsze wyszukiwanie różnic, dlatego też dalsze opisy będą dotyczyły tylko najnowszych wersji ComparePlus.
Menu wtyczki#
U góry na Pasku menu plugin tworzy następujące menu wtyczki:
Rysunek. ComparePlus - menu wtyczki w domyślnym stanie
Opis#
Wtyczka wprowadza do programu Notepad++ mechanizm porównywania pewnych danych tekstowych obok siebie. Na chwilę obecną dostępnych jest kilka wariantów porównawczych #, które ze względu na sposób działania można podzielić na dwie grupy:
- Pełne (główne) warianty porównawcze #
- Uproszczone (dodatkowe) warianty porównawcze #
- Dwa dodatkowe porównania ze specyficznym zachowaniem (szczegóły).
Niezależnie od wybranego wariantu wszystkie porównania odbywają się na tej samej zasadzie, tj. przywoływany jest tryb podwójnego widoku (automatycznie lub ręcznie), po czym następuje wyszukanie różnic między danymi tekstowymi z dwóch różnych kart w obu widokach.
Rysunek. ComparePlus - przykładowy wyniki porównania dwóch różnych plików przy domyślnych ustawieniach i z włączonym panelem ComparePlus NavBar
Istnieje także szereg wspólnych reguł ulokowanych w menu wtyczki, które można włączyć na stałe lub wywoływać na żądanie, i mają one zastosowanie dla wszystkich wariantów porównawczych.
Podstawowe informacje na temat wtyczki można znaleźć w oknie przywoływanym za pomocą polecenia Help / About...
z menu wtyczki.
Proces porównywania#
Działanie wtyczki sprowadza się do porównywania między sobą danych tekstowych z dwóch różnych kart ulokowanych w dwóch różnych widokach, gdzie w pierwszym widoku (lewym/górnym) zwykle znajduje się starsza wersja danych #, a w drugim widoku (prawym/dolnym) nowsza wersja danych #. Lokalizację nowszej wersji danych (i w konsekwencji także starszej wersji danych) w konkretnym widoku można zmienić. Wtyczka zakłada, że nowsza wersja danych jest ważniejsza niż starsza wersja danych, i uważa ją za bardziej reprezentatywną.
Każdy wariant porównawczy używa tego samego algorytmu różnicującego, który jest nakierunkowany na wyszukiwanie różnić między porównywanymi danymi w bardziej inteligenty sposób, niż ma to miejsce w klasycznym bajtowym porównywaniu stosownym choćby we wtyczce HexEditor. Można kontrolować pewne zachowania tego algorytmu za pośrednictwem wspólnych reguł lub okna ComparePlus Settings.
Rysunek. ComparePlus - przykładowy wyniki porównania dwóch różnych plików przy domyślnych ustawieniach
Markery różnicujące#
Po wykonaniu jakiegoś wariantu porównawczego wszystkie odnalezione różnice oznaczane są bezpośrednio w Obszarze edycji osobnymi kolorami tła (można zmienić) i dodatkowymi symbolami umieszczanymi na pionowej belce z numerami wierszy. Obecnie można wymienić następujące markery różnicujące #:
- Tło dla dodanej linii, domyślnie
13041606/C6FFC6/(198, 255, 198)
, i dodatkowo symbol . Występuje tylko i wyłącznie w nowszej wersji danych. # - Tło dla usuniętej linii, domyślnie
13027071/FFC6C6/(255, 198, 198)
, i dodatkowo symbol . Występuje tylko i wyłącznie w starszej wersji danych. # - Tło dla przesuniętej linii, domyślnie
16770764/CCE6FF/(204, 230, 255)
, i dodatkowo symbol . Występuje w starszej wersji danych oraz nowszej wersji danych pod warunkiem, że opcjaDetect Moves
została włączona. # - Tło dla zmienionej linii, domyślnie
10020839/E7E798/(231, 231, 152)
, i dodatkowo symbol . Występuje w starszej wersji danych oraz nowszej wersji danych. # - Tło dla dodanego tekstu w linii, domyślnie
427007/FF8306/(255, 131, 6)
. Występuje tylko i wyłącznie w nowszej wersji danych. # - Tło dla usuniętego tekstu w linii, domyślnie
427007/FF8306/(255, 131, 6)
. Występuje tylko i wyłącznie w starszej wersji danych. #
Dwa ostatnie, tj. marker dodanego tekstu w linii i marker usuniętego tekstu w linii występują bezpośrednio w markerze zmienionej linii.
Uproszczone porównania#
Każdy z głównych wariantów porównawczych używa wszystkich markerów różnicujących. W menu wtyczki istnieją jednak dwa dodatkowe polecenia wykonujące uproszczone porównanie #, które w odnalezionych różnicach używają jedynie markera dodanej linii i markera usuniętej linii:
Find Unique Lines
# (domyślny skrótCtrl+Alt+Shift+C
) - wywołane na karcie, która nie została porównana z inną kartą stanowi uproszczoną wersję porównania dwóch różnych plików. Oba warianty działają w dwie strony, tj. mając wykonane pełne porównanie dwóch różnych plików można wywołać na nim uproszczoną wersję (i odwrotnie).Find Unique Lines in Selection
# (domyślny skrótCtrl+Alt+Shift+N
) - wywołane na karcie, która nie została porównana z inną kartą stanowi uproszczoną wersję porównania zaznaczeń z dwóch różnych plików. Oba warianty działają w dwie strony, tj. mając wykonane pełne porównanie zaznaczeń z dwóch różnych plików można wywołać na nim uproszczoną wersję (i odwrotnie).
Rysunek. ComparePlus - pełny wyniki porównania (u góry) i uproszczony (na dole) dwóch różnych plików przy domyślnych ustawieniach
Istotne jest to, że oba powyższe polecenia mogą stanowić nakładki dla dwóch pozostałych głównych wariantów porównawczych, czyli dla porównania tego samego pliku oraz porównania tego samego pliku z repozytorium Git lub SVN, z tą jednak różnicą, że działanie w drugą stronę, czyli ponowne wywołanie tych głównych wariantów na uproszczonych wynikach, nie jest możliwe.
Powyższe reguły mogą wydawać się zawiłe dlatego najwygodniej wykonywać jeden konkretny wariant porównawczy (pełny lub uproszczony) bez wykonywania nakładek na już istniejące porównania, no chyba że nie ma innej możliwości uzyskania uproszczonego wariantu, jak w przypadku porównania tego samego pliku lub porównania tego samego pliku z repozytorium Git lub SVN.
Wiele współistniejących porównań#
Wywołanie jednego z wariantów porównawczych powoduje, że obie porównywane karty z dwóch różnych widoków zostaną ze sobą sparowane #, a to z kolei oznacza, że nie mogą one uczestniczyć w kolejnych porównaniach z innymi kartami, o czym zostaniemy poinformowaniu stosownym komunikatem.
Sparowanie ze sobą dwóch porównywanych kart wprowadza kilka interesujących zachowań:
- Przełączenie się na jakąś kartę w jednym z widoków powoduje automatyczne wybranie sparowanej z nią karty w drugim widoku.
- Obie sparowane karty mają trwale włączoną synchronizację przewijania w pionie i poziomie. W żaden sposób nie można wyłączyć tego zachowania, np. poprzez ustawienia wtyczki czy poleceniami/przyciskami samego NPP (są wyszarzone).
W danej chwili może istnieć wiele sparowanych ze sobą kart, co oznacza, że wielokrotne wywołanie jednego z wariantów porównawczych jest dopuszczalne. Istotne jest to, aby nie próbować porównywać kart, które są już porównane/sparowane z innymi kartami. Sparowaną parę kart najprościej rozpoznać po dodatkowych opisach zwracanych z lewej strony na Pasku stanu lub po aktywnym stanie przycisku szybkiego dostępu Clear Active Compare
.
Rysunek. ComparePlus - przykładowy wyniki porównania dwóch różnych plików umieszczany z lewej strony Paska stanu
W przypadku porównania tego samego pliku i porównania tego samego pliku z repozytorium Git lub SVN w tytule jednej z kart (po jego prawej stronie) pojawi się dodatkowy dopisek Last Save/Git/SVN
, co także powinno ułatwić rozpoznanie sparowanych ze sobą kart.
Karta sparowana z jakąś kartą może zostać porównana z inną kartą pod warunkiem, że porównanie zostanie anulowane stosownym poleceniem (wybiórczo lub grupowo). Ręczne zamknięcie jednej ze sparowanych kart także powoduje anulowanie porównania i odblokowuje możliwość ponownego porównania dla drugiej karty z tej pary.
Ogólnie rzecz biorąc radziłbym unikać wielu współistniejących porównań, bo wraz z ich wzrostem zwiększa się ryzyko zepsucia jakiejś funkcji wtyczki lub całkowitego jej wysypania. Zawsze najpewniejsza będzie sytuacja, kiedy będziemy starali się utrzymywać tylko jedno porównanie w danej chwili.
Wykonywanie nowych porównań na już istniejących#
Można na już istniejących porównaniach wykonywać inne porównania, ale trzeba to robić w odpowiedni sposób. Najważniejsze jest to, aby w obu widokach wybierać te karty, które zostały ze sobą porównane (tj. obecnie są sparowane). Cała reszta jest zależna od tego, jakie nowe porównanie wywołujemy na już istniejącym porównaniu, i w zależności od tego pierwszego porównania mamy następujące możliwości:
- Dla porównania dwóch różnych plików i uproszczonego porównania dwóch różnych plików można wykonać: porównanie dwóch różnych plików, uproszczone porównanie dwóch różnych plików, porównanie zaznaczeń z dwóch różnych plików i uproszczone porównanie zaznaczeń z dwóch różnych plików.
- Dla porównania zaznaczeń z dwóch różnych plików i uproszczonego porównania zaznaczeń z dwóch różnych plików można wykonać: porównanie zaznaczeń z dwóch różnych plików, uproszczone porównanie zaznaczeń z dwóch różnych plików, porównanie dwóch różnych plików i uproszczone porównanie dwóch różnych plików.
- Dla porównania tego samego pliku można wykonać: porównanie dwóch różnych plików, uproszczone porównanie dwóch różnych plików, porównanie zaznaczeń z dwóch różnych plików i uproszczone porównanie zaznaczeń z dwóch różnych plików.
- Dla porównania tego samego pliku z repozytorium Git lub SVN można wykonać: porównanie dwóch różnych plików, uproszczone porównanie dwóch różnych plików, porównanie zaznaczeń z dwóch różnych plików i uproszczone porównanie zaznaczeń z dwóch różnych plików.
Nakładanie nowych porównań na już istniejące porównania jest o tyle wygodne, że jeszcze przed ich wywołaniem mamy od razu rozlokowane dwie karty w osobnych widokach i nie ma potrzeby ręcznego ich przenoszenia.
Trzeba wyraźnie zaznaczyć, że wywołanie poleceń czyszczących (dla aktywnego porównania lub wszystkich porównań) powoduje, że część kroków z anulowania porównania odnosi się także do pierwszego (najstarszego) porównania wykonanego na sparowanych kartach, co oznacza, że może nastąpić przywrócenie oryginalnego położenia obu porównywanych ze sobą kart lub zamknięcie jednej z nich (jeśli była tymczasowa).
Anulowanie porównań i statusu pierwszeństwa karty#
Po wykonaniu jednego z wariantów porównawczych ewentualne sparowane ze sobą karty będące wynikiem tych porównań można anulować poprzez:
Anulowanie aktywnego porównania # - odbywa się na skutek wywołania z menu wtyczki polecenia
Clear Active Compare
(domyślny skrótCtrl+Alt+X
) lub przy użyciu przycisku szybkiego dostępuClear Active Compare
. Czynność ta anuluje porównanie między aktywną kartą a sparowaną z nią drugą kartą i dodatkowo zawsze usunie status pierwszeństwa z dowolnej karty, która taki status posiada.Obie możliwości będą dostępne jedynie w sytuacji, kiedy aktualnie wybrana karta jest sparowana z inną kartą lub kiedy dowolna karta posiada status pierwszeństwa. Bez spełnienia przynajmniej jednego z tych warunków obie możliwości są zawsze nieaktywne (wyszarzone).
Anulowanie wszystkich porównań # - odbywa się na skutek wywołania z menu wtyczki polecenia
Clear All Compares
. Czynność ta anuluje porównania między wszystkimi sparowanymi kartami i dodatkowo zawsze usunie status pierwszeństwa z dowolnej karty, która taki status posiada.Polecenie będzie dostępne jedynie w sytuacji, kiedy istnieje przynajmniej jedna lub więcej sparowanych kart lub kiedy dowolna karta posiada status pierwszeństwa. Bez spełnienia przynajmniej jednego z tych warunków polecenie jest zawsze nieaktywne (wyszarzone).
- Ręczne zamknięcie jednej ze sparowanych kart # - czynność ta również powoduje anulowanie porównania w drugiej karcie z tej samej pary, która wciąż pozostaje otwarta, aczkolwiek nie w każdych okolicznościach będzie to tak wygodne, jak wspomniane wyżej obie alternatywne możliwości (nie zawsze chcielibyśmy zamykać którąkolwiek z kart).
Samo anulowanie porównania # między obiema sparowanymi ze sobą kartami, niezależnie od sposobu jego wykonania, polega na:
- Usunięciu z Obszarów edycji w obu sparowanych ze sobą kartach wszystkich markerów różnicujących.
Samoczynnym przywróceniu oryginalnego położenia obu sparowanych ze sobą kart (sprzed wywołania porównania) w sytuacji, kiedy zmieniły one swoje położenie na skutek wywołania jednego z wariantów porównawczych. Cecha ta jest niezwykle użyteczna w przypadku porównań wykonanych na kartach pochodzących z tego samego widoku, gdzie jedna z nich musi wylądować w widoku przeciwnym. Trafiają się też takie sytuacje, gdzie obie porównywane ze sobą karty potrafią zmienić swoje pierwotne położenie. Dzięki samoczynnemu przywracaniu ich oryginalnego położenia nie musimy martwić się tym, że w raz z wykonaniem jakiegoś porównania zaburzony zostanie nasz aktualny układ kart na Pasku kart, gdyż po przeanalizowaniu wyników porównania wystarczy je anulować na jeden z wyżej wymienionych sposobów, a wszystko powróci na swoje właściwe miejsce.
- Samoczynnym zamknięciu tymczasowej karty ze sparowanej pary w sytuacji, kiedy została ona automatycznie otworzona w jednym z widoków na skutek wywołania porównania tego samego pliku lub porównania tego samego pliku z repozytorium Git lub SVN.
- Zerwaniu połączenia między obiema sparowanymi ze sobą kartami, co w praktyce oznacza, że obie te karty (jeśli wciąż otwarte) mogą ponownie uczestniczyć w jednym z wariantów porównawczych.
Warto poświęcić nieco czasu na przyswojenie powyższych reguł, a już na pewno w sytuacji, gdy notorycznie pracujemy na wielu pootwieranych plikach i część z tych plików musimy niejednokrotnie ze sobą porównywać.
Zużycie zasobów#
Im większe różnice między porównywanymi danymi tekstowymi tym większe wymagania dla całego procesu, zarówno pod względem czasowym jak i sprzętowym. Długa praca zostanie zasygnalizowana stosownym oknem z paskiem postępu, z poziomu którego możemy przerwać cały proces klikając na przycisku Cancel
.
Wydaje się, że w trakcie porównywania wtyczka rozkłada obciążenie na wszystkie dostępne rdzenie/wątki. Na mojej maszynie z Intel i7-2600K (4 rdzenie/8 wątków) obciążenie dla całego CPU dobija do 84%.
Rysunek. ComparePlus - okno Menedżer zadań Windows w trakcie porównywania dwóch dużych i znacznie różniących się od siebie plików
Porównanie dwóch różnych plików#
Podstawowa funkcja wtyczki, i z mojego punktu widzenia najczęściej wykorzystywana, która polega na porównywaniu całych danych tekstowych z dwóch różnych kart. W ujęciu praktycznym ten główny wariant porównawczy może obejmować porównywanie:
- dwóch zapisanych plików,
- dwóch niezapisanych plików,
- zapisanego i niezapisanego pliku,
- dwóch niezapisanych buforów.
W tym wariancie tak naprawdę porównujemy dwa bufory danych tekstowych pochodzących z dwóch różnych kart, których zawartość prezentowana jest w Obszarze edycji. Istotne jest to, że musimy mieć do czynienia z różnymi buforami/plikami, czyli porównanie buforu/pliku sklonowanego do drugiego widoku nie jest możliwe, o czym zostaniemy poinformowaniu stosownym komunikatem.
Rysunek. ComparePlus - komunikat przy próbie porównania tego samego pliku sklonowanego do drugiego widoku
Z racji tego, że porównywanie dwóch różnych plików zawsze dotyczy dwóch różnych kart, to próba wywołania polecenia w programie Notepad++, gdzie mamy jedną otwartą kartą nie ma najmniejszego sensu, o czym zostaniemy poinformowaniu stosownym komunikatem.
W zależności od aktualnego stanu trybu podwójnego widoku cały proces porównawczy możemy przeprowadzić w następujący sposób:
Tryb podwójnego widoku (włączony)
Porównywanie rozpoczynamy wybierając z menu wtyczki polecenie
Compare
(domyślny skrótCtrl+Alt+C
) lub klikając na przycisk szybkiego dostępuCompare
. Bez dodatkowych kroków porównywane są dane tekstowe z aktualnie wybranych kart w obu widokach.Sytuacja ulegnie lekkiej komplikacji, kiedy oznaczymy jakąś kartę jako pierwszą przy porównywaniu (stosownym poleceniem lub przyciskiem). W takim przypadku można rozróżnić następujące warianty:
Karta w jednym z widoków została oznaczona jako pierwsza do porównania, pozostaje aktywna w tym widoku i wywołano porównanie - następuje porównanie danych tekstowych z aktualnie wybranych kart w obu widokach, czyli mamy identyczne działanie, jak w sytuacji bez dodatkowego oznaczenia pierwszej karty.
Widok1 Widok2 Karta1(oznaczona/aktywna) Karta2 Karta3 Karta1 Karta2(wybrana) Karta3
W powyższym teoretycznym przykładzie porównywane będą
Karta1 (Widok1)
iKarta2 (Widok2)
.Karta w jednym z widoków została oznaczona jako pierwsza do porównania, zmienioną aktywną kartę na inną (ale wciąż w tym samym widoku) i wywołano porównanie - następuje porównanie danych tekstowych między tymi dwoma kartami z tego samego widoku (tj. oznaczoną a aktywną), przy czym jedna z nich zostanie przeniesiona do drugiego widoku (zależnie od ustawień).
Widok1 Widok2 Karta1(oznaczona) Karta2 Karta3(aktywna) Karta1 Karta2(wybrana) Karta3
W powyższym teoretycznym przykładzie porównywane będą
Karta1 (Widok1)
iKarta3 (Widok1)
.Karta w jednym z widoków została oznaczona jako pierwsza do porównania (nie musi być aktualnie wybrana w tym widoku), zmienioną aktywną kartę na inną w drugim widoku i wywołano porównanie - następuje porównanie danych tekstowych między kartami z dwóch różnych widoków (tj. oznaczoną i aktywną), przy czym jedna z nich zostanie przeniesiona do drugiego widoku (zależnie od ustawień).
Widok1 Widok2 Karta1(oznaczona) Karta2 Karta3(wybrana) Karta1 Karta2(aktywna) Karta3
W powyższym teoretycznym przykładzie porównywane będą
Karta1 (Widok1)
iKarta2 (Widok2)
.
Tryb podwójnego widoku (wyłączony)
Porównywanie rozpoczynamy wybierając z menu wtyczki polecenie
Compare
(domyślny skrótCtrl+Alt+C
) lub klikając na przycisk szybkiego dostępuCompare
. Bez dodatkowych kroków porównywane są dane tekstowe z aktualnie wybranej karty i poprzedniej/następnej karty (zależnie od ustawień). Warto zaznaczyć, że jeśli aktywna karta jest pierwsza (ostatnia) na Pasku kart, to do porównania może zostać wybrana ostatnia (pierwsza) karta z Paska kart.Sytuacja ulegnie lekkiej komplikacji, kiedy oznaczymy jakąś kartę jako pierwszą przy porównywaniu (stosownym poleceniem lub przyciskiem). W takim przypadku można rozróżnić następujące warianty:
Karta została oznaczona jako pierwsza do porównania, pozostaje aktywna i wywołano porównanie - następuje porównanie danych tekstowych z aktualnie wybranej karty i poprzedniej/następnej karty (zależnie od ustawień), czyli mamy identyczne działanie, jak w sytuacji bez dodatkowego oznaczenia pierwszej karty.
Karta została oznaczona jako pierwsza do porównania, zmienioną aktywną kartę na inną i wywołano porównanie - następuje porównanie danych tekstowych z aktualnie wybranej karty i oznaczonej karty. Opcja przydatna w sytuacji, kiedy porównujemy dane tekstowe między konkretnymi kartami, które mogą być od siedzie rozdzielone innymi kartami. Dzięki opcji oznaczania pierwszej karty nie ma potrzeby rozlokowywania kart obok siebie jeszcze przed wywołaniem polecenia porównującego, co z praktycznego punktu widzenia jest niezwykle użyteczne.
Porównanie zaznaczeń z dwóch różnych plików#
Ten główny wariant porównawczydziała podobnie do porównywania dwóch różnych plików, a zasadnicza różnica objawia się tym, że porównywane są dane tekstowe z zaznaczeń wykonanych w dwóch różnych plikach/buforach. Porównywanie rozpoczynamy wybierając z menu wtyczki polecenie Compare Selections
(domyślny skrót Ctrl+Alt+N
) lub klikając na przycisk szybkiego dostępu Compare Selections
.
Reszta uwag i wytycznych jest w zasadzie taka sama, jak dla porównywania dwóch różnych plików, i z tego też powodu nie ma sensu opisywać wszystkiego ponownie. Warto jedynie nadmienić, że przeprowadzenie porównania bez uprzedniego wykonania obu zaznaczeń w dwóch różnych kartach nie jest możliwe, o czym zostaniemy poinformowaniu stosownym komunikatem.
Rysunek. ComparePlus - komunikat przy próbie porównania danych tekstowych bez uprzedniego wykonania zaznaczeń w dwóch różnych kartach
Cechą charakterystyczną dla tego porównania jest sposób prezentacji jego wyników. W obu Obszarach edycji dane tekstowe pochodzące z zaznaczeń zostaną otoczone specjalnymi granicznymi markerami --- Selection Compare Block Start ---
(wskazuje na początek zaznaczenia) i --- Selection Compare Block End ---
(wskazuje na koniec zaznaczenia). Właśnie po tych granicznych markerach możemy łatwo stwierdzić, że mamy do czynienia z porównanie zaznaczeń z dwóch różnych plików.
Marker --- Selection Compare Block Start ---
nigdy nie pojawi się w sytuacji, kiedy jedno z zaznaczeń zostało rozciągnięte na pierwszą linię (nawet częściowo) w porównywanych danych tekstowych.
Rysunek. ComparePlus - przykładowe pełne zaznaczenia w dwóch różnych plikach przed porównaniem (u góry) i po porównaniu (na dole) przy domyślnych ustawieniach
Sprawą kluczową, którą bardzo łatwo przeoczyć jest faktyczne interpretowanie zaznaczeń przez wtyczkę. Zaznaczenie jakiegoś tekstu, nawet pojedynczego znaku w danej linii spowoduje, że do porównania użyte zostaną wszystkie znaki tej linii, a nie tylko te pochodzące z zaznaczenia. Wynika to wprost ze sposobu działania powyższych granicznych markerów, które otaczają całe linie, a nie poszczególne ich fragmenty. W praktyce oznacza to, że przy porównywaniu konkretnych linii nie ma potrzeby całkowitego ich zaznaczania, jak w poniższym przykładzie, gdzie w lewym zaznaczeniu za jednym zamachem wybrano ostatni znak w linii 4, całą linię 5 i pierwszy znak w linii 6, a w prawym zaznaczeniu za jednym zamachem wybrano połowę znaków w linii 4, całą linię 5 i połowę znaków w linii 6. Finalnie w obu Obszarach edycji porównane zostały linie 4/5/6, bo tylko na tych liniach wystąpiło zaznaczeniu.
Rysunek. ComparePlus - przykładowe niepełne zaznaczenia w dwóch różnych plikach przed porównaniem (u góry) i po porównaniu (na dole) przy domyślnych ustawieniach
Dla zaznaczenia nieciągłego, tj. składającego się z wielu zakresów w osobnych liniach , które można wykonać przy pomocą klawisza Ctrl
i lewego przycisku myszy, do porównania wybrane zostaną linie objęte ostatnio wykonanym zakresem z tego zaznaczenia. Kolejności wykonania zakresów w nieciągłym zaznaczeniu nie należy mylić z wizualną kolejnością występowania tych zakresów w Obszarze edycji, bo nie zawsze muszą się one pokrywać. Tak dzieje się w poniższym przykładzie, gdzie w lewym zaznaczeniu najpierw wybrano linię 1, potem część z linii 2, i na koniec jednocześnie linię 4/5/6, a w prawym zaznaczeniu najpierw wybrano linię 9, potem część z linii 8, i na koniec jednocześnie linię 6/5/4. Finalnie w obu Obszarach edycji porównane zostały linie 4/5/6, bo tylko te linie objął ostatnio wykonany zakres w nieciągłym zaznaczeniu.
Rysunek. ComparePlus - przykładowe nieciągłe zaznaczenia w dwóch różnych plikach przed porównaniem (u góry) i po porównaniu (na dole) przy domyślnych ustawieniach
Przy domyślnych ustawieniach w obu Obszarach edycji są widoczne tylko te dane tekstowe, które zostały objęte zaznaczeniem, a pozostały tekst spoza zaznaczenia jest ukrywany. Nie dotyczy to pierwszej linii, która zawsze pozostaje widoczna. Ukrywanie zbędnej treści sprawdza się w przypadku danych tekstowych o dużych objętościach, gdzie najistotniejsze są tylko te dane, które pochodzą z zaznaczeń i są ze sobą porównywane, a cała reszta w tym momencie nie ma znaczenia. W razie potrzeby można wymusić wyświetlanie wszystkich danych tekstowych wyłączając opcję Show Only Compared Selections
.
Rysunek. ComparePlus - przykładowe zaznaczenia w dwóch różnych plikach przed porównaniem (u góry) i po porównaniu (na dole) z wyłączoną opcją Show Only Compared Selections
Zawężanie porównań do określonych fragmentów tekstu pozwala zaoszczędzić nieco czasu i mocy obliczeniowej potrzebnych na wykonanie całego procesu. Może być to przydatne dla osób dysponujących starszym sprzętem, gdzie porównywane są dane tekstowe o duży objętościach, a różniące je fragmenty występują sporadycznie.
Porównanie tego samego pliku#
Ten główny wariant porównawczy polega na porównywaniu zapisanej wersji pliku z jego wersją niezapisaną. Po przełączeniu się na kartę z niezapisaną wersją pliku porównywanie rozpoczynamy wybierając z menu wtyczki polecenie Diff since last Save
(domyślny skrót Ctrl+Alt+D
). Przeprowadzenie operacji ma sens tylko i wyłącznie po spełnieniu dwóch poniższych warunków:
Dane tekstowe w karcie przeznaczonej do porównania muszą istnieć fizycznie na dysku twardym, tj. muszą być chociaż raz zapisanym plikiem. Porównanie nowego bufora (jeszcze niezapisanego), który można utworzyć wybierając u góry na Pasku menu kolejno
Pliki >> Nowy
(domyślny skrótCtrl+N
) lub dwukrotnie klikając lewym przyciskiem myszy na pustym miejscu na Pasku kart, nie jest możliwe, o czym zostaniemy poinformowaniu stosownym komunikatem.Dane tekstowe w karcie przeznaczonej do porównania muszą być zmienione i niezapisane, tj. na karcie musi znajdować się ikonka z czerwoną dyskietką, która informuje, że wprowadziliśmy zmiany w pliku, ale jeszcze ich nie zapisaliśmy. Porównanie niezmodyfikowanego pliku nie ma najmniejszego sensu, o czym zostaniemy poinformowaniu stosownym komunikatem.
Po wykonaniu porównania obie sparowane ze sobą karty zawsze umieszczane są na końcach Paska kart w obu widokach, ale nie stanowi to większego problemu bo anulowanie porównania przywróci kartę z niezapisaną wersją pliku na swoje oryginalne miejsce. Istotne natomiast jest to, że w jednym z widoków pojawi się tymczasowa karta z zapisaną wersją pliku, którego lokalizacja (widoczna na Pasku tytułu w głównym oknie programu) będzie wskazywała na systemowy katalog Temp
. Tytuł tej karty będzie składał się z nazwy porównywanego pliku, po którym nastąpi dopisek Last Save
. Właśnie po tym dopisku w tytule karty możemy łatwo stwierdzić, że mamy do czynienia z porównaniem tego samego pliku. Tymczasowa wersja pliku w systemowym katalogu Temp
jest tworzona według wzorca:
name_LastSavenum.ext
gdzie poszczególne człony oznaczają:
- name - nazwa porównywanego pliku.
- num - liczbowy dopisek (zaczynając od 1) przy każdym tymczasowym pliku. Jest on konieczny w przypadku konfliktów, np. przy operowaniu na identycznie nazwanych plikach, ale w innej lokalizacji na dysku twardym.
- ext - rozszerzenie porównywanego pliku.
Pliki tymczasowe tworzone przez wtyczkę mają zablokowaną edycję i nie można ich wprost modyfikować, no chyba że sami zdejmiemy blokadę wybierając u góry na Pasku menu kolejno Edycja >> Zablokuj edycję
lub poprzez menu kontekstowe karty. Pliki te powinny zostać usunięte w automacie po wywołaniu poleceń czyszczących (dla aktywnego porównania lub wszystkich porównań) lub po standardowym zamknięciu programu Notepad++.
Porównanie tego samego pliku z repozytorium Git lub SVN#
Ten główny wariant porównawczy polega na porównywaniu ostatniej wersji pliku znajdującego się w repozytorium Git/SVN z jego zmodyfikowaną wersja, która jeszcze nie została wprowadzona do repozytorium Git/SVN.
Osobiście użytkuję jedynie system Git dlatego dalsze opisy zostały zweryfikowane tylko w tym jednym systemie kontroli wersji. Niemniej jednak w przypadku systemu SVN całości powinna działać w analogiczny sposób.
Po przełączeniu się na kartę ze zmodyfikowaną wersją pliku z repozytorium Git porównywanie rozpoczynamy wybierając z menu wtyczki polecenie Git Diff
(domyślny skrót Ctrl+Alt+G
). Przeprowadzenie operacji ma sens tylko i wyłącznie po spełnieniu poniższych warunków:
W folderze
NPP\plugins\ComparePlus\ComparePlus
znajduje się dodatkowa bibliotekagit2.dll
. Wyszukiwanie różnic w plikach z repozytorium Git bez tej biblioteki nie jest możliwe, o czym zostaniemy poinformowaniu stosownym komunikatem.Rysunek. ComparePlus - komunikat przy próbie porównania pliku z repozytorium Git bez dodatkowej biblioteki git2.dll
W przypadku SVN wykorzystywana jest inna biblioteka
sqlite3.dll
, którą również należy umieścić w folderzeNPP\plugins\ComparePlus\ComparePlus
.Dane tekstowe w karcie przeznaczonej do porównania muszą istnieć fizycznie na dysku twardym, tj. muszą być chociaż raz zapisanym plikiem. Porównanie nowego bufora (jeszcze niezapisanego), który można utworzyć wybierając u góry na Pasku menu kolejno
Pliki >> Nowy
(domyślny skrótCtrl+N
) lub dwukrotnie klikając lewym przyciskiem myszy na pustym miejscu na Pasku kart, nie jest możliwe, o czym zostaniemy poinformowaniu stosownym komunikatem.Dane tekstowe w karcie przeznaczonej do porównania, czyli de facto nasz plik, musi znajdować się w katalogu z repozytorium Git i musi być chociaż raz dodany do tego repozytorium. Bez spełnienia tych warunków proces porównawczy nie może się odbyć, o czym zostaniemy poinformowaniu stosownym komunikatem.
Rysunek. ComparePlus - komunikat przy próbie porównania danych tekstowych (pliku) ulokowanego poza repozytorium Git
Dane tekstowe w karcie przeznaczonej do porównania, czyli de facto nasz plik, musi się różnić względem ostatniej wersji tego pliku dodanej do repozytorium. Zmodyfikowany plik może mieć postać zapisaną lub niezapisaną, tj. na karcie może znajdować się ikonka z czerwoną dyskietką, która informuje, że wprowadziliśmy zmiany w pliku, ale jeszcze ich nie zapisaliśmy. Istotne jest to, aby zmodyfikowanego pliku (po zapisaniu) nie dodawać jeszcze do repozytorium Git. Porównanie niezmodyfikowanego pliku nie ma najmniejszego sensu, o czym zostaniemy poinformowaniu stosownym komunikatem.
Po wykonaniu porównania obie sparowane ze sobą karty zawsze umieszczane są na końcach Paska kart w obu widokach, ale nie stanowi to większego problemu bo anulowanie porównania przywróci kartę z niezapisaną wersją pliku na swoje oryginalne miejsce. Istotne natomiast jest to, że w jednym z widoków pojawi się tymczasowa karta z ostatnią wersją pliku dodaną do repozytorium Git, którego lokalizacja (widoczna na Pasku tytułu w głównym oknie programu) będzie wskazywała na systemowy katalog Temp
. Tytuł tej karty będzie składał się z nazwy porównywanego pliku, po którym nastąpi dopisek Git
. Właśnie po tym dopisku w tytule karty możemy łatwo stwierdzić, że mamy do czynienia z porównaniem tego samego pliku z repozytorium Git lub SVN. Tymczasowa wersja pliku w systemowym katalogu Temp
jest tworzona według wzorca:
name_Gitnum.ext
gdzie poszczególne człony oznaczają:
- name - nazwa porównywanego pliku.
- num - liczbowy dopisek (zaczynając od 1) przy każdym tymczasowym pliku. Jest on konieczny w przypadku konfliktów, np. przy operowaniu na identycznie nazwanych plikach, ale z innych lokalizacji w katalogu z repozytorium Git.
- ext - rozszerzenie porównywanego pliku.
Pliki tymczasowe tworzone przez wtyczkę mają zablokowaną edycję i nie można ich wprost modyfikować, no chyba że sami zdejmiemy blokadę wybierając u góry na Pasku menu kolejno Edycja >> Zablokuj edycję
lub poprzez menu kontekstowe karty. Pliki te powinny zostać usunięte w automacie po wywołaniu poleceń czyszczących (dla aktywnego porównania lub wszystkich porównań) lub po standardowym zamknięciu programu Notepad++.
Przyciski szybkiego dostępu#
Wtyczka na Pasku narzędzi udostępnia dziesięć przycisków dla najczęściej wykonywanych operacji. Gdy szerokość głównego okna programu jest zbyt mała by pomieścić wszystkie te przyciski, to niewidoczne przyciski zostaną zwinięte do jednej listy dostępnej pod ostatnim przyciskiem reprezentowanym przez wskaźnik >>
.
Rysunek. ComparePlus - przyciski szybkiego dostępu
Kolejność (wszystkich) przycisków na Pasku narzędzi można dowolnie modyfikować za pośrednictwem wtyczki Customize Toolbar.
Poniżej zamieszczam opis każdego przycisku szybkiego dostępu zgodnie z domyślną kolejnością występowania na Pasku narzędzi:
Set as First to Compare
# - oznacza aktualnie wybraną kartę jako pierwszą w procesie porównawczym i ma zastosowanie jedynie dla porównania dwóch różnych plików, porównania zaznaczeń z dwóch różnych plików lub uproszczonych porównań. Alternatywnie można skorzystać z identycznie działającego poleceniaSet as First to Compare
(domyślny skrótCtrl+Alt+1
) dostępnego w menu wtyczki.Tytuł oznaczonej karty będzie składał się z nazwy porównywanego pliku, po którym nastąpi dopisek
New to Compare
. Właśnie po tym dopisku w tytule karty możemy łatwo stwierdzić, że mamy do czynienia z jej oznaczeniem i będzie ona pierwszą kartą uczestniczącą w procesie porównawczym. Dobór drugiej karty jest zależnych od innych czynników, które wymieniono przy opisie porównania dwóch różnych plików.W danej chwili może istnieć tylko jedna karta z oznaczeniem pierwszeństwa, w dodatku tylko w jednym z widoków. Ograniczenie to dotyczy nawet tej karty, którą sklonowano do drugiego widoku (tylko jedna z nich może posiadać oznaczenie). Nie można oznaczać karty, która znajduje się w porównaniu z inną kartą, o czym zostaniemy poinformowaniu stosownym komunikatem.
Anulowanie już oznaczonej karty jest możliwe poprzez wykonanie jednej z poniższych czynności:
- Oznaczenie innej karty jako pierwszej powoduje, że poprzednio oznaczona karta traci status oznaczenia.
- Wywołanie poleceń czyszczących (dla aktywnego porównania lub wszystkich porównań) usuwa oznaczenie z karty. Istotne jest to, że w trakcie wywoływania tych poleceń oznaczona karta nie musi być wybrana/aktywna.
- Zawsze po wywołaniu poleceń rozpoczynających dowolne warianty porównawcze oznaczenie z karty jest usuwane, nawet jeśli z jakiegoś powodu proces porównawczy zostanie przerwany, np. z uwagi na brak spełnienia wszystkich wymagań koniecznych do przeprowadzenia danego wariantu porównawczego, co najczęściej skutkuje pojawieniem się stosownego okna dialogowego z informacją wyjaśniającą dany problem.
Trzeba wyraźnie zaznaczyć, że dzięki opcji oznaczania pierwszej karty nie ma potrzeby rozlokowywania obu porównywanych kart obok siebie jeszcze przed wywołaniem poleceń porównujących, co z praktycznego punktu widzenia jest niezwykle użyteczne.
Compare
# - rozpoczyna proces porównania dwóch różnych plików. Alternatywnie można skorzystać z identycznie działającego poleceniaCompare
(domyślny skrótCtrl+Alt+C
) dostępnego w menu wtyczki. Zawsze po wywołaniu tego porównania oznaczenie pierwszeństwa karty (jeśli istniało) jest usuwane, nawet jeśli z jakiegoś powodu proces porównawczy zostanie przerwany, np. z uwagi na brak spełnienia wszystkich wymagań koniecznych do przeprowadzenia danego wariantu porównawczego, co najczęściej skutkuje pojawieniem się stosownego okna dialogowego z informacją wyjaśniającą dany problem.Compare Selections
# - rozpoczyna proces porównania zaznaczeń z dwóch różnych plików. Alternatywnie można skorzystać z identycznie działającego poleceniaCompare Selections
(domyślny skrótCtrl+Alt+N
) dostępnego w menu wtyczki. Zawsze po wywołaniu tego porównania oznaczenie pierwszeństwa karty (jeśli istniało) jest usuwane, nawet jeśli z jakiegoś powodu proces porównawczy zostanie przerwany, np. z uwagi na brak spełnienia wszystkich wymagań koniecznych do przeprowadzenia danego wariantu porównawczego, co najczęściej skutkuje pojawieniem się stosownego okna dialogowego z informacją wyjaśniającą dany problem.Clear Active Compare
# - anuluje porównanie między aktywną kartą a sparowaną z nią drugą kartą i dodatkowo zawsze usunie status pierwszeństwa z dowolnej karty, która taki status posiada. Alternatywnie można skorzystać z identycznie działającego poleceniaClear Active Compare
(domyślny skrótCtrl+Alt+X
) dostępnego w menu wtyczki. Obie możliwości pozostają nieaktywne (wyszarzone) w chwili, kiedy aktywna karta nie została porównana z inną kartą lub kiedy żadna karta nie posiada statusu pierwszeństwa.First
# - przechodzi do pierwszego markera różnicującego w aktualnie wybranym Obszarze edycji. Alternatywnie można skorzystać z identycznie działającego poleceniaFirst
(domyślny skrótCtrl+Alt+PageUp
) dostępnego w menu wtyczki. Obie możliwości pozostają nieaktywne (wyszarzone) w chwili, kiedy aktywna karta nie została porównana z inną kartą. Jeśli po ponownym wywołaniu tego polecenia aktualnie wybrany marker różnicujący nie uległ zmianie to jego symbol na belce z numerami wierszy zacznie migać trzy razy, co oznacza, że osiągnięto graniczny marker różnicujący w aktualnie wybranym Obszarze edycji.Previous
# - przechodzi do poprzedniego markera różnicującego w aktualnie wybranym Obszarze edycji. Alternatywnie można skorzystać z identycznie działającego poleceniaPrevious
(domyślny skrótAlt+PageUp
) dostępnego w menu wtyczki. Obie możliwości pozostają nieaktywne (wyszarzone) w chwili, kiedy aktywna karta nie została porównana z inną kartą. Jeśli po ponownym wywołaniu tego polecenia aktualnie wybrany marker różnicujący nie uległ zmianie to jego symbol na belce z numerami wierszy zacznie migać trzy razy, co oznacza, że osiągnięto graniczny marker różnicujący w aktualnie wybranym Obszarze edycji. Przy domyślnych ustawieniach nie ma cyklicznego przechodzenia z pozycji pierwszej do ostatniej (można zmienić).Next
# - przechodzi do następnego markera różnicującego w aktualnie wybranym Obszarze edycji. Alternatywnie można skorzystać z identycznie działającego poleceniaNext
(domyślny skrótAlt+PageDown
) dostępnego w menu wtyczki. Obie możliwości pozostają nieaktywne (wyszarzone) w chwili, kiedy aktywna karta nie została porównana z inną kartą. Jeśli po ponownym wywołaniu tego polecenia aktualnie wybrany marker różnicujący nie uległ zmianie to jego symbol na belce z numerami wierszy zacznie migać trzy razy, co oznacza, że osiągnięto graniczny marker różnicujący w aktualnie wybranym Obszarze edycji. Przy domyślnych ustawieniach nie ma cyklicznego przechodzenia z pozycji ostatniej do pierwszej (można zmienić).Last
# - przechodzi do ostatniego markera różnicującego w aktualnie wybranym Obszarze edycji. Alternatywnie można skorzystać z identycznie działającego poleceniaLast
(domyślny skrótCtrl+Alt+PageDown
) dostępnego w menu wtyczki. Obie możliwości pozostają nieaktywne (wyszarzone) w chwili, kiedy aktywna karta nie została porównana z inną kartą. Jeśli po ponownym wywołaniu tego polecenia aktualnie wybrany marker różnicujący nie uległ zmianie to jego symbol na belce z numerami wierszy zacznie migać trzy razy, co oznacza, że osiągnięto graniczny marker różnicujący w aktualnie wybranym Obszarze edycji.Show Only Diffs (Hide Matches)
# - w obu Obszarach edycji prezentujących wynik porównania między dwiema sparowanymi ze sobą kartami pozostawia widoczne tylko markery różnicujące, a wszystkie pasujące do siebie dane tekstowe ukrywa. Alternatywnie można skorzystać z identycznie działającego poleceniaShow Only Diffs (Hide Matches)
dostępnego w menu wtyczki. Funkcja ma charakter dwustanowy, tj. może być włączona lub wyłączona na stałe lub na żądanie w danej chwili, a podjęta decyzja zostaje zapamiętana nawet po ponownym uruchomieniu programu Notepad++. Przełączenie stanu tej funkcji działa natychmiastowo, nawet w tych porównaniach, które wykonano przed przełączeniem. Zwykle jest to przydatne w sytuacji, kiedy porównujemy ze sobą duże bloki tekstu, a pasujące do siebie dane tekstowe utrudniają analizę wszystkich odnalezionych różnic.Navigation Bar
# - przywołuje okno ComparePlus NavBar. Alternatywnie można skorzystać z identycznie działającego poleceniaNavigation Bar
dostępnego w menu wtyczki. Funkcja ma charakter dwustanowy, tj. może być włączona lub wyłączona na stałe lub na żądanie w danej chwili, a podjęta decyzja zostaje zapamiętana nawet po ponownym uruchomieniu programu Notepad++.
Wspólne reguły dla wszystkich porównań#
W menu wtyczki znajduje się kilka dodatkowych reguł, które dostrajają działanie procesu porównawczego. Wszystkie one mają charakter dwustanowy, tj. mogą być włączone lub wyłączone na stałe lub na żądanie w danej chwili, a podjęta decyzja zostaje zapamiętana nawet po ponownym uruchomieniu programu Notepad++. Reguły mają zastosowanie we wszystkich wariantach porównawczych.
Poniżej zamieszczam opis wszystkich dodatkowych reguł zgodnie z kolejnością występowania w menu wtyczki oraz ich domyślny stan:
[ ] Detect Diffs on Character Level
# - po zaznaczeniu tej opcji różnice wykrywane są na poziome pojedynczego znaku, a nie na poziome większych fragmentów tekstu (przeważnie obejmują całe słowo). Przełączenie stanu tej opcji przynosi efekt tylko w nowo wykonanych porównaniach.[ ] Base Changed Lines on Minimum Diffs
# - nie ustaliłem do czego służy ta opcja![ ] Ignore Spaces
# - po zaznaczeniu tej opcji dane tekstowe różniące się jedynie białymi znakami są sobie równoważne. Przełączenie stanu tej opcji przynosi efekt tylko w nowo wykonanych porównaniach.[ ] Ignore Empty Lines
# - po zaznaczeniu tej opcji wszystkie puste linie nie są ignorowane. Przełączenie stanu tej opcji przynosi efekt tylko w nowo wykonanych porównaniach.[ ] Ignore Case
# - po zaznaczeniu tej opcji dane tekstowe różniące się jedynie wielkością znaków są sobie równoważne. Przełączenie stanu tej opcji przynosi efekt tylko w nowo wykonanych porównaniach.[X] Detect Moves
# - po zaznaczeniu tej opcji linie przesunięte w inne miejsce uzyskują marker przesuniętej linii. Istotne jest to, że przesunięta linia może wystąpić tylko raz w obu porównywanych ze sobą plikach, w przeciwnym razie (przy wielu jej powtórzeniach) użyty zostanie marker usuniętej linii i marker dodanej linii. Przełączenie stanu tej opcji przynosi efekt tylko w nowo wykonanych porównaniach.[X] Show Only Compared Selections
# - po zaznaczeniu tej opcji w obu Obszarach edycji będących wynikiem dla porównania zaznaczeń z dwóch różnych plików lub jego uproszczonej odmianie są widoczne tylko te dane tekstowe, które zostały objęte zaznaczeniem, a pozostały tekst spoza zaznaczenia jest ukrywany. Nie dotyczy to pierwszej linii, która zawsze pozostaje widoczna. Przełączenie stanu tej opcji działa natychmiastowo, nawet w tych porównaniach, które wykonano przed przełączeniem.[X] Auto Re-Compare on Change
# - po zaznaczeniu tej opcji następuje automatyczne wykonanie ponownego porównania w sytuacji, kiedy dane tekstowe w jednej ze sparowanych ze sobą kart uległy zmianie. Odpada zatem konieczność ręcznego wywoływania konkretnego porównania z każdą nawet najdrobniejszą zmianą.
ComparePlus NavBar#
Wtyczka tworzy własne dokowalne okno z miniaturowymi podglądami dla obu porównywanych ze sobą kart. Samodzielne okno lub panel osadzony w kontenerze aktywujemy poleceniem Navigation Bar
dostępnym w menu wtyczki lub przy użyciu przycisku szybkiego dostępu Navigation Bar
.
Miniaturowa wizualizacja porównywanych ze sobą danych tekstowych pozwala szybciej zlokalizować różniące je miejsca, jak również oszacować przybliżoną liczbę samych różnic, co przy danych tekstowych o dużych objętościach może okazać się sporym udogodnieniem.
Okno z miniaturowymi podglądami ComparePlus NavBar można scharakteryzować następująco:
- Okno, pod warunkiem że zostało ono aktywowane wyżej wymienionymi sposobami, pozostaje widoczne jedynie w sytuacji, kiedy aktualnie wybrana karta jest sparowana z inną kartą. Przełączenie się na kartę, która nie została porównana z inną kartą powoduje, że okno to (jeśli w danej chwili było widoczne) zostanie automatycznie ukryte.
- Można zmieniać położenie i rozmiar okna poprzez standardowe przeciąganie jego krawędzi lub rogów, i po ponownym uruchomieniu programu Notepad++ nowe wartości są zapamiętywane.
- Okno dzieli się na dwie równe części w układzie lewo-prawo, gdzie każda z tych części reprezentuje osobny miniaturowy podgląd dla danych tekstowych z każdej sparowanej karty. Standardowo lewy podgląd odpowiada za kartę z lewego/górnego widoku, a prawy za kartę z prawego/dolnego widoku, chociaż może to ulec zmianie w sytuacji, kiedy zaczniemy zmieniać położenie widoków przy użyciu rozdzielającego je paska separacji.
- Miniaturowe podglądy prezentują odnalezione różnice między danymi tekstowymi ze sparowanych kart za pomocą linii z różnymi kolorami tła, które są zgodne z markerami różnicującymi (aczkolwiek bez dodatkowych symboli). Pasujące do siebie dane tekstowe reprezentowane są przez linie z białym tłem.
- Obszarze edycji nastąpi automatyczne przewinięcie do tej linii i dodatkowo umieszczenie kursora na samym jej początku (jeśli opcja
Move caret on navigation
włączona). w dowolnym miejscu miniaturowego podglądu wybiera jakąś konkretną linię, co w praktyce oznacza, że w odpowiadającym mu Szary prostokąt widoczny w obu miniaturowych podglądach reprezentuje aktualnie widoczną część danych tekstowych w obu Obszarach edycji. Rozmiar szarych prostokątów jest zależny od pionowej długości porównywanych danych tekstowych, jak również od rozmiarów głównego okna programu.
Po najechaniu kursorem myszy nad jeden z miniaturowych podglądów można za pomocą kółka myszy przewijać reprezentowane przez niego dane tekstowe w odpowiadającym mu Obszarze edycji (oczywiście jeśli dane są na tyle długie, że występuje pionowy pasek przewijania). Kliknięcie lewym przyciskiem myszy w dowolnym miejscu miniaturowego podglądu również wymusza przewinięcie do tego miejsca. Stan przewinięcia miniaturowych podglądów wpływa na położenie wyżej wymienionego szarego prostokąta. Z racji tego, że po wykonaniu porównania sparowane ze sobą karty są zsynchronizowane, to przewinięcie jednego z miniaturowych podglądów będzie skutkowało automatycznym przewinięciem drugiego miniaturowego podglądu.
ComparePlus Settings#
Wtyczka daje większą kontrolę nad procesem porównawczym i ogólnie nad swoim zachowaniem za pośrednictwem okna ComparePlus Settings, które przywołujemy poleceniem Settings...
dostępnym w menu wtyczki.
Po wprowadzeniu zmian ich zatwierdzenie następuje dopiero po kliknięciu na przycisku OK
. Ustawienia są przetrzymywane w pliku konfiguracji # NPP\plugins\Config\ComparePlus.ini
. Można całkowicie usunąć ten plik, co przywróci całą konfigurację do domyślnych wartości, chociaż o wiele wygodniejsze będzie po prostu kliknięcie na przycisku Reset
.
Okno ComparePlus Settings dzieli się na dwie części, gdzie lewa część odpowiada za główne ustawienia wtyczki, a prawa część za kwestie kolorystyczne. Poniżej zamieszczam dokładniejszy opis wszystkich tych opcji zgodnie z kolejnością występowania oraz ich domyślny stan:
- Main Settings #
Files position
# - po wykonaniu porównania odpowiada za położenie nowszej wersji danych w konkretnym widoku, co automatycznie wymusza także położenie starszej wersji danych w widoku przeciwnym.[X] New file in right/bottom view
- po zaznaczeniu tej opcji nowsza wersja danych trafia do prawego/dolnego widoku, a starszej wersji danych trafia do lewego/górnego widoku.[ ] Old file in right/bottom view
- po zaznaczeniu tej opcji nowsza wersja danych trafia do lewego/górnego widoku, a starszej wersji danych trafia do prawego/dolnego widoku.
Set as First to Compare
# - określa, czy karta z oznaczeniem pierwszeństwa ma być nowszą wersji danych, czy może starszą wersją danych.[X] Set as new file
- po zaznaczeniu tej opcji karta z oznaczeniem pierwszeństwa ma być nowszą wersji danych.[ ] Set as old file
- po zaznaczeniu tej opcji karta z oznaczeniem pierwszeństwa ma być starszą wersją danych.
Default Compare in Single-View
# - określa, które karty zostaną ze sobą porównane przy włączonym tylko jednym z widoków.[X] Current and previous files
- po zaznaczeniu tej opcji porównana zostanie aktualnie wybrana karta z poprzednią kartą. Jeśli aktualnie wybrana karta jest pierwszą kartą na Pasku kart to jako druga do porównania wybrana zostanie ostatnia karta z Paska kart.[ ] Current and next files
- po zaznaczeniu tej opcji porównana zostanie aktualnie wybrana karta z następną kartą. Jeśli aktualnie wybrana karta jest ostatnią kartą na Pasku kart to jako druga do porównania wybrana zostania pierwsza karta z Paska kart.
Misc.
# - określa szereg dodatkowych zachowań, które są niezależne od siebie i mogą być włączane/wyłączane osobno.[X] Warn about encodings mismatch
# - po zaznaczeniu tej opcji wyskoczy dodatkowe okno dialogowe informujące o próbie wykonania porównania między danymi tekstowymi, które używają różnych kodowań. Porównywanie tekstu w różnych kodowaniach może być niedokładne i lepiej unikać takiej sytuacji. Bez zaznaczenia tej opcji żadna dodatkowa kontrola związana z użytymi kodowaniami nie jest wykonywana.[ ] Align all matching lines
# - nie ustaliłem do czego służy ta opcja![ ] Never colorize ignored lines
# - nie ustaliłem do czego służy ta opcja![X] Move caret on navigation
# - po zaznaczeniu tej opcji wywołanie poleceniaFirst
,Previous
,Next
lubLast
, prócz samego przewinięcia aktualnie wybranego Obszaru edycji do właściwego markera różnicującego (tak aby było on widoczny), zawsze przeniesie kursor na początek tego markera różnicującego. Podobnie jest w przypadku okna ComparePlus NavBar, gdzie kliknięcie lewym przyciskiem myszy w dowolnym miejscu miniaturowego podglądu wybiera jakąś konkretną linię, co w praktyce oznacza, że w odpowiadającym mu Obszarze edycji nastąpi automatyczne przewinięcie do tej linii i dodatkowo umieszczenie kursora na samym jej początku. Bez zaznaczenia tej opcji wspomniane czynności nigdy nie zmienią aktualnej pozycji kursora w Obszarze edycji, a jedynie przewiną Obszar edycji w okolicę właściwego miejsca.[ ] Wrap around diffs
# - po zaznaczeniu tej opcji następuje cykliczne przejście między granicznymi markerami różnicującymi dla poleceńPrevious
iNext
, tj. wywołanie poleceniaPrevious
przejdzie z pierwszego do ostatniego markera różnicującego, a wywołanie poleceniaNext
przejdzie z ostatniego do pierwszego markera różnicującego. Bez zaznaczenia tej opcji cykliczne przejście między granicznymi markerami różnicującymi dla poleceńPrevious
iNext
nie jest obsługiwane.[X] Go to first diff after re-Compare
# - po zaznaczeniu tej opcji ponowne ręczne wykonanie porównania na już istniejącym porównaniu spowoduje przejście do pierwszego markera różnicującego w aktualnie wybranym Obszarze edycji. Pod pojęciem przejścia mamy tutaj na myśli przewinięcie Obszaru edycji w okolicę pierwszego markera różnicującego i, jeśli opcjaMove caret on navigation
włączona, to umieszczenie kursora na początku tego markera różnicującego. Nie dotyczy to automatycznego wywoływania porównań wynikającego z włączenia opcjiAuto Re-Compare on Change
, które zawsze utrzymuje przewinięcie Obszaru edycji i pozycję kursora w ich oryginalnym stanie. Bez zaznaczenia tej opcji przewinięcie Obszaru edycji i pozycja kursora po ponownym ręcznym wykonaniu porównania na już istniejącym porównaniu nie ulega zmianie, ale wciąż istnieje możliwość szybkiego przejścia do pierwszego markera różnicującego za pomocą przycisku szybkiego dostępuFirst
lub odpowiadającego mu poleceniaFirst
(domyślny skrótCtrl+Alt+PageUp
) dostępnego w menu wtyczki.[ ] Show "Close Files?" dialog on match
# - po zaznaczeniu tej opcji w oknie dialogowym informującym o zgodności między porównywanymi ze sobą kartami pojawi się dodatkowe pytanie, czy zamierzamy zamknąć obie te porównywane karty. Odpowiedź twierdząca, tj. kliknięcie na przyciskuTak
spowoduje ich zamknięcie, a zaprzeczenie, tj. kliknięcie na przyciskuNie
wywoła anulowanie porównania. Opcja ma zastosowanie tylko i wyłącznie dla porównania dwóch różnych plików, uproszczonego porównania dwóch różnych plików, porównania zaznaczeń z dwóch różnych plików i uproszczonego porównania zaznaczeń z dwóch różnych plików. Bez zaznaczenia tej opcji w oknie dialogowym informującym o zgodności między porównywanymi ze sobą kartami znajdzie się wyłącznie przyciskOK
, którego kliknięcie wywoła anulowanie porównania, i ma to zastosowanie we wszystkich wariantach porównawczych.
- Color and Highlight Settings #
Domyślne wartości dla kolorów teł w markerach różnicujących podano w formacie
dziesiętnie/heksadecymalnie/(r, g, b)
.Added line
# - ustala kolor tła dla markera dodanej linii, domyślnie13041606/C6FFC6/(198, 255, 198)
.Removed line
# - ustala kolor tła dla markera usuniętej linii, domyślnie13027071/FFC6C6/(255, 198, 198)
.Moved line
# - ustala kolor tła dla markera przesuniętej linii, domyślnie16770764/CCE6FF/(204, 230, 255)
.[30] Changed threshold percentage
# - ustala procentową czułość procesu porównawczego w przedziale 1-99, która determinuje użycie markera zmienionej linii między dwiema porównywanymi ze sobą liniami. Wartość 1 oznacza, że dwie linie muszą być zgodne między sobą przynajmniej w 1%, aby uznane zostały za tę samą, choć zmienioną (nawet bardzo) linię. Wartość 99 oznacza, że dwie linie muszą być zgodne między sobą przynajmniej w 99%, aby uznane zostały za tę samą, choć nieco zmienioną linię. Przy zgodności mniejszej od zadeklarowanej obie porównywane ze sobą linie potraktowane zostaną jako odrębne i oznaczone markerem dodanej linii lub markerem usuniętej linii.Rysunek. ComparePlus - wyniki porównani z wartością 38 (u góry), 58 (na środku) i 84 (na dole) dla opcji Changed threshold percentage
W powyższych przykładach czułość procesu porównawczego dla testowanych danych tekstowych dobrano tak, aby obniżenie wartości choćby o 1 dawało zauważalną różnicę w wyniku porównania, co można opisać w następujący sposób:
- W górnym przykładzie zmniejszenie czułości z 38 na 37 spowoduje, że ostatnia linia 9 uznana zostanie za zmienioną linię.
- W środkowym przykładzie zmniejszenie czułości z 58 na 57 spowoduje, że linia 5 uznana zostanie za zmienioną linię.
- W dolnym przykładzie zmniejszenie czułości z 84 na 83 spowoduje, że linia 1 uznana zostanie za zmienioną linię.
W ujęciu praktycznym wpływ czułości na wynik porównania jest silnie uzależniony od ilości znaków w porównywanych ze sobą liniach, jak i zawartych w nich różnicach. Dobór odpowiedniej czułości, innej niż domyślne 30, może być konieczny w jakiś specyficznych przypadkach.
Changed line
# - ustala kolor tła dla markera zmienionej linii, domyślnie10020839/E7E798/(231, 231, 152)
.Added Highlight
# - ustala kolor tła dla markera dodanego tekstu w linii, domyślnie427007/FF8306/(255, 131, 6)
.Removed Highlight
# - ustala kolor tła dla markera usuniętego tekstu w linii, domyślnie427007/FF8306/(255, 131, 6)
.[0] Highlight transparency
# - ustala poziom przezroczystości w przedziale 0-100 dla markera dodanego tekstu w linii i markera usuniętego tekstu w linii względem markera zmienionej linii. Wartość 0 oznacza najmniejszą przezroczystości dla tych dwóch markerów różnicujących, tj. ich kolor tła nakłada się na kolor tła w markerze zmienionej linii, ale nigdy w takim stopniu, aby całkowicie przykrył ten drugi kolor (w pewnych przypadkach może powstać nowy kolor będący mieszanką obu nakładających się kolorów). Wartość 100 oznacza całkowitą przezroczystości dla tych dwóch markerów różnicujących, tj. ich kolor tła jest niewidoczny względem koloru tła w markerze zmienionej linii, a jedyną wskazówką świadczącą o ich istnieniu jest otaczający je prostokątny obrys (ledwo widocznym) w ustawionym kolorze.
Każda z wyżej wymienionych opcji określająca kolor tła posiada listę wyboru, której rozwinięcie wyświetla uproszczoną paletę kolorów (8x6 = 48 kolorów), a dodatkowy przycisk tej palety
More Colors...
przywołuje okno z systemową paletą kolorów.
Alternatywa#
Ogólnie rzecz biorąc wtyczka, szczególnie w swojej najnowszej postaci ComparePlus, wprowadza do programu Notepad++ możliwość porównywania danych tekstowych na wiele sposobów. Wtyczka jest aktualizowana na bieżąco, ma rozbudowaną konfigurację, działa stabilnie, i w większości przypadków sprawdza się znakomicie. Jeśli mimo tych wszystkich zalet okaże się niewystarczająca to przy grubszych zadaniach można sięgnąć po zewnętrzne narzędzia:
- Klasyczne programy (wykaz 1, wykaz 2) - WinMerge, DiffMerge, KDiff3, TkDiff.
- Narzędzia online - diffchecker.com, diffnow.com, text-compare.com, draftable.com.
Trzeba wyraźnie zaznaczyć, że wyszukiwanie różnic między danymi tekstowymi jest silnie uzależnione od użytego algorytmu różnicującego i każde z wyżej wymienionych narzędzi może zwracać odmienne rezultaty. Różnice ustala się w bardziej inteligenty sposób, niż ma to miejsce np. w klasycznym bajtowym porównywaniu. Warto stosować te narzędzia, które pozwalają dostrajać swój algorytm różnicujący w jak najszerszym zakresie.