¿Cómo puedo cambiar la pantalla de inicio o introducción de Vim?

14

Cuando inicio Vim sin ningún archivo, siempre veo esto:

              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

¿Cómo puedo cambiar esto?

Específicamente, me gustaría poner la salida de un comando de shell ( fortune) aquí.

Sé sobre vim-startify ; Pero no necesito todas esas características. Solo quiero mostrar un texto simple ...

Martin Tournoij
fuente

Respuestas:

5

En realidad, la respuesta está en startify. En startify.vim alrededor de la línea 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

Entonces, lo relevante es el VimEntercomando automático que se llama " después de hacer todas las cosas de inicio ".
Lo siguiente ifverifica si se trata de una sesión vacía (al verificar argumentos como filename). Básicamente, puede colocar su código en el lugar del segundo if, que es el código específico de startify.

johannes
fuente
3
... Me gustaría saber quién pensó en el nombre de la función insane_in_the_membraney cómo eso tiene algo que ver remotamente con su código real. ¡Porque esa persona es brillante y este es el mejor nombre de función que he visto hoy! : P
Pomo
1
La función @Doorknob cambió su nombre de "inicio" a "loco en la membrana" por Marco Hinz. Dada la letra original de Cypress Hill , supongo que estaba preocupado por lo grande que se estaba volviendo el método. O tal vez solo lo estaba escuchando en ese momento.
jalanb
¡Gracias por tu respuesta! Pero no creo que este fragmento sea realmente una "respuesta", como tal. ¿Qué pongo en la insane_in_the_membranefunción? ¿Necesito las primeras 3 líneas de este fragmento? ¿O son específicos de Startify (¿qué Session.vim?), Y la última línea da un error.
Martin Tournoij
5

Aquí está el código que extraje de vim-startify; Las partes clave están creando un nuevo búfer en el VimEnterautocmd, poniendo algo de texto en eso, y luego mapeando ipara iniciar un nuevo búfer y luego ir al modo de inserción.

Puse lo siguiente en un pequeño complemento que agrega algunas configuraciones y tal, pero el concepto básico es exactamente el mismo.

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
fuente
¿Qué es la fortuna?
tomekfranek
@regedarek Muestra una broma aleatoria. Ver: en.wikipedia.org/wiki/Fortune_(Unix)
Martin Tournoij