Guide de référence pour les fonctions de script intégrées et les structures de données de Vim.
Structures de Données
Dictionnaires
let colors = {
\ "apple": "red",
\ "banana": "yellow"
}
echo colors["apple"]
echo get(colors, "apple") " supprime l'erreur si manquant
call remove(colors, "apple")
" Inspection et vérifications
if has_key(dict, 'foo')
if empty(dict)
keys(dict)
len(dict)
max(dict)
min(dict)
count(dict, 'x')
string(dict)
map(dict, 'v:val . "!"')
extend(s:fruits, { "cherry": "red" })
for key in keys(mydict)
echo key . ': ' . mydict[key]
endfor
Listes
let mylist = [1, "two", 3, "four"]
let first = mylist[0]
let last = mylist[-1]
" Récupération sécurisée avec valeur par défaut
let second = get(mylist, 1)
let fallback = get(mylist, 10, "NONE")
Tampon et Curseur
Inspection de Tampon
line('.') " Numéro de ligne actuelle
col('.') " Numéro de colonne actuelle
col('$') " Dernière colonne de la ligne actuelle
getline('.') " Contenu de la ligne actuelle sous forme de chaîne
getline(1) " Contenu de la ligne 1 sous forme de chaîne
getline(1, 5) " Lignes 1 à 5 sous forme de liste de chaînes
search('^$') " Numéro de la prochaine ligne vide
search('^$', 'n') " Trouver la prochaine ligne vide sans déplacer le curseur
getcurpos() " [bufnum, lnum, col, off, curswant]
getpos('.') " [bufnum, lnum, col, off]
nextnonblank(1) " Prochaine ligne non vide après la ligne 1
prevnonblank(10)
Marques (Marks)
getpos("'a") " Position de la marque 'a'
setpos("'a", [0, 10, 5, 0])
getpos("'<") " Position de début de sélection visuelle
getpos("'>") " Position de fin de sélection visuelle
Positionnement du Curseur
call cursor(line, col)
call cursor(line, col, off, curswant)
Expansion de Noms de Fichiers
expand('<cword>') " Mot sous le curseur
expand('<cfile>') " Chemin de fichier sous le curseur
expand('%') " Nom du fichier actuel
" Modificateurs :
" :p Chemin complet (/Users/name/project/file.txt)
" :h Dossier parent (Head) (/Users/name/project)
" :t Nom de fichier (Tail) (file.txt)
" :r Nom de base sans extension (file)
" :e Extension (txt)
" Exemple : expand('%:p:h')
Fichiers et Chemins
fnameescape('string')
fnamemodify('main.c', ':p:h')
fnamemodify(fname, ':e')
filereadable(fname)
getfsize('file.txt')
getcwd()
globpath(&rtp, "plugin/commentary.vim")
Mathématiques et Types
Opérations Mathématiques
fmod(9, 2) " Modulo : 1.0
abs(-0.5) " Valeur absolue
sqrt(9) " Racine carrée
trunc(1.84) " 1.0
floor(1.84) " 1.0
ceil(1.84) " 2.0
float2nr(3.14) " Convertir flottant en entier : 3
Conversions de Types
str2float('0.2')
str2nr('240')
str2nr('ff', 16) " Analyse hexadécimale (Base-16)
string(0.3) " Convertir en chaîne
Vérification des Types
type(var) == type(0) " Nombre
type(var) == type("") " Chaîne
type(var) == type(function("tr")) " Référence de fonction
type(var) == type([]) " Liste
type(var) == type({}) " Dictionnaire
type(var) == type(0.0) " Flottant
Chaînes et Expressions Régulières
Manipulation de Chaînes
if a =~ '\s*'
let clean = substitute(str, '\s\+', ' ', 'g')
strpart("abcdef", 3, 2) " == "de" (Sous-chaîne : décalage, longueur)
strpart("abcdef", 3) " == "def"
stridx("abcdef", "e") " == 4 (Sous-chaîne )
strridx("abcdef", "d") " Recherche d'index inversée
matchstr('testing', 'test') " == 'test' (Texte correspondant)
match('testing', 'test') " == 0 (Indice de début de correspondance)
matchend('testing', 'test') " == 4 (Indice de fin de correspondance)
match('testing', '\ctest') " Ignorer la casse
split(str, '\zs') " Diviser la chaîne en tableau de caractères
strlen(str) " Longueur en octets
strchars(str) " Nombre de caractères (gère l'Unicode multibyte)
strdisplaywidth(str) " Colonnes à l'écran
toupper(str)
tolower(str)
tr('foo', '_-', ' ') " Translation de caractères
Comparaisons
if name ==# 'John' " Égalité sensible à la casse
if name ==? 'John' " Égalité insensible à la casse
if name == 'John' " Dépend de l'option 'ignorecase'
if "hello" =~ '.*' " Correspond au motif
if "hello" !~ '.*' " Ne correspond pas au motif
Commandes et Exécution
Exécution de Commandes
normal! ddahello
execute 'normal! ' . a:keys
wincmd J " Commande de déplacement de fenêtre
Commandes Shell
let output = system('ls ' . shellescape(expand('%:h')))
Registres
getreg('*') " Obtenir le contenu du presse-papiers
getregtype('*') " Type de registre : 'v' (caractère), 'V' (ligne), '<ctrl-v>' (bloc)
setreg('*', 'new text')