Novinky ve Vimu 8

Presentations

Novinky ve Vimu 8

Obsah přednášky

Od QEDu k Vimu

1965   QED        řádkový editor
1971   ed         jednodušší řádkový editor, Ken Thompson, PDP-7
1975   em         „Editor for Mortals“, založen na ed
1976   ex         ed update, přímý předchůdce Vi
1976   vi         ex+new „VIsual“ mode
1987   Stevie     ST Editor for VI Enthusiasts
1988   Vim 1.0    první neoficiální verze
1990   Elvis      klon Vi s mnoha vylepšeními
1991   Vim 1.14   první oficiálně vydaná verze

Stručná historie verzí Vimu

1991   Vim 1.14   první oficiálně vydaná verze
1992   Vim 1.22   port na Unix 
1993   Vim 2.0    Vim Improved
1994   Vim 3      horizontálně rozdělená okna, integrovaná nápověda
                  (screenshot)
1996   Vim 4      GUI
1998   Vim 5      zvýraznění syntaxe, vertikálně rozdělená okna
...               Unicode, diff mode, port na VMS, BeOS, Mac,
...               vylepšení regexpů o \{} 
2001   Vim 6      Easy Vim (používá to někdo?)
2006   Vim 7      podpora pro další skriptovací jazyky, taby
...               slovníky, omnicompletion
2016   Vim 8      viz zbytek přednášky

Vim 8

Nastavení breakindent

Nastavení breakindent (ukázky)

  1. nowrap
  2. wrap
  3. wrap + showbreak=...
  4. wrap + linebreak
  5. wrap + breakindent
  6. wrap + linebreak + breakindent

Vylepšení práce se souborem .viminfo

Vylepšení práce se souborem .viminfo

# Command Line History (newest to oldest):
:q
|2,0,1487279026,,"q"
:e ~/temp/.viminfo
|2,0,1487279024,,"e ~/temp/.viminfo"
:set linebreak
|2,0,1487278557,,"set linebreak"

Standardní formát pluginů

Struktura adresářů s balíčky

.
└── pack
    └── balicky
        ├── start
        │   ├── plugin1
        │   │   ├── doc
        │   │   │   └── plugin1.txt
        │   │   ├── LICENSE
        │   │   ├── plugin
        │   │   │   └── plugin1.vim
        │   │   └── README.md
        │   └── plugin2
        │       ├── doc
        │       │   └── plugin2.txt
        │       ├── LICENSE
        │       ├── plugin
        │       │   └── plugin2.vim
        │       └── README.md
        └── opt
            ├── makejob
            │   ├── doc
            │   │   └── makejob.txt
            │   ├── LICENSE
            │   ├── plugin
            │   │   └── makejob.vim
            │   └── README.md
            └── pluginZ
                ├── doc
                │   └── pluginZ.txt
                ├── LICENSE
                ├── plugin
                │   └── pluginZ.vim
                └── README.md

Vylepšení skriptovacího engine

ID oken

" Funkce bude obecně vracet různá čísla:
function! PrintWindowNumbers()
    let windowNumbers = []
    windo call add(windowNumbers, winnr()) 
    for windowNumber in windowNumbers
        echo windowNumber
    endfor
endfunction
" Funkce bude pro jedno okno vždy vracet stejné ID
function! PrintWindowIDs()
    let windowIDs = []
    windo call add(windowIDs, win_getid(winnr())) 
    for windowID in windowIDs
        echo windowID
    endfor
endfunction

Anonymní funkce (lambdy)

Funkce vyššího řádu

let  sequence = range(10)
echo sequence

call map(sequence, {index, value -> value * 2})
echo sequence

call map(sequence, {index, value -> value * 2})
echo sequence

let  sequence2 = filter(copy(sequence), {index, value -> value % 2 == 0})
let  sequence3 = filter(copy(sequence), {index, value -> value % 3 == 0})
echo "sequence1=" sequence
echo "sequence2=" sequence2
echo "sequence3=" sequence3

Časovače

Podpora formátu JSON

json_encode(výraz) - převod výrazu do JSON formátu, který se vrátí ve formě řetězce json_decode(řetězec) - opak předchozí funkce, parsování řetězce s daty uloženými v JSON formátu do interních datových struktur VimScriptu js_encode(výraz) - podobné funkci json_encode(), ovšem klíče nejsou umístěny v uvozovkách js_decode(řetězec) podobné funkci json_decode(), ovšem při parsingu se nevyžaduje, aby byly klíče umístěny v uvozovkách

Režimy pluginů

Režim        Připojení    Popis
démon        socket       proces pro více instancí Vimu
úloha (job)  socket/pipe  proces pro jednu instanci Vimu
krátká úloha socket/pipe  neběží po celou dobu existence Vimu
filtr        pipe         spouští se synchronně

Úlohy

Kanály

Typ zprávy  Význam
RAW         obecný formát
NL          textová zpráva je ukončena znakem (NL)
JSON        formát JSON
JS          formát JSON s klíči odpovídajícími JavaScriptu

Blbinka na závěr

Příkaz :smile (ukázka)

Doplnění - překlad Vimu8

Doplnění - překlad Vimu8