Référence rapide

Aide-mémoire Fonctions Vimscript

Guide de référence rapide pour les fonctions intégrées de Vimscript : manipulation de listes et dictionnaires, inspection de tampons, mouvements de curseur et chaînes.

· Publié le

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')

Sujets associés