Я хотел бы запустить autocmd в следующих сценариях при запуске Vim:
- Без указания имени файла.
- Когда файл новый.
- Когда файл существует, но полностью пуст.
Во всех трех вышеупомянутых случаях я хотел бы запустить autocmd; в частности, я хотел бы запустить режим вставки автоматически только для указанных выше сценариев (а не когда я открываю файл, который уже существует и не является пустым).
ОБНОВИТЬ:
Я попытался поместить следующее в мой _vimrc
, но не повезло (плюс я не уверен, есть ли в vim функция, которая подсчитывает количество символов в файле (чтобы узнать, равен ли он нулю) перед его открытием:
if @% == "" || filereadable(@%)
autocmd BufRead,BufNewFile * startinsert
endif
vimrc
insert-mode
autocmd
Джон Сондерсон
источник
источник
normal
вместоexec
.if
оператор не должен находиться вокруг autocmd, если он должен находиться внутри autocmd, поэтому он будет запускаться каждый раз, когда запускается autocmd.Ответы:
Это работает для всех 3 ваших дел для меня:
Вероятно, они могут быть сведены к последней проверке наличия пустого файла, поскольку ни одно имя файла или несуществующий файл обычно не начинаются как пустые буферы. Тем не менее, возможно, что какой-то другой плагин предварительно заполняет некоторые вещи в одном из первых двух случаев (например, некоторые плагины шаблонов), поэтому лучше проверить все три.
Первый тест у вас уже был.
Второй тест должен проверить
filereadable
на значение ноль (не существует), чтобы определить, является ли он новым (в отличие от того, что у вас было).Последний тест проверяет, что номер последней строки в файле равен 1 (что также является первой строкой, что означает, что есть только одна строка), и что номер столбца конца строки (столбец после последнего символа в строка) равно 1, что означает, что есть 0 символов. Если в нем только 1 строка с 0 символами, то файл должен быть пустым.
Последнее замечание: то, как вы сформулировали свои утверждения в вопросе, может привести к неожиданным результатам. А именно, вы настраиваете
BufRead
иBufNewFile
только если условия выполняются при запуске, но тогда эти автокоманды существуют до конца вашего сеанса. Таким образом, если бы вы начали с пустого файла, который устанавливает эти команды, каждый последующий открытый файл (новый или нет, пустой или нет) запустился бы в режиме вставки.Автокоманда
VimEnter
запускается в конце запуска Vim и только один раз для всего сеанса. Таким образом, ваши тесты запускаются только при запуске Vim, а не в любой другой раз.источник