Выполнить команду, когда буфер находится в каталоге в vim - PullRequest
1 голос
/ 29 октября 2019

Я ищу способ выполнить команду (: term), когда буфер указывает на каталог (например, NERDTree открывается при открытии vim, указывающего на каталог) и когда буфер пуст / стартовый экран

1 Ответ

3 голосов
/ 29 октября 2019

Плагины, такие как NERDTree, используют так называемые чистые буферы для отображения своего "пользовательского интерфейса". Для подсветки синтаксиса большинство также устанавливает пользовательский, специфичный для плагина filetype . Таким образом, вы можете подключиться к событию :help FileType: :autocmd FileType nerdtree ...

Непосредственное открытие терминала не сработало для меня;поскольку плагин прерывается в его настройке рабочего буфера, и не ожидает, что терминал будет вмешиваться. По крайней мере, здесь потребуются дополнительные команды для возврата к исходному пустому буферу. (Но что-то незаметное, например :echomsg, будет работать как есть.) Или вы просто откладываете открытие через feedkeys():

:autocmd FileType nerdtree call feedkeys(":terminal\<CR>")

Более общий подход (который не будет работатьтолько для NERDTree) может подключиться к BufWinEnter и проверить, является ли &buftype == 'nofile' (что является типичным атрибутом чистых буферов).

Чтобы проверить, запускается ли Vim с «стартового экрана», используйте VimEnter и убедитесь, что empty(bufname('')).

:autocmd VimEnter * if empty(bufname('')) | exe "terminal" | endif
...