Como posso alterar a tela inicial ou de introdução do Vim?

14

Quando inicio o Vim sem nenhum arquivo, sempre vejo isso:

              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

Como posso mudar isso?

Especificamente, eu gostaria de colocar a saída de um comando shell ( fortune) aqui.

Eu sei sobre o vim-startify ; mas não preciso de todos esses recursos. Eu só quero mostrar um texto simples ...

Martin Tournoij
fonte

Respostas:

5

Na verdade, a resposta está no startify. No startify.vim, na linha 15, podemos ver

 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

Portanto, o importante é o VimEntercomando auto, chamado " depois de fazer todas as coisas de inicialização ".
O seguinte ifverifica se esta é uma sessão vazia (verificando argumentos como filename). Basicamente, você pode colocar seu código no lugar do segundo if, que é o código específico do startify.

johannes
fonte
3
... Gostaria de saber quem pensou no nome da função insane_in_the_membranee como isso tem algo a ver remotamente com seu código real. Porque essa pessoa é brilhante e esse é o melhor nome de função que eu já vi hoje! : P
Maçaneta 8/15
1
A função @Doorknob foi renomeada de "start" para "insane in the membran" por Marco Hinz. Dada a letra original de Cypress Hill , acho que ele estava preocupado com o tamanho do método. Ou talvez estivesse apenas ouvindo na época.
jalanb
Obrigado pela sua resposta! Mas não acho que esse trecho seja realmente uma "resposta", como tal. O que eu coloco na insane_in_the_membranefunção? Preciso das três primeiras linhas deste trecho? Ou eles são específicos do Startify (o que é Session.vim?) E a última linha gera um erro.
Martin Tournoij 10/02
5

Aqui está o código que extraí vim-startify; as partes principais estão criando um novo buffer no VimEnterautocmd, colocando algum texto nele e, em seguida, mapeando-o ipara iniciar um novo buffer e depois entrar no modo de inserção.

Eu coloquei o abaixo em um pequeno plugin que adiciona algumas configurações e tal, mas o conceito básico é exatamente o mesmo.

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()
Martin Tournoij
fonte
o que é fortuna -a ??
tomekfranek
@regedarek Ele exibe uma piada aleatória. Veja: en.wikipedia.org/wiki/Fortune_(Unix)
Martin Tournoij