W przypadku plików w określonym folderze chciałbym, aby vim nigdy nie dotykał „zmodyfikowanego” znacznika czasu.
Tłem jest to, że używam Bloxsom do blogowania, który używa zwykłych plików tekstowych ~/bloxsom
jako źródła wszystkich artykułów. Data artykułu (a zatem kolejność wyświetlania) oparta jest na dacie modyfikacji pliku tekstowego. Nie chcę, aby artykuł pojawiał się, jakby był nowy, gdy tylko naprawię literówkę. (Robię ich dużo
...: D)
Do tej pory vim zmienia znacznik czasu, a oryginalny znaczek ginie na zawsze. To jest OK i chcę to zachować dla większości plików w systemie. Ale nie chcę tego dla plików bloga - zawsze mogę touch
plik, jeśli zajdzie taka potrzeba.
Masz jakieś pomysły, jak dostosować Vima do tego zachowania?
vim
timestamps
Alois Mahdal
źródło
źródło
Odpowiedzi:
Nie sądzę, że vim ma tę funkcję. Jedną z możliwości jest odpowiednia modyfikacja kopii i odpowiednie ustawienie znacznika czasu, np .:
Lub nawet lepiej:
źródło
Jeśli chcesz się zabawić:
Zamień ścieżkę na rzeczywistą ścieżkę pliku
źródło
Napisałem do tego skrypt Perla.
Jest to opakowanie wokół vima, zapisane
~/bin/vim-nomtime.pl
i wprowadzone do użyciaalias vim='~/bin/vim-nomtime.pl'
w moim .bashrc.Niektóre dobre funkcje:
obsługuje wiele nazw plików
obsługuje wiele „oglądanych” katalogów
obsługuje dowiązanie symboliczne reż
można rozszerzyć o inne kryteria
z których większość można prawdopodobnie osiągnąć również w wersji czystego vima. Wady tego rozwiązania w porównaniu z moim pożądanym rozwiązaniem pure-vim to:
przywraca znaczek dopiero po zakończeniu vima, więc jeśli wykonam długą edycję i regularnie zapisuję, plik villi wyskakuje jako nowy, dopóki nie wyjdę z vima
obsługuje wiele plików w wierszu poleceń, ale w dość naiwny sposób - sprawdza tylko, czy
@ARGV
plik jest plikiem. Prawdopodobnie nie działałoby to z symbolami wieloznacznymi (np.vim note-*.txt
) Ani innymi zabawnymi rzeczaminie jest odporny na awarie, prawdopodobnie nawet nie jest odporny na HUP (można to zrobić)
... wel, to jest opakowanie. (Chodzi mi o to, że gdybyśmy rozwiązali wszystko za pomocą opakowania, ile mielibyśmy opakowań, zanim wydarzyło się coś złego?)
źródło
Ten krótki skrypt zachowa zmodyfikowany czas, jeśli katalog macierzysty pliku zawiera
.nomtime
plik:źródło
Wypróbuj tę
bash
funkcję (w oparciu o odpowiedź Shâu Shắc )Teraz możemy edytować plik i zachować zmodyfikowany czas za pomocą tego
źródło
vi
tylko jeden plik naraz; to nie zadziałavi file1 file2
. (3) Oczywiste jest, że jeśli użytkownik przełączy się na inny plik za pomocą:e
, nie będzie to obsługiwane.Istnieje możliwość skopiowania znacznika czasu z innego pliku.
Przykład:
źródło
Znalazłem świetne rozwiązanie na tej stronie , która tworzy funkcję vim, aby zapisać bieżący plik przy jednoczesnym zachowaniu istniejącego czasu modyfikacji, i wiąże tę funkcję z F4klawiszem funkcyjnym:
Odkryłem jednak, że oryginalna funkcja zawiera niewielki błąd, który powoduje wyświetlenie następującego ostrzeżenia, jeśli F4zostanie użyty dwukrotnie w tym samym pliku, ponieważ vim jest zdezorientowany, gdy zmienia się czas modyfikacji:
Na szczęście łatwo to naprawić: dodałem polecenie „edytuj” do oryginalnej funkcji, aby ponownie załadować plik po przywróceniu znacznika czasu, więc vim wie, jaki czas modyfikacji będzie oczekiwać na plik.
Oto zmodyfikowana funkcja vim z tą poprawką błędu, którą można dodać do
~/.vimrc
:Uwaga: Funkcja ta opiera się na wersji GNU
date
,stat
atouch
.źródło
Korzystając z niektórych opisanych powyżej pojęć, oto bardzo szybki i brudny alias jednowierszowy dla CSH, który udostępnia do tego celu polecenie „edycji”:
Możesz łatwo użyć zmiennej środowiskowej $ VISUAL lub $ EDITOR zamiast „vim”. W ten sposób możesz wydać następujące polecenie, aby zmienić domyślne edytory
Teraz sam alias nie musi być przedefiniowywany w celu dostosowania go do różnych edytorów, co czyni go nieco bardziej przenośnym. Jeśli używasz powłoki innej niż CSH lub TCSH, oczywiście powyższe przykłady można odpowiednio dostosować.
źródło