Справочное руководство по встроенным функциям и структурам данных Vim.
Структуры данных
Словари (Dictionaries)
let colors = {
\ "apple": "red",
\ "banana": "yellow"
}
echo colors["apple"]
echo get(colors, "apple") " подавляет ошибку при отсутствии ключа
call remove(colors, "apple")
" Проверка и инспекция
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
Списки (Lists)
let mylist = [1, "two", 3, "four"]
let first = mylist[0]
let last = mylist[-1]
" Безопасное получение со значением по умолчанию
let second = get(mylist, 1)
let fallback = get(mylist, 10, "NONE")
Буфер и курсор
Проверка буфера
line('.') " Текущий номер строки
col('.') " Текущий номер столбца
col('$') " Последний столбец в текущей строке
getline('.') " Текст текущей строки
getline(1) " Текст первой строки
getline(1, 5) " Строки 1–5 как список строк
search('^$') " Номер следующей пустой строки
search('^$', 'n') " Поиск следующей пустой строки без смещения курсора
getcurpos() " [bufnum, lnum, col, off, curswant]
getpos('.') " [bufnum, lnum, col, off]
nextnonblank(1) " Следующая непустая строка после строки 1
prevnonblank(10)
Метки (Marks)
getpos("'a") " Позиция метки 'a'
setpos("'a", [0, 10, 5, 0])
getpos("'<") " Начало визуального выделения
getpos("'>") " Конец визуального выделения
Позиционирование курсора
call cursor(line, col)
call cursor(line, col, off, curswant)
Раскрытие имен файлов
expand('<cword>') " Слово под курсором
expand('<cfile>') " Путь к файлу под курсором
expand('%') " Имя текущего файла
" Модификаторы:
" :p Полный путь (/Users/name/project/file.txt)
" :h Директория (Head) (/Users/name/project)
" :t Имя файла (Tail) (file.txt)
" :r Имя без расширения (file)
" :e Расширение (txt)
" Пример: expand('%:p:h')
Файлы и пути
fnameescape('string')
fnamemodify('main.c', ':p:h')
fnamemodify(fname, ':e')
filereadable(fname)
getfsize('file.txt')
getcwd()
globpath(&rtp, "plugin/commentary.vim")
Математика и типы
Математические операции
fmod(9, 2) " Остаток от деления: 1.0
abs(-0.5) " Абсолютное значение
sqrt(9) " Квадратный корень
trunc(1.84) " 1.0
floor(1.84) " 1.0
ceil(1.84) " 2.0
float2nr(3.14) " Преобразовать float в integer: 3
Преобразование типов
str2float('0.2')
str2nr('240')
str2nr('ff', 16) " Шестнадцатеричный парсинг (Base-16)
string(0.3) " Преобразовать в строку
Проверка типов
type(var) == type(0) " Число
type(var) == type("") " Строка
type(var) == type(function("tr")) " Ссылка на функцию
type(var) == type([]) " Список
type(var) == type({}) " Словарь
type(var) == type(0.0) " Число с плавающей точкой
Строки и регулярные выражения
Работа со строками
if a =~ '\s*'
let clean = substitute(str, '\s\+', ' ', 'g')
strpart("abcdef", 3, 2) " == "de" (Подстрока: смещение, длина)
strpart("abcdef", 3) " == "def"
stridx("abcdef", "e") " == 4 (Подстрока)
strridx("abcdef", "d") " Обратный поиск индекса
matchstr('testing', 'test') " == 'test' (Совпавший текст)
match('testing', 'test') " == 0 (Индекс начала совпадения)
matchend('testing', 'test') " == 4 (Индекс конца совпадения)
match('testing', '\ctest') " Игнорировать регистр (\c)
split(str, '\zs') " Разбить строку на массив символов
strlen(str) " Длина в байтах
strchars(str) " Количество символов (с поддержкой мультибайт)
strdisplaywidth(str) " Ширина отображения на экране
toupper(str)
tolower(str)
tr('foo', '_-', ' ') " Замена символов
Сравнения
if name ==# 'John' " Сравнение с учетом регистра
if name ==? 'John' " Сравнение без учета регистра
if name == 'John' " Зависит от опции 'ignorecase'
if "hello" =~ '.*' " Совпадает с шаблоном
if "hello" !~ '.*' " Не совпадает с шаблоном
Команды и исполнение
Выполнение команд
normal! ddahello
execute 'normal! ' . a:keys
wincmd J " Команда перемещения окна
Команды Shell
let output = system('ls ' . shellescape(expand('%:h')))
Регистры
getreg('*') " Получить содержимое буфера обмена
getregtype('*') " Тип регистра: 'v' (символ), 'V' (строка), '<ctrl-v>' (блок)
setreg('*', 'new text')