Как я могу изменить начальный или начальный экран Vim?

14

Когда я запускаю Vim без каких-либо файлов, я всегда вижу это:

              VIM - Vi IMproved

               version 7.4.580
           by Bram Moolenaar et al.
 Vim is open source and freely distributable

        Become a registered Vim user!
type  :help register<Enter>   for information

type  :q<Enter>               to exit
type  :help<Enter>  or  <F1>  for on-line help
type  :help version7<Enter>   for version info

Как я могу изменить это?

В частности, я хотел бы поместить здесь вывод команды shell ( fortune).

Я знаю о vim-startify ; но мне не нужны все эти функции. Я просто хочу показать простой текст ...

Мартин Турной
источник

Ответы:

5

На самом деле ответ находится в начале. В startify.vim вокруг строки 15 мы можем видеть

 autocmd VimEnter * nested
\ if !argc() && (line2byte('$') == -1) && (v:progname =~? '^[-gmnq]\=vim\=x\=\%[\.exe]$')
\ | if get(g:, 'startify_session_autoload') && filereadable('Session.vim')
\ | source Session.vim
\ | else
\ | call startify#insane_in_the_membrane()
\ | endif
\ | endif
\ | autocmd! startify VimEnter

Таким образом, актуальная вещь - это VimEnterкоманда auto, которая называется « после выполнения всех действий при запуске ».
Следующее ifпроверяет, является ли это пустой сессией (проверяя такие аргументы как filename). По сути, вы можете поместить свой код вместо второго if, то есть кода, определяющего startify.

Johannes
источник
3
... Я хотел бы знать, кто думал о названии функции insane_in_the_membraneи как это каким-либо образом связано с ее реальным кодом. Потому что этот человек великолепен, и это лучшее название функции, которое я видел сегодня! : P
дверная ручка
1
Функция @Doorknob была переименована Марко Хинцем ( «start») в «безумный в мембране» . Учитывая оригинальную лирику Сайпресс-Хилла, я думаю, он беспокоился о том, насколько велик этот метод. Или, может быть, просто слушал это в то время.
Джаланб
Спасибо за Ваш ответ! Но я не думаю, что этот фрагмент действительно является «ответом» как таковым. Что мне поставить в insane_in_the_membraneфункцию? Нужны ли мне первые 3 строки этого фрагмента? Или они специфичны для Startify (что Session.vim?), И последняя строка выдает ошибку.
Мартин Турной
5

Вот код, из которого я извлек vim-startify; ключевые части создают новый буфер в VimEnterautocmd, помещают в него некоторый текст, а затем сопоставляют его, iчтобы запустить новый буфер и затем перейти в режим вставки.

Я поместил ниже в небольшой плагин, который добавляет некоторые настройки и тому подобное, но основная концепция точно такая же.

fun! Start()
    " Don't run if: we have commandline arguments, we don't have an empty
    " buffer, if we've not invoked as vim or gvim, or if we'e start in insert mode
    if argc() || line2byte('$') != -1 || v:progname !~? '^[-gmnq]\=vim\=x\=\%[\.exe]$' || &insertmode
        return
    endif

    " Start a new buffer ...
    enew

    " ... and set some options for it
    setlocal
        \ bufhidden=wipe
        \ buftype=nofile
        \ nobuflisted
        \ nocursorcolumn
        \ nocursorline
        \ nolist
        \ nonumber
        \ noswapfile
        \ norelativenumber

    " Now we can just write to the buffer, whatever you want.
    call append('$', "")
    for line in split(system('fortune -a'), '\n')
        call append('$', '        ' . l:line)
    endfor

    " No modifications to this buffer
    setlocal nomodifiable nomodified

    " When we go to insert mode start a new buffer, and start insert
    nnoremap <buffer><silent> e :enew<CR>
    nnoremap <buffer><silent> i :enew <bar> startinsert<CR>
    nnoremap <buffer><silent> o :enew <bar> startinsert<CR>
endfun

" Run after "doing all the startup stuff"
autocmd VimEnter * call Start()
Мартин Турной
источник
какое это счастье?
tomekfranek
@regedarek Отображает случайную шутку. Смотрите: en.wikipedia.org/wiki/Fortune_(Unix)
Мартин Турной