| ч35. оператор grep часть 3 | Содержание | ч37. циклы |
До сих пор мы много работали с переменными, но мы еще не говорили о массивах вообще! В Vim есть два основных типа массивов, и сейчас мы рассмотрим первый: списки.
Списки Vimscript - это упорядоченные, разнотипные наборы элементов. Выполните следующую команду:
:echo ['foo', 3, 'bar']
Vim отобразит список.
Список, конечно может быть вложенным. Выполните следующую команду:
:echo ['foo', [3, 'bar']]
Vim отобразит список.
Индексирование
Списки Vimscript имеют нулевую индексацию, и вы можете получить доступ к элементам обычным способом. Выполните эту команду:
:echo [0, [1, 2]][1]
На выходе получаем:[ 1, 2 ].
Вы также можете индексировать с конца списка, как в Питон. Попробуйте выполнить эту команду:
:echo [0, [1, 2]][-2]
На выходе получаем: 0.
Индекс -1 ссылается на последний элемент в списке, -2 является предпоследним и так далее.
Разделение
Списки Vim также можно разделить. Выполните эту команду:
:echo ['a', 'b', 'c', 'd', 'e'][0:2]
На выходе получаем: ['a', 'b', 'c']
Vim отобразит элементы 0, 1 и 2. Вы можете безопасно выходить за пределы верхней границы. Попробуйте выполнить эту команду:
:echo ['a', 'b', 'c', 'd', 'e'][0:100000]
Vim просто отобразит весь список.
Индексы разделения могут быть отрицательными. Попробуйте выполнить эту команду:
:echo ['a', 'b', 'c', 'd', 'e'][-2:-1]
На выходе получаем: ['d', 'e']
Помните что -1 это ссылается на последний элемент, а -2 это предпоследний элемент.
При разделении списков вы можете опустить первый индекс, чтобы он означал "начало", и / или последний индекс, чтобы он означал "конец". Выполните следующие команды:
:echo ['a', 'b', 'c', 'd', 'e'][:1]
:echo ['a', 'b', 'c', 'd', 'e'][3:]
На выходе получаем: ['a', 'b'] и ['d', 'e'].
Как и Python, Vimscript также позволяет индексировать и разделять строки. Выполните следующую команду:
:echo "abcd"[0:2]
На выходе получаем: abc.
Вы не можете использовать отрицательные голые индексы со строками. Но вы можете использовать отрицательные индексы при отрезании строки! Выполните следующую команду:
:echo "abcd"[-1] . "abcd"[-2:]
На выходе получаем: [ cd ].
Так как "abcd"[-1] имеет отрицательный индекс, то она автоматически приводится к пустой строке. А индекс [ -2: ] отрезал строку с конца.
Конкатенация
Вы можете объединять списки с помощью оператора плюс.
Попробуйте выполнить эту команду:
:echo ['a', 'b'] + ['c']
На выходе получаем: ['a', 'b', 'c'].
Тут нет каких то странностей, так что здесь больше нечего сказать - списки Vimscript на удивление логичны так что идем дальше.
Список функций
Vim есть ряд встроенных функций для работы со списками. Выполните следующие команды:
:let foo = ['a']
:call add(foo, 'b')
:echo foo
На выходе получаем: Измененный список foo, выводит список.
Vim изменяет список foo с помощью встроенной функции add, что бы добавить символ 'b' в конце он выводит наш обновленный список ['a', 'b']. Теперь выполните эту команду:
:echo len(foo)
На выходе получаем: 2
Vim показывает что длина списка теперь равна 2.
Теперь попробуйте эти команды:
:echo get(foo, 0, 'default')
:echo get(foo, 100, 'default')
На выходе получаем: [ a ] и [ default ].
Функция get ( список, индекс, значение по умолчанию). выводит заданный элемент, если индекс находится вне диапазона выводится значение по умолчанию.
Запустите эту команду:
:echo index(foo, 'b')
:echo index(foo, 'nope')
На выходе получаем: [ 1 ] и [ -1 ].
В первом случаи функция index возвращает индекс где находится наш элемент 'b'. Если функция index не находит элемент в списке то он возвращает [ -1 ]
Теперь выполните эту команду:
:echo join(foo)
:echo join(foo, '---')
:echo join([1, 2, 3], '') ps/ тут не двойная кавычка а две одинарные
На выходе получаем: [ a b ], [ a---b ], и [ 123 ]. Список не меняет.
Функция join (список, разделитель) объединяет элементы в строку разделенную элементом разделителем. Если разделитель не указан, то по умолчанию в качестве разделителя используется пробел.
Выполните следующие команды:
:call reverse(foo)
:echo foo
:call reverse(foo)
:echo foo
На выходе получаем: ['b', 'a'], а затем ['a', 'b']
функция reverse переворачивает список.
Упражнения
Прочитать :help List. Все это. Обратите внимание на столицу L.
Прочитать :help add().
Прочитать :help len().
Прочитать :help get().
Прочитать :help index().
Прочитать :help join().
Прочитать :help reverse().
Изучите :help functions, чтобы найти другие функции, связанные со списками, о которых я еще не упоминал.
| ч35. оператор grep часть 3 | Содержание | ч37. циклы |