Sublime text для windows 7

Установка

Все очень просто. Распакуйте скачанный архив и скопируйте все файлы с расширением (кроме папки “backup”) в одну из следующих папок в зависимости от вашей операционной системы, подтвердив замену (если папки “Default” по указанному пути нет, то создайте ее):

ОС и тип установки Путь
Windows 7/8/10 c:\Users\Имя_пользователя\AppData\Roaming\Sublime Text 3\Packages\Default\
Windows XP c:\Documents and Settings\Имя_пользователя\Application Data\Sublime Text 3\Packages\Default\
Windows (портативная установка) \папка_с_установленным_Sublime_Text\Data\Packages\Default\
OS X ~/Library/Application Support/Sublime Text 3/Packages/Default/
Linux ~/.config/sublime-text-3/Packages/Default/

Обратите внимание, что в названии папки “Default” первая буква должна быть заглавной. Если вы назовете ее “default”, то пункты меню продублируются

В папку “backup” я поместил оригинальные файлы меню Sublime Text на случай, если вы захотите их восстановить.

Changelog

Git Integration New!

  • Files and folders in the sidebar will now display badges to indicate Git status
  • Ignored files and folders are visually de-emphasized
  • The current Git branch and number of modifications is displayed in the status bar
  • Commands have been added to open a repository, see file or folder history, or blame a file in Sublime Merge
  • Themes may customize the display of sidebar badges and status bar information
  • The setting show_git_status allows disabling Git integration
  • All file reads are done through a custom, high-performance Git library written for Sublime Merge
  • Read the documentation

Incremental Diff New!

  • All changes to a document are now represented by dedicated markers in the gutter
  • Diff markers show added, modified and deleted lines
  • The setting mini_diff controls incremental diff behavior
  • In coordination with the new Git functionality, diffs can be calculated against HEAD or the index
  • The git_diff_target setting controls base document source
  • API methods View.set_reference_document() and View.reset_reference_document() allow controlling the diff
  • The following diff-related commands were added:

    • Next Modification
    • Previous Modification
    • Revert Modification
  • Full inline diffs of each change can be displayed via the right-click context menu, or keyboard shortcuts
  • Inline diff presentation can be changed by customizing a color scheme
  • Read the documentation

Editor Control

  • Added block_caret setting
  • Improve positioning and sizing of gutter icons in some situations
  • Fixed draw_minimap_border setting not working
  • Linux: Improved input method (IM) support — fcitx, ibus, etc
  • Linux: Fixed a crash when using GTK_IM_MODULE=xim
  • Linux: Tweaked behavior of up/down when on the first and last lines of a file to better match platform conventions
  • Windows: Improved IME support

Themes/UI

  • Enhanced the .sublime-theme format:

    • Added variables support and associated revised JSON format with variables key
    • Added extends keyword to have one theme derive from another
    • Colors may be specified via CSS syntax
  • Improved performance with large numbers of rules in a .sublime-theme
  • Linux: Moved to GTK3
  • Linux: Various high DPI fixes
  • Mac: Added Mojave support
  • Mac: Add full support for macOS native tabs
  • Mac: Ensure context menus are shown without scrolling
  • Mac: Error message dialogs can now be closed with the escape key
  • Mac: Improved window placement
  • Mac: Improved resize performance
  • Windows: Fixed minimized and maximized state not restoring
  • Windows: Fixed a bug where auto complete entries would contain an ellipsis when not required

Text Rendering

  • Support for Unicode 11.0
  • Improved rendering of combining characters
  • Fixed a caret positioning bug when non-trivial graphemes are present
  • Fixed some cases of incorrect glyph positions on Windows and Mac
  • Linux: Color glyphs are now drawn properly on light backgrounds
  • Windows: Fixed a rendering issue with certain combining characters
  • Windows: Fixed some fonts having an incorrect baseline

Color Schemes

  • Added block_caret key to use in conjunction with block carets
  • caret values now respect alpha as expected, rather than pre-blending against the background color
  • Added the foreground_adjust property to rules with a background. Accepts CSS color mod adjusters to manipulate the saturation, lightness or opacity of the foreground color.

Syntax Highlighting

  • Many syntax highlighting improvements, including significant improvements to:
    • Clojure, with thanks to Nelo Mitranim
    • D
    • Go, with thanks to Nelo Mitranim
    • Lua, with thanks to Thomas Smith
  • Fixed a crash that could occur when nesting embed patterns in .sublime-syntax files
  • Syntax Tests: Allow syntax test files to have a UTF-8 BOM

Files and Folders

  • Improve performance of file watching for ignored paths on Windows and Mac
  • Windows: Fixed Open File treating paths as case-sensitive
  • Windows: Properly unlock directories after contained files are closed

API

  • Added View.set_reference_document() and View.reset_reference_document() to control diff generation
  • Phantoms are now drawn correctly in conjunction with draw_centered
  • Various minor improvements related to plugin module loading and unloading
  • Added support for hwb() colors to minihtml
  • Added a custom min-contrast() adjuster for the CSS color mod function in minihtml
  • Mac: Fixed a plugin_host crash when running a process that itself crashes

Miscellaneous

  • Fixed a Goto Symbol in Project performance regression
  • F21..F24 keys can now be bound
  • Assorted minor fixes and stability improvements
  • Linux: Improved behavior of --wait command line argument when Sublime Text isn’t currently running

Настройка Sublime Text 3

По умолчанию все настройки уже заданы и записаны в файл Preferences Settings — Default

. Если нам необходимо внести изменения, то мы лезем на сайт, ищем нужные настройки, открываемPreferences User — Default и вписываем свои значения.

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

{ //Кодировка по умолчанию. Если изменить, то русские буквы будут крякозябрами! «fallback_encoding»: «Cyrillic (Windows 1251)», //Цветовая схема. Править не нужно — выбирается через меню. «color_scheme»: «Packages/Colorsublime-Themes/SublimeNotepad2.tmTheme», //Размер шрифта «font_size»: 10.5, //Всплывающие помощники для тегов «auto_complete»:true, //Автозакрытие тегов. Пример: </ — дальше само! «auto_match_enabled»: false, //Автоперенос строк. Горизонтальной прокрутки не будет «word_wrap»: true, //Выделять строку на которой находится курсор. «highlight_line»: true, //Подсвечивать измененные вкладки. «highlight_modified_tabs»: true, //Показывать полный путь к файлу в заголовке окна. «show_full_path»:true, //Обычно софт спрашивает о сохранении файла перед закрытием программы. При «тру» — не будет, но при запуске восстановит все как было. «hot_exit»: true, //Открывать незакрытые файлы при каждом запуске программы «remember_open_files»:true, //Отображать ли номера строк. «line_numbers»:true, //Показывать кнопки закрытия на вкладках «show_tab_close_buttons»: true, //Проверка обновлений «update_check»: false } В свою сборку вложил этот файл и подробное описание по установке и настройке.

Как я переводил

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

Суть его в следующем – сначала скрипт пробегается по каждому из файлов меню и создает новый файл в JSON-формате, куда вставляется текст, подлежащий переводу (часть пунктов перевода пришлось вставлять руками из-за особенностей кода меню), который я там же и перевожу на русский. Затем скрипт повторно пробегается по каждому файлу меню и заменяет соответствующие пункты на русифицированные из JSON-файла.

Таким образом, в дальнейшем, если разработчик Sublime Text дополнит меню, мне не составит труда быстренько добавить и перевести новые пункты.

An Alternative

I mentioned before that you can rewrite your code to not use memory mapping. Instead of passing around a long lived pointer into a memory mapped file all around the codebase, you can use functions such as to copy only the portions of the file that you require into memory. This is less elegant initially than using , but it avoids all the problems you’re otherwise going to have.

Through some quick benchmarks for the way Sublime Merge reads git object files, was around ⅔ as fast as on linux. In hindsight it’s difficult to justify using over , but now the beast has been tamed and there’s little reason to change any more.

Преимущества и недостатки Sublime Text

Преимущества

Sublime Text — это легкий текстовый редактор, который подойдет любому программисту. Программа сделана со скоростью, находящейся в ее основе. Особенность программы в ее скорости и отзывчивости пользовательского интерфейса.
В редакторе доступно множество плагинов, которые интегрируются в одном месте.
Полностью настраиваемый — текстовый редактор создан, чтобы позволить конечному пользователю легко «поиграть» с ПО на свой лад. Sublime позволяет настраивать множество функций, включая: привязки клавиш, меню, фрагменты, макросы и многие другие. Кроме того, изменяйте внешний вид, настроив свои темы для ПО.
Кроссплатформенная поддержка — в редакторе доступна на большинстве распространенных настольных клиентов, включая Windows, macOS и Linux.
Sublime с открытым исходным кодом, соответственно бесплатный. Но в то же время, ПО также можно купить – по желанию

Важно отметить, что бесплатная версия работает просто отлично.
С редактором, вы можете комфортно переключаться между различными файлами. К тому же, благодаря функции Goto Anything, доступ к которой получаете непосредственно с клавиатуры с помощью клавиш Ctrl или Command + P.
Простота в использовании

Редактор подходит для любого пользователя, независимо от уровня его опыта.

Недостатки

При поддержке плагинов, к сожалению, некоторые их них в редакторе все еще глючат. Необходимо требовательно подходить к выбору плагинов

Сниппеты

Вот эта тема мне очень понравилась! Есть определённые заранее заготовленные “кирпичики”, которыми можно пользоваться для ускорения ввода текста. Кроме того, можно задавать собственные! Сейчас покажу.

Плагины

Ставим плагин Emmet, он помогает расширить количество сокращений удобных для вёрстки кода (вот список), переходим в редактор и напишем конструкцию вида:

.class1>ul>(li.MenuItem{Пункт $})*5

То есть класс, в который вложен ul, в который вложены li в количестве пяти штук, имеющие класс MenuItem с содержимым тега “Пункт ” и порядковый номер элемента.

Нажимаем Tab и конструкция развернётся в

Колдовство? Согласен!

Собственные сниппеты

Мы также можем делать собственные сниппеты. Весьма несложно. Делается следующим образом:

  1. Tools -> Developer -> New Snippet
  2. Откроется новое окно с текстом вроде этого:
  3. Тут всё в принципе понятно, создаём конструкцию вида:

    Думаю понятно, что есть что. content – то, что будет вписано. tabTrigger – по какому сочетанию клавиш это вызывать. scope – область видимости, с какими типами файлов работать. Всё есть в документации. Я же сделал цикл for и описал там некоторую текстовую константу с тремя маркерами ввода, причём в пермое задано значение по умолчанию “0”. Символы $ тут являются служебными, и те, что относятся к тексту, приходится экранировать слешем.

  4. Сохраняем сниппет:
  5. Перезапускаем редактор, чтобы изменения вступили в силу… И пробуем! Открываем php-исходник и пишем там наше ключевое слово fori и жмём Tab:

    Сначала курсор у нас стоит в позиции с выделенным текстом 0 (это значение по умолчанию ${1:0}), при нажатии следующего Tab, он перейдёт в позицию ${2}, затем ${3}. Таким образом мы можем расставить якоря, куда прыгать курсору для ввода текста! Также есть много служебных ключевых слов и методик, позволяющих модифицировать тело сниппета на лету. Ну я так не углубляюсь, просто пишу часто употребляемые конструкции.

Давайте установим руссификатор

(Размер: 21 Кб) Распаковываем скачанный архив и копируем все файлы с расширением .sublime-menu (кроме папки «backup») в одну из следующих папок (в зависимости от вашей операционной системы):

Операционная система Путь
Windows XP c:Documents and SettingsИмя_пользователяApplication DataSublime Text 3PackagesDefault
Windows 7/8 c:UsersИмя_пользователяAppDataRoamingSublime Text 3PackagesDefault
Windows (Portable версия) папка_с_программой_Sublime_TextDataPackagesDefault
OS X ~/Library/Application Support/Sublime Text 3/Packages/Default/
Linux ~/.config/sublime-text-3/Packages/Default/

Если папки «Default» по указанному пути нет, то необходимо создайть ее.

General Information

Example Plugins

Several pre-made plugins come with Sublime Text, you can find them in the Default package:

  • Packages/Default/exec.py Uses phantoms to display errors inline
  • Packages/Default/font.py Shows how to work with settings
  • Packages/Default/goto_line.py Prompts the user for input, then updates the selection
  • Packages/Default/mark.py Uses add_regions() to add an icon to the gutter
  • Packages/Default/show_scope_name.py Uses a popup to show the scope names at the caret
  • Packages/Default/arithmetic.py Accepts an input from the user when run via the Command Palette

Plugin Lifecycle

At importing time, plugins may not call any API functions, with the exception of sublime.version(), sublime.platform(), sublime.architecture() and sublime.channel().

If a plugin defines a module level function plugin_loaded(), this will be called when the API is ready to use. Plugins may also define plugin_unloaded(), to get notified just before the plugin is unloaded.

Threading

All API functions are thread-safe, however keep in mind that from the perspective of code running in an alternate thread, application state will be changing while the code is running.

Units and Coordinates

API functions that accept or return coordinates or dimensions do so using device-independent pixel (dip) values. While in some cases these will be equivalent to device pixels, this is often not the case. Per the CSS specification, minihtml treats the px unit as device-independent.

Types

This documentation generally refers to simply Python data types. Some type names are classes documented herein, however there are also a few custom type names that refer to construct with specific semantics:

Sublime Merge Roadmap

October 2, 2018
by
Jon Skinner

Just a quick post about what we’re going to be adding to Sublime Merge. This isn’t a comprehensive list, but it should give an indication of what we’re focusing on right now.

  • Branch Visualization. Sublime Merge itself handles large repositories well, but there’s more the UI could do to help users with a lot of branches on the go. We’ve got some nice things cooking for this that will be coming in the near future. Stay tuned!
  • Submodule Management. Sublime Merge understands submodules, but doesn’t provide any UI for managing them. We’ll be changing that soon.
  • Tabs. Tabs have been frequently requested by users working on several repositories at once. The Switch Repository functionality (under the File menu) helps with this, but tabs have their own benefits, so they’re on their way.
  • Git Flow Integration. Git Flow is a branching strategy with an accompanying set of command line tools. We’ve had a lot of requests for UI support here, so it’ll be making it in too.
  • Interactive Rebase. Sublime Merge currently supports editing commit messages and squashing commits (available from the commit context menu). We’ll be adding extra commit wrangling functionality, including reordering commits, moving commits between branches, and amending arbitrary commits.
  • Plugins. Sublime Text style plugins are on our radar. This isn’t at the top of the list, but they’re coming.

We’ll also be getting a new Sublime Text Dev Build out this week, rolling in all the updates from Sublime Merge, including the updated theming system and Mojave support.

Запускаем установку

После того, как установочный файл загрузится, запускаем его. Появится окно с выбором пути установки приложения. Мы оставили его по умолчанию, но при большом желании можете изменить этот путь. После этого нажимаем кнопку next и ставим галочку в поле «Add to explorer context menu», если хотим, чтобы Sublime text можно было быстро найти в меню пуск:

1. Начинаем установку

2. Добавляем в меню пуск

После этого остаётся лишь нажать кнопку «Install» и немного подождать, пока установщик скопирует нужные файлы и поставит текстовый редактор на компьютер. По завершении установки остаётся лишь нажать кнопку «Finish» и можно приступать к написанию кода:

3. Устанавливаем

4. Установка завершена

Плагины Sublime text 3

Нажмите ctrl+shift+P и снова напишите слово “install” и выберите графу Package Control: Install Package.

Выбор графы Package Control: Install Package открывает список доступных пакетов или plugins Sublime Text 3.

Emmet

Самый первый плагин для Sublime Text 3 — Emmet (с двумя m). Начните вписывать его название и увидите подсказку. В названии не должно быть никаких дополнительных слов. Нам нужно скачать Emmet к Sublime Text 3.

Кликаем по нему и дожидаемся открытия вкладки с сообщением о завершении установки, и просьбой перезапустить редактор Sublime text.

Как работает Emmet можно продемонстрировать на простом примере.

Создайте новый файл с расширением html в Sublime Text 3. Сделать это быстро можно тапнув два раза в строке вкладок, что откроет новую вкладку. Далее жмем сtrl+shift+S и сохраняем наш файл с любым именем и расширением — html.

Теперь emmet будет знать с каким языком мы хотим работать.

Для того, чтобы открыть начальный шаблон любой html страницы, будет достаточно поставить — ! и нажать tab.

Этот прием работает и с тегами. Достаточно набрать имя тега и нажать tab и он развернется в открывающий и закрывающий тег. И это еще не все. Подробный список доступных сокращений и возможных комбинаций можно увидеть на официальной странице Emmet.

All Autocomplete

Продолжим установку плагинов в Sublime Text.

Снова нажмите ctrl+shift+P и выберите “Package Control: Install” и введите название следующего плагина — All Autocomplete.

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

AutoFileName

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

BracketHighlighter

Устанавливаем в Sublime Text еще одно дополнение, которое называется BracketHighlighter.

Снова нажмите ctrl+shift+P, введите install-package и название плагина BracketHighlighter. Он будет подсвечивать открывающие и закрывающие теги, открывающие скобки и закрывающие скобки и так далее.

Подсветка цвета

Очень помогает в разработке подсветка цвета в Sublime Text 3. Установите плагин в Sublime Text — Color Highlighter и вы будете видеть, а не только догадываться какой цвет означает например код — #fe9c10. Для установки в Sublime Text 3 — Color Highlighter, используйте тот же подход — через install package.

Плагины для Python

Для разработчиков на языке Python в Sublime Text 3 рекомендую установить плагин Anaconda. Его возможности:

  • Автодополнение кода Python;
  • Python linting (подчеркивание как синтаксических ошибок, так и нарушения PEP8);
  • Документация Python;
  • McCabe — проверка сложности;
  • и много чего еще.

Установка выглядит аналогично.

Нажмите ctrl+shift+P, пишем слово “install” и выбираем графу “Package Control: Install Package”. Далее пишем — Anaconda и выбираем для установки этот пакет.

В завершении установки Sublime Text откроет вкладку с приветствием.

Еще один плагин для Python в Sublime Text 3 — Djaneiro. Установка по старой схеме.

Активация Sublime Text 3

Чтобы активировать Сублайн текст 3 откройте текстовый документ License Key, скопируйте из него один из ключей, далее запустите Сублайн и перейдите во вкладку «Справка» («Help«) — «Ввести лицензию» («Enter license«) вставляем ключ и жмем «Use License»

Установка Emmet на sublime text 3 и добавление в него Package Control.

Запускаем редактор и нажимаем Ctrl+ или «Вид» — «Показать/скрыть консоль» («View» — «Show console«), после чего снизу откроется панелька для ввода, вставьте в нее нижеприведенный код, нажмите «Enter«, немного подождите и перезапустите редактор.

import urllib.request,os,hashlib; h = 'df21e130d211cfc94d9b0905775a7c0f' + '1e3d39e33b79698005270310898eea76'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)

Теперь заходим во вкладку «Опции» — «Package Control» или нажимаем сочетание клавиш «Ctrl» + «Shift» + «P«, после чего всплывет окошко в котором выбираем «Install Package» (если не ошибаюсь 6 строка).

После чего всплывет еще окошко, в котором необходимо ввести «Emmet«, появится масса предложений, нажимаем на первое (где просто Emmet).

Ждем немного, пока не откроется вкладка с содержимым, что Эммет успешно установлен, закрываем все вкладки и перезапускаем редактор. Все можно пользоваться!

В трех словах, о том, как работает Эммет

Приведу несколько примеров для Emmet. Допустим нам нужно базовый каркас веб-страницы на html5, для этого достаточно ввести «!» и нажать «Tab».

Чтобы быстро построить к примеру блок с классом col-sm-6, необходимо ввести «.col-sm-6» и нажать «Tab», получим «<div class=»col-sm-6″></div>»

Для того чтобы построить вот такую конструкцию:

<div class="row">
	<div class="col-md-3">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nesciunt natus quidem qui, obcaecati dolorem optio nulla voluptates suscipit eligendi laboriosam quisquam odio provident facilis laudantium. Non, tempora mollitia consequuntur laborum!</div>
	<div class="col-md-3">Incidunt fugiat beatae non voluptatum at iste inventore obcaecati rem tenetur officiis reprehenderit soluta, magnam est consequatur accusantium, fuga aperiam nesciunt exercitationem dignissimos aut, ut. Voluptatibus id explicabo, suscipit porro.</div>
	<div class="col-md-3">Iste magni, nam id a, maxime incidunt aperiam hic, aliquid suscipit aspernatur maiores quaerat sequi asperiores perferendis eum delectus consectetur sint excepturi laboriosam, error. Ratione voluptatum similique sunt sequi maiores!</div>
	<div class="col-md-3">Officiis doloremque cumque ab quae similique totam voluptates? Molestias rerum eos dolor nulla quidem nam pariatur, quisquam reiciendis tenetur. Dolorum, at, illum! Corporis, itaque, impedit repellendus natus accusantium sit sunt.</div>
</div>

достаточно ввести вот такую небольшую строчку «.row>.col-md-3*4>lorem» и нажать «Tab«.

Как вы видите Emmet очень крутое дополнение, которое очень ускоряет процесс верстки, главное уметь правильно им пользоваться) Советую почитать документацию.

На сегодня все!

Что такое копирайтинг?
Сборка на основе Bootstrap 3 >

Как установить плагин Emmet в Sublime Text

Плагин Emmet позволяет писать код быстрее, благодаря сочетанием клавиш. Например базовую HTML5-разметку вы можете создать сочетанием клавиш ! + tab. Удобно правда?

Для установки Emmet перейдите в Preferences — Package Control и в открывшемся окне напечатайте install package, затем введите слово emmet и выберите его для запуска процесса установки. Иногда требуется перезагрузка Sublime Text 3 после установки новых дополнений.

Важно: плагин Emmet в Sublime Text 3 не будет генерировать код, если вы ранее не сохранили файл, например, как index.html

Более подробную работу с Emmet и горячие клавиши мы рассматриваем в курсе HTML/CSS и других курсах Профессия веб-программист. Пройдя данные курсы, вы получите знания основ программирования и создадите на практике свой первый профессиональный сайт о кино.

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

Особенности веб-редактора Sublime Text

Данный редактор веб-кода я стал использовать относительно недавно, ранее «кодил» в обычном Notepad ++. Но со временем понял, что мне его не достаточно, нужно что-то более профессиональное и в то же время легкое в освоении, где можно будет максимально автоматизировать процесс построения/редактирования кода. Такие «монстры» как ID Php Storm и Visual Studio Code мне почему-то не совсем впечатлили, хотя остаются прекрасными решениями, а вот Sublime Text сразу, как говорится, «лег на душу» и наше знакомство с ним прошло мгновенно. То, что в Notepad++ забирало минуты, в Sublime я делал за секунды.

Преимущества Sublime Text

  • Легкий, занимает мало дискового пространства, потребляет мало оперативной памяти, компактный;
  • Простой и понятный веб-интерфейс, доступный новичку и полезный опытному пользователю (содержит множество «плюшек»);
  • Поддержка различных тем, скинов, расширений, модулей, плагинов;
  • Поддержка сниппетов (заготовок) веб-кода;
  • Кросплатформенный — поддерживает все современные ОС;
  • Поддержка макросов;
  • Поддержка автосохранения.
Добавить комментарий

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

Adblock
detector