| ч20. Порядок в коде | Содержание | ч22.условные операторы if else |
До этого момента мы рассматривали отдельные команды. Далее мы будем рассматривать Vimscript как язык программирования. Это не принесет вам такого мгновенного удовлетворения, как то что мы изучали ранее, но это заложит основу для последней части, в которой будет рассказано о том как создать полноценный плагин Vim с нуля.
Давайте начнем. Первое, о чем нам нужно поговорить, это переменные. Значение переменной задается командой [ let ]. Выполните следующие команды:
:let foo = "bar"
:echo foo
Vim отобразит [ bar ] теперь имя переменной будет foo, и мы присвоили ей значение: строка "bar". Теперь выполните эти команды:
:let foo = 42
:echo foo
Теперь Vim отобразит 42, потому что мы переназначили foo на числовое значение 42.
Из этих коротких примеров может показаться, что Vimscript динамически типизируется. Но это не так, мы поговорим об этом позже.
Параметры как переменные
Вы можете читать и устанавливать параметры как переменные, используя специальный синтаксис. Выполните следующие команды:
:set textwidth=80
:echo &textwidth
Vim отобразит [ 80 ]. Использование амперсанда перед именем сообщает Vim, что вы ссылаетесь на значение, а не на имя переменной.
Давайте посмотрим, как Vim работает с логическими параметрами. Выполните следующие команды:
:set nowrap
:echo &wrap
Vim выводит 0. Теперь попробуйте эти команды:
:set wrap
:echo &wrap
На этот раз Vim выводит 1. Это очень сильный намек на то, что Vim обрабатывает целое число 0 как "false", а целое число 1 как "true". Vim обрабатывает любое ненулевое целое число как "истинное.
Мы также можем установить параметры в качестве переменных с помощью команды [ let ] . Выполните следующие команды:
:let &textwidth = 100
:set textwidth?
Отобразится Vimtextwidth=100.
Зачем нам это, если мы можем просто использовать set? Выполните следующие команды:
:let &textwidth = &textwidth + 10
:set textwidth?
На этот раз отобразится Vimtextwidth=110. Когда вы устанавливаете параметр с помощью set, вы можете установить для него только одно значение. Когда вы используете let и устанавливаете его как переменную, вы можете использовать всю мощь Vimscript для определения значения.
Локальные параметры
Если вы хотите установить локальное значение, вместо глобального значения, вам для этого нужно указать префикс в имени переменной.
Откройте два файла в отдельных окнах. Выполните следующую команду:
:let &l:number = 1
Теперь переключитесь на другой файл и выполните эту команду:
:let &l:number = 0
Обратите внимание, что в первом окне нумерация строк осталась, а во втором - нет.
Регистр как переменная
Вы также можете читать и устанавливать регистры как переменные. Выполните следующую команду:
:let @a = "hello!"
Теперь поместите курсор куда-нибудь в текст и введите [ "ap ]. Эта команда сообщает Vim: "вставить содержимое регистра [ a ] сюда". Мы просто вставляем содержимое регистра, поэтому Vim просто добавляет hello! в текст.
Регистры также могут быть прочитаны. Выполните следующую команду:
:echo @a
Vim выведет: hello!.
Выберите слово в вашем файле, затем скопируйте его с помощью [ y ]
:echo @"
Vim повторно выведет слово которое вы сейчас скопировали. Регистр [ " ] является "неназванным" регистром, это тот текст, который вы скопировали без указания места назначения.
Выполните поиск в вашем файле с помощью [ /поиск_слова ] затем выполните следующую команду:
:echo @/
Vim повторит шаблон поиска, который вы только что использовали. Это позволяет программно читать и изменять текущий шаблон поиска, что может быть иногда очень полезно.
Префиксы
Работа с переменными достаточно проста, однако не настолько проста как хотелось бы. Необходимо грамотно управлять областью действия переменных. Редактор определяет следующие области видимости:
[ b: ] Переменная распознается в одном буфере Vim
[ w: ] Переменная распознается в одном окне Vim
[ t: ] Переменная распознается в одной вкладке Vim
[ g: ] Переменная распознается глобально, то есть к ней можно обращаться отовсюду.
[ l: ] Переменная распознается внутри функции (локальная переменная)
[ s: ] Переменная распознается внутри исходного кода скрипта Vim
[ a: ] Аргумент функции... забавный префикс, суть в том что обратиться к аргументам функции можно только через этот префикс.
[ v: ] Переменная Vim - управляется редактором ( это также глобальные переменные)
Работу этих префиксов вы увидите в следующих статьях. А пока откройте два файла, затем перейдите в один из них и выполните следующие команды:
:let b:hello = "world"
:echo b:hello
Как и ожидалось, Vim отобразит world. Теперь переключитесь на другой буфер и снова запустите команду:
:echo b:hello
На этот раз Vim выдает ошибку, сообщая, что не может найти переменную.
Когда мы использовали [ b: ] в имени переменной, мы указали Vim, что переменная [ hello ] для текущего буфера должна быть локальной .
По мере необходимости мы будем их разбирать более подробно. А пока просто помните, что когда вы видите переменную, начинающуюся с символа и двоеточия, это означает, что она описывает переменную с ограниченной областью видимости.
Упражнения
Просмотрите список области видимости в :help internal-variable
Пройдитесь по своему ~/.vimrc файлу и измените некоторые из set и setlocal команды на их let формы. Помните, что логические параметры должны иметь значение.
Попробуйте установить логическую опцию, например для wrap на что то, отличному от нуля или единицы. Что произойдет, если вы установите для него другое число? Что произойдет, если вы установите для него значение string?
Вернитесь к своему ~/.vimrc и отмените все внесенные вами изменения. Вы никогда не должны использовать let, лучше использовать set так код ваш будет более удобочитаемым.
Прочти: help registers и просмотрите список регистров, которые вы можете прочитать и записать.
| ч20. Порядок в коде | Содержание | ч22.условные операторы if else |