Movatterモバイル変換


[0]ホーム

URL:


Přeskočit na obsah
WikipedieWikipedie: Otevřená encyklopedie
Hledání

Vimscript

Z Wikipedie, otevřené encyklopedie
Vimscript
Paradigmaimperativní
AutorBram Moolenaar
Typová kontroladynamická
Hlavní implementaceVim
Ovlivněn jazykyC
OSUNIX,GNU/Linux,Windows NT,macOS,iOS,AmigaOS,MorphOS
LicenceGPL-kompatibilnícharityware
Webvim.org

Vimscript (neboVim script) jedynamicky typovanýimperativnískriptovací jazyk textového editoruVim. Vychází z příkazového jazyka editoruex.

Uživatel pomocí Vimscriptu může do editoru nadefinovat nové schopnosti, zefektivnit často prováděné úlohy, pozměnit chování standardních schopností editoru či je zcela nahradit svými algoritmy. Pluginy a makra Vimu jsou psána ve Vimscriptu. Podobá se ostatním skriptovacím jazykům jako je napříkladPerl. Vimscript může být zapisován přímo v prostředí Vimu ve formě příkazů nebo (běžnější) uložen v obyčejnémtextovém souboru s koncovkou.vim.

Ukázka Vimscriptu

[editovat |editovat zdroj]
function Minimum ( cislo1, cislo2 )  if a:cislo1 < a:cislo2    let mensi = a:cislo1  else    let mensi = a:cislo2  endif  return mensiendfunction

Tento kód napsaný ve Vimscriptu definuje novou funkci se jménem "Minimum", která bere dva argumenty (cislo1 a cislo2). Funkce obsahuje jednu podmínku, dvě přiřazení a jeden návratový příkaz.

Vlastnosti Vimscriptu

[editovat |editovat zdroj]
  • Příkazy
  • Proměnné
  • Výrazy
  • Regulární výrazy
  • Řídící konstrukty
    • Podmínka
    • Cyklus
  • Funkce
  • Seznamy a slovníky
  • Výjimky

Příkazy

[editovat |editovat zdroj]

Poznámka: jedná se o příkazy použitelné vrežimu ex; při interaktivním zadávání vzákladním režimu je nutné před příkazy napsat dvojtečku.

Přiřazovací příkaz:

  • let proměnná = výraz

Výpis hodnoty do stavového řádku:

  • echo výraz

– lze použít pro zkoušení, jak fungují funkce – napříkladecho line('.') vypíše do stavového řádku číslo aktuálního řádku

Volání procedury:

  • call jméno(parametry)

Provedení příkazu v normálním (základním, příkazovém) režimu:

  • normal příkaz

– napříkladnormal 4dd smaže řádek, na kterém stojí kurzor, a další 3 řádky

Provedení dvojtečkového příkazu:

  • execute příkaz

– příkazexecute line('.') "," line('.')+3 "d" také smaže řádek, na kterém stojí kurzor, a další 3 řádky (tento příkaz je pouze pro ilustraci, místoline('.') aline('.')+3 lze použít libovolné výrazy, pro tento speciální případ by samozřejmě bylo jednodušší použítexecute ".,+3d")

Proměnné

[editovat |editovat zdroj]

Lokální proměnné jsou identifikátory bez prefixu, parametry mají prefixa:, globální proměnné prefixg:.

Funkce

[editovat |editovat zdroj]
  • line('.') – vrací číslo řádku, na kterém stojí kursor (1 = první řádek)
  • line('$') – vrací číslo posledního řádku řádku v aktuálním bufferu
  • col('.') – vrací číslo bytu na pozici kursoru od začátku řádku (1 = kursor je začátku řádku)
  • col('$') – vrací číslo bytu za posledním znakem řádku, na kterém stojí kursor
  • virtcol('.') – vrací číslo pozice, které stojí kursor
  • getline('.') – vrací obsah řádku, na kterém stojí kursor
  • call setline('.', řetězec) – změní obsah řádku, na kterém stojí kursor na zadaný řetězec
  • call cursor(řádek, pozice) – nastaví kursor na zadaný řádek a pozici na řádku (obojí číslované od 1)
  • strpart(řetězec, začátek, délka) – vrací podřetězec z řetězce zadaného prvním parametrem začínající na pozici zadané druhým parametrem (číslované od 0), o délce zadané třetím parametrem; není-li uveden třetí parametr, bere se podřetězec do konce původního řetězce
  • search(regexp[, flagy[, stopline[, timeout]]]) – hledá od aktuální pozice kursoru řetězec vyhovujícíregulárnímu výrazu regexp, flagy ovlivňují způsob hledání (pro další informace použijte ve vimu příkaz :help search); při úspěchu přesune kursor a vrátí číslo řádku; při neúspěchu kursor ponechá na původním místě a vrátí 0
  • input(výzva) – vypíše výzvu do stavového řádku, čeká na zadání řetězce, který vrátí jako návratovou hodnotu

Příklad

[editovat |editovat zdroj]

Následující příklad definuje příkazycp acP, které se chovají podobně jako standardní příkazyp aP – tj. vloží za kursor, resp. před kursor text z pomocné bufferu; na rozdíl od nich však vkládaný text oddělí od původního textu vložením mezery na začátku a/nebo na konci jako by se jednalo o jedno nebo více samostatných slov.

set nocompatiblefunction! WholeWordPut(put_before)    if a:put_before == 0" vložení za kursor" pozice znaku, za který se vkládá        let lpos = col('.')-1" příkaz l posune kursor o pozici doprava        execute "normal" "l"" pozice znaku, před který se vkládá        let rpos = col('.')-1        execute "normal" "l"" pozice dalšího znaku        let xpos = col('.')-1        if xpos == rpos            let xpos = col('$')-1        else            execute "normal" "h"        endif        if rpos == lpos            let rpos = col('$')-1        else            execute "normal" "h"        endif    else" vložení před kursor        let rpos = col('.')-1        execute "normal" "h"        let lpos = col('.')-1        if rpos != lpos            execute "normal" "l"        endif        execute "normal" "l"        let xpos = col('.')-1        if xpos == rpos            let xpos = col('$')-1        else            execute "normal" "h"        endif    endif" znak, za který se vkládá    let lchar = strpart(getline('.'), lpos, rpos-lpos)" znak, před který se vkládá    let rchar = strpart(getline('.'), rpos, xpos-rpos)    if lchar == '' || match(lchar, '[(\[{< ]') == 0" na začátku řádku a za otevírací závorku nevkládat před vložený text mezeru        let put_string = substitute(@@, '^ *', '', '')    else        let put_string = substitute(@@, '^ *', ' ', '')    endif    if rchar == '' || match(rchar, '[)\]}> \.,?!:;]') == 0" na konci řádku, před zavírací závorku a interpunkci nevkládat za vložený text mezeru        let put_string = substitute(put_string, ' *$', '', '')    else        let put_string = substitute(put_string, ' *$', ' ', '')    endif" Vložení textu    call setline('.', strpart(getline('.'), 0, rpos) . put_string . strpart(getline('.'), rpos))" Umístění kursoru    call cursor(line('.'), rpos+strlen(put_string))endfunctionnoremap cp :call WholeWordPut(0)<CR>noremap cP :call WholeWordPut(1)<CR>

Externí odkazy

[editovat |editovat zdroj]
Programovací jazyky
abecední seznam programovacích jazyků
multiparadigmatické

AdaC++Common LispDF#GoOberonPerlPHPPythonRakuRubyRustScalaSwiftTcl (Tk) •Vala

strukturované (procedurální)

AWKCCOBOLDCLForthFortranLuaModula-2 /Modula-3PascalPawnPL/SQL

objektové
funkcionální
dotazovací

LINQSPARQLSQLXQueryXSL (XSLTXSL-FOXPath)

logické
výukové
ezoterické
historické

ALGOLAPLBBASICCPL (BCPL) •JMUMPSPL/ISimula 67SNOBOL

další
skriptovací/strojový kódkompilované/interpretovanéinteraktivní/dávkovéWYSIWYG
Citováno z „https://cs.wikipedia.org/w/index.php?title=Vimscript&oldid=18390083
Kategorie:

[8]ページ先頭

©2009-2026 Movatter.jp