Chciałbym uruchomić autocmd w następujących scenariuszach po uruchomieniu Vima:
- Bez określenia nazwy pliku.
- Kiedy plik jest nowy.
- Gdy plik istnieje, ale jest całkowicie pusty.
We wszystkich powyższych trzech przypadkach chciałbym uruchomić autocmd; konkretnie, chciałabym zacząć wkładka trybie automatycznie za jedynie powyższych scenariuszy (a nie kiedy jestem otwierania pliku, który już istnieje i nie jest pusty).
AKTUALIZACJA:
Próbowałem umieścić następujące elementy w moim _vimrc
, ale bez powodzenia (plus nie jestem pewien, czy w vimie jest funkcja, która zlicza liczbę znaków w pliku (aby sprawdzić, czy jest to zero) przed otwarciem:
if @% == "" || filereadable(@%)
autocmd BufRead,BufNewFile * startinsert
endif
vimrc
insert-mode
autocmd
John Sonderson
źródło
źródło
normal
zamiastexec
.if
instrukcja nie powinna znajdować się w pobliżu autocmd, jeśli powinna znajdować się w autocmd, więc będzie uruchamiana za każdym razem, gdy zostanie uruchomiona autocmd.Odpowiedzi:
Działa to dla wszystkich 3 twoich spraw dla mnie:
Można je prawdopodobnie skondensować do ostatniego sprawdzenia, czy plik jest pusty, ponieważ żadna nazwa pliku lub plik, który nie istnieje, zwykle nie jest uruchamiany jako puste bufory. Prawdopodobnie jest jednak możliwe, że niektóre inne wtyczki wstępnie wypełniają niektóre rzeczy w jednym z dwóch pierwszych przypadków (np. Niektóre wtyczki szablonu), więc najlepiej sprawdzić wszystkie trzy.
Pierwszy test, który już miałeś.
Drugi test musi sprawdzić
filereadable
wartość zero (nie istnieje), aby zdecydować, czy jest nowy (odwrotnie niż w przypadku wcześniejszych testów ).Ostatni test sprawdza, czy numer ostatniego wiersza w pliku wynosi 1 (który jest również pierwszym wierszem, co oznacza, że jest tylko jeden wiersz) i czy numer kolumny na końcu wiersza (kolumna po ostatnim znaku w wiersz) wynosi 1, co oznaczałoby, że jest 0 znaków. Jeśli jest tylko 1 linia z 0 znakami, plik musi być pusty.
Ostatnia uwaga: sposób, w jaki wypowiadasz się w pytaniu, może przynieść zaskakujące wyniki. Mianowicie ustawiasz
BufRead
iBufNewFile
tylko wtedy, gdy warunki są spełnione podczas uruchamiania, ale wtedy te polecenia automatyczne istnieją przez resztę sesji. Tak więc, jeśli miałbyś zacząć od pustego pliku, który ustawia te polecenia, każdy kolejny otwarty plik (nowy lub nie, pusty lub nie) zacząłby się w trybie wstawiania.Autocommand
VimEnter
jest uruchamiany pod koniec uruchamiania Vima i tylko raz dla całej sesji. W ten sposób twoje testy będą uruchamiane tylko po uruchomieniu Vima, a nie w żadnym innym momencie.źródło