Wie kann ich den Start- oder Intro-Bildschirm von Vim ändern?

14

Wenn ich Vim ohne Dateien starte, sehe ich immer Folgendes:

              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

Wie kann ich das ändern?

Insbesondere möchte ich hier die Ausgabe eines Shell-Befehls ( fortune) einfügen.

Ich kenne mich mit vim-startify aus . aber ich brauche nicht alle diese Funktionen. Ich möchte nur einen einfachen Text zeigen ...

Martin Tournoij
quelle

Antworten:

5

Eigentlich ist die Antwort in Startify. In startify.vim um die Zeile 15 können wir sehen

 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

Das Relevante ist also der VimEnterAuto-Befehl, der " nach dem Start " aufgerufen wird .
Das Folgende ifprüft, ob dies eine leere Sitzung ist (indem es auf Argumente wie prüft filename). Grundsätzlich können Sie Ihren Code an die Stelle des zweiten setzen if, bei dem es sich um den startify-spezifischen Code handelt.

johannes
quelle
3
... Ich würde gerne wissen, wer an den Funktionsnamen gedacht insane_in_the_membranehat und wie das mit dem eigentlichen Code zu tun hat. Weil diese Person brillant ist und dies der beste Funktionsname ist, den ich heute gesehen habe! : P
Türknauf
1
@Doorknob Function wurde von Marco Hinz von "start" in "insane in the membrane" umbenannt . Angesichts der ursprünglichen Texte von Cypress Hill würde ich vermuten, dass er sich Sorgen darüber machte, wie groß die Methode wurde. Oder hörte es sich gerade an.
Jalanb
Danke für deine Antwort! Aber ich denke nicht, dass dieser Ausschnitt wirklich eine "Antwort" ist. Was stelle ich in die insane_in_the_membraneFunktion? Benötige ich die ersten 3 Zeilen dieses Snippets? Oder sind sie Startify-spezifisch (was ist das Session.vim?) Und die letzte Zeile gibt einen Fehler aus.
Martin Tournoij
5

Hier ist der Code, aus dem ich extrahiert habe vim-startify. Die wichtigsten Teile sind das Erstellen eines neuen Puffers in der VimEnterAutocMD, das Einfügen von Text und das Zuordnen des Puffers, ium einen neuen Puffer zu starten und dann in den Einfügemodus zu wechseln.

Ich habe das Folgende in ein kleines Plugin eingefügt, das einige Einstellungen hinzufügt, aber das Grundkonzept ist genau dasselbe.

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
quelle
Was ist es für ein Vermögen?
Tomekfranek
@regedarek Es zeigt einen zufälligen Witz. Siehe: en.wikipedia.org/wiki/Fortune_(Unix)
Martin Tournoij