vim linux что это

Как пользоваться текстовым редактором vim

Опытные пользователи Linux часто используют терминал, потому что так можно намного быстрее выполнить необходимые действия. Во время настройки системы нам довольно часто приходится редактировать различные файлы. Это могут быть настройки программ, какие-нибудь данные или обычные текстовые файлы.

В операционной системе Linux есть несколько текстовых редакторов, которые работают в терминале. Чаще всего новички используют редактор nano, но если вы заметили на нашем сайте во всех статьях используется текстовый редактор vi. Nano неудобный, и недостаточно функционален. Я сознательно не пишу в своих статьях о nano. Есть намного лучший текстовый редактор, это редактор vi. Здесь поддерживается быстрое перемещение по тексту, удобное редактирование, команды для изменения настроек работы, выполнение команд терминала из редактора, а также плагины для расширения функциональности. Но он немного сложный для новичков и очень непривычный.

В этой статье мы рассмотрим как пользоваться vim, рассмотрим основы работы с этим редактором, а также его основные команды.

Минимальные основы

Перед тем как идти дальше я бы посоветовал вам пройти курс обучения встроенный в редакторе. Выполнение всех обучающих заданий займет 25-30 минут. Но после того как вы освоите все что там написано, эта статья поможет вам закрепить материал. Дело в том, что команд и сочетаний клавиш у vim очень много и запомнить их все без практики невозможно. Для запуска обучения наберите:

Но делать это сейчас необязательно, в этой статье есть вся необходимая базовая информация и после ее прочтения вы уже сможете уверенно пользоваться vim, а обучение пройти чуть позже.

Как использовать редактор Vim

Начнем мы, как обычно с запуска программы, а также опций, которые ей можно передать. Синтаксис Vim очень прост:

$ vim опции имя_файла

$ vi опции имя_файла

Простой запуск vim без указания имени файла приведет к созданию пустого файла. А теперь давайте рассмотрим основные опции запуска:

Круто, правда? Но это только начало. Опции ничего по сравнению с командами редактора.

Командный режим Vim

В командном режиме вы можете перемещаться по редактируемому тексту и выполнять действия над ним с помощью буквенных клавиш. Именно этот режим открывается по умолчанию при старте редактора. Здесь вы будете использовать краткие команды, перед которыми может устанавливаться номер, чтобы повторить команду несколько раз. Для начинающих может быть поначалу очень запутанно то, что в командном режиме символы интерпретируются как команды.

Для перемещения используются такие команды:

Можете запустить редактор и поэкспериментировать, чтобы было легче понять как это работает. Если перед тем как нажать кнопку буквы нажать цифру, то эта команда будет повторена несколько раз. Например, 3j переведет курсор на три строки вверх.

Для переключения в режим редактирования используются такие команды:

К этим командам тоже применимы символы повторения. Поэкспериментируйте, можно получить интересный и не совсем ожиданный результат.

Более сложные команды редактирования текста. Вы можете править текст не только в обычном режиме, но и в командном с помощью команд. Для этого применяются такие команды:

Кроме этих команд, есть еще несколько полезных, которые мы не можем не рассмотреть:

С основными командами разобрались. Но у нас есть еще командная строка Vim, которая сама по себе тоже представляет огромный интерес.

Командная строка Vim

Со всеми основами разобрались, и вы теперь использование vim не будет казаться вам таким сложным. Но это еще далеко не все, этот мощный редактор может еще очень многое. Дальше мы рассмотрим несколько примеров использования vim, чтобы вам было легче справиться с новой программой.

Редактирование файла в Vim

Несмотря на то, что из всего вышесказанного можно понять как это делается рассмотрим еще раз. Чтобы открыть файл выполните:

Затем, если вы не хотите пока использовать возможности командного режима просто нажмите i, чтобы перейти в режим редактирования. Здесь вы можете редактировать файл так же, как и в nano. После того как завершите нажмите Esc, чтобы перейти в командный режим и наберите :wq. Записать и выйти. Все, готово.

Поиск и замена в Vim

Довольно часто нам нужно найти определенную последовательность в тексте. Текстовый редактор Vim умеет это делать.

Во-первых, если нужно найти символ в строке, нажмите f и наберите нужный символ, курсор будет перемещен к его позиции.

Для замены будет использоваться немного другая конструкция:

Двоеточие запускает командную оболочку с командой s для замены. Символ % означает что обрабатывать нужно весь файл, а g значит, что нужно обработать все найденные строки, а не только первую. Чтобы программа спрашивала перед каждой заменой можно добавить в конец строки опцию c.

Одновременное редактирование нескольких файлов

Чтобы открыть несколько файлов, просто передайте их в параметры при запуске программы:

vim файл1 файл2 файл3

Редактор vim linux откроет первый файл, для переключения ко второму используйте команду :n, чтобы вернутся назад :N.

С помощью команды :buffers вы можете посмотреть все открытые файлы, а командой :buffer 3 переключится на третий файл.

Буфер обмена Vim

Текстовый редактор Vim имеет свой буфер обмена. Например, вам нужно скопировать в четыре строки и вставить их в другое место программы, для этого выполните такую последовательность действий:

Также можно использовать выделение vim, чтобы скопировать строки. Выделите текст с помощью v, а затем нажмите y, чтобы скопировать.

Кириллица в Vim

Кириллица в Vim работает превосходно. Но есть одно но, когда включена кириллица в системе, все команды vim не работают, им и не нужно работать, они же не приспособлены для кириллицы.

Но переключать каждый раз раскладку, когда работаете в командном режиме тоже не очень удобно, поэтому открываем файл

/.vimrc и добавляем туда такие строки:

set keymap=russian-jcukenwin
set iminsert=0
set imsearch=0

Теперь раскладка клавиатуры в командном режиме переключается по Ctrl+^ и все команды работают.

Выводы

В этой статье мы рассмотрели как пользоваться текстовым редактором vim. Это еще далеко не все его возможности, но теперь вы можете уверенно обращаться с редактором и забыть о nano. Более подробно о настройке Vim читайте тут. А вы уже пользуетесь Vim? Или другим редактором? Напишите в комментариях!

Еще немного информации по использованию Vim можно почерпнуть из видео:

Источник

Vim (Русский)

Contents

Установка

Установите один из следующих пакетов:

Использование

Также вы можете запустить vimtutor (для версии с интерфейсом командной строки) или gvimtutor (для версии с графическим интерфейсом) для отображения руководства по использованию Vim.

Настройка

Буфер обмена

Подсветка синтаксиса

Чтобы включить подсветку синтаксиса для многих языков программирования:

Отступы

Отступы для определенного типа файла:

Визуальный перенос

Опция wrap (включена по умолчанию) указывает Vim переносить длинные строки, которые не помещаются на экран, так, что оставшаяся часть строки отображается на следующей линии. Опция wrap влияет только на отображение текста, сам текст при этом не изменяется.

Использование мыши

Vim позволяет пользоваться мышью, но только в тех терминалах, которые это поддерживают:

Чтобы включить поддержку мыши, добавьте в

Опция mouse=a устанавливается в defaults.vim

Переход на новую строку с помощью клавиш со стрелками

По умолчанию, при нажатии ← в начале строки или → в конце, курсор не переводится на следующую/предыдущую строку.

Объединение файлов

ДействиеГорячая клавиша
следующие изменение]c
предыдущее изменение[c
diff obtaindo
diff putdp
развернуть блокzo
свернуть блокzc
перечитать файлы:diffupdate
переключить окнаCtrl+w+w

Советы и рекомендации

Нумерация строк

Проверка орфографии

Проверку орфографии в Vim можно включить с помощью:

ДействиеКоманда
следующая ошибка]s
предыдущая ошибка[s
предложения для исправленияz=
добавить правильное написаниеzg
добавить правильное написание (на сеанс)zG
добавить неправильное написаниеzw
добавить неправильное написание (на сеанс)zW
повторить проверку орфографии во всем файле:spellr

/.vimrc или /etc/vimrc и перезапустите Vim. Или поместите строку autocmd BufRead,BufNewFile *.txt setlocal spell в

/.vimrc или /etc/vimrc и перезапустите Vim.

Сохранение позиции курсора

Если вы хотите, чтобы курсор возвращался в прежнее положение после открытия файла, добавьте следующее в

Запуск Vim по команде vi

Возврат каретки DOS/Windows

Для удаления всех символов возврата каретки из файла, выполните:

Пустое пространство в нижней части окон gVim

Когда используется оконный менеджер, настроенный на игнорирование размеров окна, gVim заполняет неиспользованные области окна стандартным фоновым цветом темы GTK.

Решение заключается в регулировании количества места, которое будет резервировать в нижней части окна gVim. Поместите следующую строку в

Плагины

Плагины могут помочь повысить эффективность вашей работы в Vim. Они могут менять интерфейс Vim, добавлять новые команды, поддержку завершения кода, интеграцию других программ и утилит с Vim, поддержку дополнительных языков и многое другое.

Установка

Используя встроенную систему управления пакетами

В Vim 8 добавлена возможность загрузки сторонних плагинов. Чтобы использовать эту функциональность, переместите плагины в

Используя менеджер плагинов

Менеджер плагинов позволяет устанавливать плагины и управлять ими одинаковым образом независимо от того, на какой системе вы запускаете Vim. Он представляет собой специальный плагин, который выполняет роль пакетного менеджера для других плагинов.

Из репозиториев Arch

cscope

Cscope является инструментом для навигации по программному проекту. Путем перехода к слову/символу/функции и вызову cscope (обычно с помощью горячих клавиш) можно найти: функции, которые вызывают данную, определение функции и многое другое.

Скопируйте стандартный файл cscope, который Vim будет автоматически читать:

Создайте файл, который содержит список файлов для индексации (cscope может обрабатывать множество языков, но для примера мы возьмем файлы на Си/Си++ с расширениями .c, .cpp и .h):

Создание файлы базы данных, которые cscope будет читать:

Горячие клавиши по умолчанию:

Не стесняйтесь изменять горячие клавиши:

Taglist

Taglist отображает структуру файлов исходного кода и позволяет эффективно просматривать исходники на различных языках программирования.

Источник

История Vim и руководство по его эффективному использованию

Примечание от переводчика: это первая часть монументальной (на самом деле монументальной) статьи о Vim и его возможностях от разработчика из Миннеаполиса и автора проекта PostgREST Джо begriffs Нельсона.

Первая часть статьи отводится на знакомство с историей Vim как редактора и автор рассказывает ряд интересных фактов и о возможностях Vim. Во второй части перевода будут сконцентрированы все фишки и лайфхаки, которыми Джо решил поделиться с аудиторией, там повествование, как таковое, затухает и остается лишь набор руководств к действию. Так как оригинал текста обладает совершенно неприемлемыми габаритами, мы разделили эту историю на две примерно равные по размерам статьи. Сегодня — первая из двух публикаций. Приятного чтения.

Эта статья основана на исследовании истории Vim и прочтении его руководства пользователя от корки до корки. Надеюсь, эти заметки помогут вам открыть (или переоткрыть?) для себя основные функциональные возможности этого редактора, а также позволят отказаться от использования предупакованных файлов vimrc и более вдумчиво использовать плагины.

vim linux что это. Смотреть фото vim linux что это. Смотреть картинку vim linux что это. Картинка про vim linux что это. Фото vim linux что это

Список литературы

История

Рождение vi

Такие редакторы как QED ed и em разрабатывались для печатных терминалов, которые в основной своей массе были обычными электрическими пишущими машинками с подключенным к ним модемом. Такие «полнокопирные» терминалы выводили команды на бумагу и очевидно, после ввода внести какие-либо исправления было невозможно. Поэтому процесс редактирования заключался в ручных правках пользовательских команд на бумаге, а после — повторного ввода.

К 1976 году появились видеотерминалы, например, ADM-3A. В Ex-редактор добавили «открытый режим», который позволял редактирование через видеотерминал в рамках одной страницы. Был добавлен и визуальный режим для ориентирования на строках терминала с помощью курсора. Визуальный режим активировался командой «vi» и постоянно обновлял отображаемый на экране файла, сохраняя при этом позиционирование командной строки в нижней части экрана. Интересный факт: на клавишах h, j, k, l на ADM-3A были нанесены стрелки, которые позволяли перемещать курсор в vi.

Узнать больше об этом периоде перехода от ed к ex/vi можно в интервью Билла Джоя. В нем он рассказывает о том, как создал ex/vi и о некоторых вещах, которые в итоге его разочаровали.

Классический vi — это просто альтер-это ex. Оба представлены одним и тем же двоичным файлом, который может запускаться как в ex-режиме, так и vi-режиме в зависимости от имени исполняемого файла. Наследие всей этой истории в том, что ex / vi «раскрывается» при использовании, почти не требует системных ресурсов и может работать в условиях ограниченной полосы пропускания. Он также доступен в большинстве существующих систем и полностью описан в POSIX.

От vi к Vim

Будучи производным от ed, редактор ex / vi являлся интеллектуальной собственностью AT&T. Чтобы использовать vi на платформах, отличных от Unix, люди должны были писать клоны, которые имели другую кодовую базу исходника.

Вот некоторые из них:

В версии 1.22 Vim был переименован в «Vi IMproved», что указывает на превосходство копии над оригиналом. Вот график следующих основных версий с описанием некоторых функций:

vim linux что это. Смотреть фото vim linux что это. Смотреть картинку vim linux что это. Картинка про vim linux что это. Фото vim linux что это

Для получения дополнительной информации о каждой версии стоит курить help, например, для vim8. Чтобы увидеть планируемые обновления, а так же список известных ошибок, стоит обратиться к todo.txt.

Например, восьмая версия включала некоторую поддержку асинхронных заданий по причине давления на проект со стороны NeoVim. Разработчики последнего хотели запускать отладку и REPL для веб-сценариев прямо внутри редактора.

Вообще Vim суперпортативный. Приспосабливаясь всю историю своего существования к работе на абсолютно разных платформах, этот редактор был вынужден держаться в рамках «легкой» культуры кодинга. Vim работает на OS / 390, Amiga, BeOS и BeBox, Macintosh Classic, Atari MiNT, MS-DOS, OS / 2, QNX, RISC-OS, BSD, Linux, OS X, VMS и MS-Windows. Вы можете положиться на Vim где угодно, и плевать, какое оборудование вы используете.

В конце пути оригинального vi, в 2002 году, исходный код ex / vi все же был опубликован под лицензией свободного программного обеспечения BSD. Сорцы доступны по адресу ex-vi.sourceforge.net.

Но давайте перейдем к делу. Прежде чем начать анализ Vim, полезно знать, как он организует и читает свои файлы конфигурации.

Иерархия конфига

Этот список стоит почитать. Попробуйте угадать, что делают эти скрипты и запишите каталоги, в которых они размещены.

Список оказался длиннее, чем вы ожидали? Если вы установили множество плагинов, то редактору предстоит и многое сделать. Проверьте, что замедляет его работу при запуске, выполнив следующую команду создания start.log:

Просто сравните, как быстро Vim запускается с из коробки:

Чтобы определить, какие именно сценарии следует подгружать при запуске или во время загрузки буфера, нужно проверить «runtime path» Vim. Этот путь представлен разделенным через запятую списком каталогов, каждый из которых содержит в себе общую структуру. Vim проверяет эти структуры в каждом каталоге в поиске своих скриптов запуска. Обрабатываются каталоги строго по порядку, в котором они расположены в списке.

Проверьте путь выполнения в своей системе через эту команду:

Моя система содержит следующие каталоги, указанные по умолчанию для runtimepath-проверки. Не все из них даже существуют, но Vim все равно будет пытаться обратиться к ним и станет проверять содержимое, если они все же на месте:

/.vim
Домашний каталог, предназначен для созданных профилей.

/usr/local/share/vim/vimfiles
Общесистемный каталог Vim, для профилей с правами системного администратора.

/usr/local/share/vim/vimfiles/after
В общесистемном каталоге Vim есть еще каталог «after». Он предназначен для добавления персональных настроек системного администратора «по умолчанию».

/.vim/after
Каталог «after» в домашнем каталоге. Нужен для того, чтобы личные конфиги не отменяли или не пересекались с общесистемным или настройками «по умолчанию».

Вообще каталоги обрабатываются в том же порядке, в котором они записаны в start.log, исключение сделано только для «after». Этот всегда стоит в конце списка и обрабатывается последним.

При обработке каждого каталога, Vim ищет в них подпапки с конкретными именами. Чтобы больше узнать об этом, посмотрите help runtimepath. Вот краткое описание тех, которые мы будем рассматривать далее по тексту:

plugin /
Тут лежат файлы сценариев Vim, которые автоматически загружаются при редактировании любого типа файла. Еще их называют «глобальными».

autoload /
(Не путать с «plugin»). Эти скрипты автозагрузки содержат функции, которые подтягиваются только по запросу других скриптов.

ftdetect /
Скрипты для определения типов файлов. В своей работе они опираются на расширение, расположение или внутреннее содержимое файла.

ftplugin /
Скрипты, которые выполняются при редактировании файлов известного типа.

compiler /
Определяет, как запускать различные компиляторы или lint-проверку, и как анализировать их вывод. Может быть разделен сразу между несколькими ftplugins. Compiler не выполняется автоматически и должен вызываться командой.

pack /
Контейнер для собственных пакетов Vim 8, преемник управления пакетами в стиле Pathogen. Имеет собственную систему упаковки, не требует для работы стороннего кода.

Сторонние плагины

Плагины — это просто скрипты Vim, для выполнения которых их достаточно разместить в правильные места в runtimepath. В целом, процесс установки крайне прост: просто загрузите файл(ы). Проблема заключается в том, что некоторые плагины достаточно трудно обновить или удалить, поскольку их разбрасывает по разным подкаталогам и они засоряют пути выполнения своими сценариями. То есть, в итоге сложно определить, какой файл к какому плагину относится.

Именно для решения этого вопроса и стали развиваться «менеджеры плагинов». На vim.org был реестр плагинов как минимум до 2003 года включительно (если архив не врет). Однако в моду «менеджеры плагинов» как сущность вошли только к 2008 году.

Эти инструмент добавляют специальные каталоги для плагинов, чтобы отслеживать пути выполнения и расставлять теги, по которым можно отслеживать плагины. Большинство менеджеров также подтягивают обновления плагинов из сети.

Ниже я выстроил менеджеры плагинов по хронологии их возникновения. За основу были взяты диапазоны дат выхода первой и последней версии. Если официальных релизов не было, то я брал за основу самые ранние даты выхода и последнего обновления.

Путь наименьшего сопротивления в управлении плагинами — это просто использовать встроенную функциональность Vim 8, которая не требует подтягивания какого-то стороннего кода. Давайте рассмотрим, как это делать.

Для начала создайте две директории внутри вашего runtimepath: opt и start.

Обратите внимание на плейсхолдер «foobar» (имя можно изменить). Он полностью классифицирует все пакеты, которые попадут внутрь. Большинство пользователей просто сбрасывают все свои плагины в какую-нибудь одну категорию и, в общем-то, это нормально. Выберите любое имя, которое вам нравится; Я продолжу использовать foobar. В теории, вы также можете создать несколько категорий, например

Для рассмотрения этого примера мы добавим плагин нечеткого поиска ctrlp в opt. Загрузите и распакуйте его последнюю версию по адресу:

Эта команда создаст папку

Эта команда создаст файл с именем «tags» в папке с сорцами пакета, которые делают темы доступными для просмотра во внутренней системе Vim. Альтернативный путь: запустить helptags ALL после загрузки пакета, и команда позаботится обо всех файлах и их путях выполнения.
Когда вы захотите использовать пакет, просто загрузите его и помните, что в этом случае работает завершение с помощью табуляции, так что полное имя вводить не потребуется:

Базовый каталог Packadd лежит в runtimepath, что позволяет ему использовать сценарии его плагина и ftdetect. После загрузки ctrlp вы сможете использовать команду CTRL-P, чтобы открыть поиск файлов по частичному совпадению.

Некоторые люди следят за своим каталогом

Бэкапы и откаты версий

В зависимости от пользовательских настроек, Vim может защитить вас от четырех возможных причин потери данных:

«Не создавайте файл подкачки. Управляйте всем через контроль версий».
«Резервные копии для ссыкунов. Используйте контроль версий».
«Только контроль версий! Только хардкор!»
«Мы живем в мире контроля версий, поэтому свопам и резервным копиям место на помойке».
«Зачем вам файлы резервных копий, если достаточно контроля версий».
«Я никогда не пользовался файлами резервных копий Vim… Пользуйтесь контролем версий».
«Большинство вещей можно найти с помощью контроля версий».
«Отключите резервное копирование файлов, ведь вы все равно пользуетесь системой контроля версий ;)».
«И пришел контроль версий, и Git спас нас».
«Отключите файлы подкачки и систему резервного копирования. Всегда используйте контроль версий! ВСЕГДА!»
«Мне не нужно резервное копирование, ведь я работаю с контролем версий».

Ирония в том, что комменты выше отражают лишь понимание четвертого и, частично, третьего типа сбоя. Если вы откажетесь от файла подкачки и резервного копирования, вы лишитесь защиты в случая, описанных в пунктах №1 и №2.

Вот пример конфигурации, которую я рекомендую для обеспечения безопасной работы:

Эти настройки включают резервное копирование для незавершенной записи, но не сохраняют файлы после успешного окончания операции, потому что у нас же есть контроль версий, самый лучший контроль версий, бла-бла-бла и т.д. и т.п. Обратите внимание на то, что вам может понадобиться mkdir

Стоит отметить, что особенность путей нашего конфига заключаются в том, что закрываются они всегда слэшем. Такое написание позволяет функции устранять возможную неоднозначность в путях файлов подкачки и резервных копий для файлов с одинаковыми именами, которые при этом находятся в разных каталогах. Например, файл подкачки для / foo / bar будет сохранен в

Также наш Vim сохраняет историю откатов для каждого файла, так что вы можете восстановить нужную версию даже после выхода из режима редактирования. Хотя подобная функция может и показаться избыточной на фоне уже имеющегося у нас файла подкачки, история откатов является дополнительным рубежом защиты во время записи файла.

Когда мы говорим об откатах, то стоит помнить о том, что Vim поддерживает полное древо истории редактирования файлов. Это означает, что вы можете внести изменение, откатить его, а потом повторить те же изменения вновь, и все это будет тремя разными точками восстановления. Время и объем внесенных изменений можно проверить с помощью команды undolist, но именно древо вытащить из нее проблематично. С помощью этой команды вы можете перемещаться между конкретными изменениями или разными версиями в зависимости от времени: прыгать с шагом в 5 минут, или опираться на количество сохраненных файлов. При этом на мой взгляд, навигация по каталогу откатов с помощью плагина — хороший вариант, но undotree — вариант железобетонный.

Включение перечисленных настроек резервного копирования и восстановления файлов может принести вам некоторое душевное спокойствие. Раньше я методично сохранял все файлы вручную после внесения блока изменений или если отходил от компьютера. Потом я переучился: старался оставлять документы несохраненными по несколько часов кряду. В итоге это заставило меня досконально изучить, как работает файл подкачки.

Include и path

Большинство языков программирования позволяют включать (include) один модуль или файл в другой. Vim умеет отслеживать идентификаторы через path, include, suffixesadd, и includeexpr. Поиск по индентификатору (см. help include-search) — это альтернатива мониторингу файлов по тегам ctags для системных заголовков.

Если все работает правильно, вы можете нажать [i на идентификаторе, чтобы получить его описание, либо же нажать [d для получения макропостоянной переменной. Также при использовании gf на имени файла Vim ищет путь перехода к нему. Поскольку путь влияет и на команду :find, некоторые пользователи имеют привычку добавлять **/* или другие общедоступные каталоги к имени пути для того, чтобы использовать нечеткий поиск. Последнее замедляет поиск по идентификатору и каталогам, т.к. просматривается и то, что не имеет отношения к нашей задаче.

Есть способ получить тот же эффект нечеткого поиска, не загрязняя при этом сам путь. Суть заключается в нажатии (обычно это пробел с обратным косым слэшем) и вводе имени файла с использованием табуляции или CTRL-D. Это поможет найти файл.

И опять повторюсь: параметр path был разработан для верхних (headers) файлов. Если вам нужны еще пруфы, есть целая команда: checkpath, которая показывает, работает ли путь. Загрузите любой файл из C и запустите checkpath. Он вернет вам дамп файлов, которые он не смог найти, но которые были включены в текущий файл. Также стоит помнить, что checkpath принудительно сбрасывает всю иерархическую цепочку файлов, зацепленных за текущий.

Конструкция вида «**3» — это ограничитель глубины поиска по каталогам. В этом конкретном случае, глубина ограничена тремя подкаталогами. Нужно это, что избежать блокировки поиска по идентификатору.

Ниже вы увидите другие шаблоны, в которые можете добавить свой путь в случае, если :checkpath говорит, что файлы не могут быть найдены. Но, конечно, все зависит от ваших настроек и системы.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *