Cofanie jest przyjemne w Vimie. Ale czasami, w znanym dobrym punkcie, chcę wymazać historię cofania - aby móc u
cofnąć pojedyncze zmiany, ale tylko do pewnego momentu. (Na przykład może to być czas, kiedy ostatni raz popełniłem.)
Jednym ze sposobów osiągnięcia tego jest zamknięcie i ponowne otwarcie pliku - historia cofania zaczyna się w tym momencie od razu. Ale to kłopot.
W przeszłości osiągałem to dzięki :edit!
. Ale w Vimie 7.3 nie odrzuca historii cofania.
Czy jest na to inny sposób niż zamknięcie pliku?
git checkout -f file
lubhg rollback file
?u
cofać indywidualne zmiany, ale nie przekraczać punktu, w którym ostatnio popełniłem. Dokładnie tak, jakby za każdym razem, gdy się popełniłem, zamykałem plik i ponownie go otwierałem. Tak było:edit!
kiedyś - przypominało to zamykanie pliku i otwieranie go ponownie. Nie musi to być powiązane z punktem zatwierdzenia, to jest właśnie czas, kiedy najczęściej tego chcę.Odpowiedzi:
powinien zrobić to, o co prosisz.
źródło
Stary: edytuj! zachowanie w jednej linijce:
źródło
:h :exe
,:h :bar
,:h :set-args
,:h 'ul'
i:h :edit!
.Funkcja Benoit nie działała dla mnie, ale znalazłem coś podobnego w instrukcji vima, tutaj:
http://www.polarhome.com/vim/manual/v73/undo.html#undo-remarks
Włączyłem go w funkcję, dodałem do mojego vimrc i wydaje się, że działa dobrze w vimie 7.3:
Można tego używać z
:ClearUndo
.źródło
Prawdopodobnie:
(
'ul'
jest pseudonimem'undolevels'
).źródło
:edit!
. Na początek stworzyłem funkcję o nazwie ClearUndos () z wymienionymi poleceniami, ale wywoływanie jej wydaje się nic nie robić, podczas gdy wykonywanie poleceń osobno robi ...:command -nargs=0 Reset let old_ul=&ul | set ul=-1 | e! | let &ul = old_ul | unlet old_ul
|
w treści polecenia. Następnie utwórz funkcję, która wykonuje to, co powiedziałem w mojej odpowiedzi, i ustaw polecenie nacall thefunction()
.„Wyczyść historię cofania (: w, aby usunąć plik cofania, jeśli jest prezentowany)
command! -bar UndoClear exe "set ul=-1 | m-1 | let &ul=" . &ul
m-1
Która tak naprawdę nie zmienia tekstu.'undofile'
jest włączony,:w
aby usunąć plik cofania lub łańcuchUndoClear|w
.źródło
W skrypcie:
Następnie użyj,
:Reset
aby to nazwać.źródło
set ul=
polecenie wpływa tylko na zmienną lokalną, dopóki skrypt nie zostanie zamknięty, a ponieważ zmieniamy go z powrotem przed zakończeniem skryptu, nigdy nie ma to wpływu na środowisko? Czy przetestowałeś tę funkcję i sprawiłeś, że działa - co oznacza, że jest coś dziwnego w mojej konfiguracji?