Referencia rápida

Chuleta de Funciones Vimscript

Guía de referencia rápida de las funciones integradas de Vimscript: manipulación de listas y diccionarios, inspección de búferes, movimiento del cursor y cadenas.

· Publicado

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

Temas relacionados