Una guía de referencia de funciones de script y estructuras de datos integradas de Vim.
Estructuras de Datos
Diccionarios
let colors = {
\ "apple": "red",
\ "banana": "yellow"
}
echo colors["apple"]
echo get(colors, "apple") " suprime el error si no existe
call remove(colors, "apple")
" Inspección y comprobaciones
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
Listas
let mylist = [1, "two", 3, "four"]
let first = mylist[0]
let last = mylist[-1]
" Recuperación segura con valor predeterminado
let second = get(mylist, 1)
let fallback = get(mylist, 10, "NONE")
Búfer y Cursor
Inspección de Búfer
line('.') " Número de línea actual
col('.') " Número de columna actual
col('$') " Última columna en la línea actual
getline('.') " Contenido de la línea actual como cadena
getline(1) " Contenido de la línea 1 como cadena
getline(1, 5) " Líneas 1 a 5 como lista de cadenas
search('^$') " Número de la siguiente línea en blanco
search('^$', 'n') " Buscar la siguiente línea en blanco sin mover el cursor
getcurpos() " [bufnum, lnum, col, off, curswant]
getpos('.') " [bufnum, lnum, col, off]
nextnonblank(1) " Siguiente línea no vacía después de la línea 1
prevnonblank(10)
Marcas (Marks)
getpos("'a") " Posición de la marca 'a'
setpos("'a", [0, 10, 5, 0])
getpos("'<") " Posición de inicio de selección visual
getpos("'>") " Posición de fin de selección visual
Posicionamiento del Cursor
call cursor(line, col)
call cursor(line, col, off, curswant)
Expansión de Nombres de Archivo
expand('<cword>') " Palabra bajo el cursor
expand('<cfile>') " Ruta de archivo bajo el cursor
expand('%') " Nombre del archivo actual
" Modificadores:
" :p Ruta completa (/Users/name/project/file.txt)
" :h Directorio (Head) (/Users/name/project)
" :t Nombre base (Tail) (file.txt)
" :r Nombre sin extensión (file)
" :e Extensión (txt)
" Ejemplo: expand('%:p:h')
Archivos y Rutas
fnameescape('string')
fnamemodify('main.c', ':p:h')
fnamemodify(fname, ':e')
filereadable(fname)
getfsize('file.txt')
getcwd()
globpath(&rtp, "plugin/commentary.vim")
Matemáticas y Tipos
Operaciones Matemáticas
fmod(9, 2) " Módulo: 1.0
abs(-0.5) " Valor absoluto
sqrt(9) " Raíz cuadrada
trunc(1.84) " 1.0
floor(1.84) " 1.0
ceil(1.84) " 2.0
float2nr(3.14) " Convertir flotante a entero: 3
Conversiones de Tipo
str2float('0.2')
str2nr('240')
str2nr('ff', 16) " Análisis hexadecimal (Base-16)
string(0.3) " Convertir a cadena
Comprobación de Tipos
type(var) == type(0) " Número
type(var) == type("") " Cadena
type(var) == type(function("tr")) " Referencia a función
type(var) == type([]) " Lista
type(var) == type({}) " Diccionario
type(var) == type(0.0) " Flotante
Cadenas y Expresiones Regulares
Manipulación de Cadenas
if a =~ '\s*'
let clean = substitute(str, '\s\+', ' ', 'g')
strpart("abcdef", 3, 2) " == "de" (Subcadena: desplazamiento, longitud)
strpart("abcdef", 3) " == "def"
stridx("abcdef", "e") " == 4 (Subcadena)
strridx("abcdef", "d") " Búsqueda de índice inversa
matchstr('testing', 'test') " == 'test' (Texto coincidente)
match('testing', 'test') " == 0 (Índice de inicio de coincidencia)
matchend('testing', 'test') " == 4 (Índice de fin de coincidencia)
match('testing', '\ctest') " Ignorar mayúsculas y minúsculas
split(str, '\zs') " Dividir cadena en matriz de caracteres
strlen(str) " Longitud en bytes
strchars(str) " Conteo de caracteres (compatible con multibyte)
strdisplaywidth(str) " Columnas en pantalla
toupper(str)
tolower(str)
tr('foo', '_-', ' ') " Traducción de caracteres
Comparaciones
if name ==# 'John' " Igualdad distinguiendo mayúsculas/minúsculas
if name ==? 'John' " Igualdad sin distinguir mayúsculas/minúsculas
if name == 'John' " Depende de la opción 'ignorecase'
if "hello" =~ '.*' " Coincide con el patrón
if "hello" !~ '.*' " No coincide con el patrón
Comandos y Ejecución
Ejecución de Comandos
normal! ddahello
execute 'normal! ' . a:keys
wincmd J " Comando de movimiento de ventanas
Comandos del Shell
let output = system('ls ' . shellescape(expand('%:h')))
Registros
getreg('*') " Obtener contenido del portapapeles
getregtype('*') " Tipo de registro: 'v' (carácter), 'V' (línea), '<ctrl-v>' (bloque)
setreg('*', 'new text')