Um guia de referência para funções integradas de script e estruturas de dados do Vim.
Estruturas de Dados
Dicionários
let colors = {
\ "apple": "red",
\ "banana": "yellow"
}
echo colors["apple"]
echo get(colors, "apple") " suprime o erro se a chave não existir
call remove(colors, "apple")
" Inspeção e verificações
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]
" Recuperação segura com valor padrão
let second = get(mylist, 1)
let fallback = get(mylist, 10, "NONE")
Buffer e Cursor
Inspeção de Buffer
line('.') " Número da linha atual
col('.') " Número da coluna atual
col('$') " Última coluna da linha atual
getline('.') " Conteúdo da linha atual como string
getline(1) " Conteúdo da linha 1 como string
getline(1, 5) " Linhas 1 a 5 como lista de strings
search('^$') " Número da próxima linha em branco
search('^$', 'n') " Encontrar próxima linha em branco sem mover o cursor
getcurpos() " [bufnum, lnum, col, off, curswant]
getpos('.') " [bufnum, lnum, col, off]
nextnonblank(1) " Próxima linha não vazia após a linha 1
prevnonblank(10)
Marcas (Marks)
getpos("'a") " Posição da marca 'a'
setpos("'a", [0, 10, 5, 0])
getpos("'<") " Início da seleção visual
getpos("'>") " Fim da seleção visual
Posicionamento do Cursor
call cursor(line, col)
call cursor(line, col, off, curswant)
Expansão de Nomes de Arquivo
expand('<cword>') " Palavra sob o cursor
expand('<cfile>') " Caminho de arquivo sob o cursor
expand('%') " Nome do arquivo atual
" Modificadores:
" :p Caminho completo (/Users/name/project/file.txt)
" :h Diretório pai (Head) (/Users/name/project)
" :t Nome do arquivo (Tail) (file.txt)
" :r Nome base sem extensão (file)
" :e Extensão (txt)
" Exemplo: expand('%:p:h')
Arquivos e Caminhos
fnameescape('string')
fnamemodify('main.c', ':p:h')
fnamemodify(fname, ':e')
filereadable(fname)
getfsize('file.txt')
getcwd()
globpath(&rtp, "plugin/commentary.vim")
Matemática e Tipos
Operações Matemáticas
fmod(9, 2) " Módulo: 1.0
abs(-0.5) " Valor absoluto
sqrt(9) " Raiz quadrada
trunc(1.84) " 1.0
floor(1.84) " 1.0
ceil(1.84) " 2.0
float2nr(3.14) " Converter float em inteiro: 3
Conversões de Tipo
str2float('0.2')
str2nr('240')
str2nr('ff', 16) " Análise hexadecimal (Base-16)
string(0.3) " Converter para string
Verificação de Tipos
type(var) == type(0) " Número
type(var) == type("") " String
type(var) == type(function("tr")) " Referência de função
type(var) == type([]) " Lista
type(var) == type({}) " Dicionário
type(var) == type(0.0) " Float
Strings e Expressões Regulares
Manipulação de Strings
if a =~ '\s*'
let clean = substitute(str, '\s\+', ' ', 'g')
strpart("abcdef", 3, 2) " == "de" (Substring: deslocamento, comprimento)
strpart("abcdef", 3) " == "def"
stridx("abcdef", "e") " == 4 (Substring)
strridx("abcdef", "d") " Busca de índice reversa
matchstr('testing', 'test') " == 'test' (Texto correspondente)
match('testing', 'test') " == 0 (Índice de início da correspondência)
matchend('testing', 'test') " == 4 (Índice de fim da correspondência)
match('testing', '\ctest') " Ignorar maiúsculas/minúsculas
split(str, '\zs') " Dividir string em array de caracteres
strlen(str) " Comprimento em bytes
strchars(str) " Contagem de caracteres (suporte a multibyte)
strdisplaywidth(str) " Colunas de exibição na tela
toupper(str)
tolower(str)
tr('foo', '_-', ' ') " Tradução de caracteres
Comparações
if name ==# 'John' " Igualdade sensível a maiúsculas
if name ==? 'John' " Igualdade insensível a maiúsculas
if name == 'John' " Depende da opção 'ignorecase'
if "hello" =~ '.*' " Corresponde ao padrão
if "hello" !~ '.*' " Não corresponde ao padrão
Comandos e Execução
Execução de Comandos
normal! ddahello
execute 'normal! ' . a:keys
wincmd J " Comando de movimentação de janelas
Comandos Shell
let output = system('ls ' . shellescape(expand('%:h')))
Registradores
getreg('*') " Obter conteúdo da área de transferência
getregtype('*') " Tipo de registrador: 'v' (caractere), 'V' (linha), '<ctrl-v>' (bloco)
setreg('*', 'new text')