HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#статьи</a></p>
1 <p><a>#статьи</a></p>
2 <ul><li>6 дек 2022</li>
2 <ul><li>6 дек 2022</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><p>Мы запустили бесплатный курс по легендарному редактору кода Vim. В нём 16 уроков. Сегодня изучим autocomplete и .vimrc и познакомимся с Neovim.</p>
4 </ul><p>Мы запустили бесплатный курс по легендарному редактору кода Vim. В нём 16 уроков. Сегодня изучим autocomplete и .vimrc и познакомимся с Neovim.</p>
5 <p>Иллюстрация: Polina Vari для Skillbox Media</p>
5 <p>Иллюстрация: Polina Vari для Skillbox Media</p>
6 <p>Журналист, редактор. Фанат виртуальности во всех её видах - потому о ней и пишет.</p>
6 <p>Журналист, редактор. Фанат виртуальности во всех её видах - потому о ней и пишет.</p>
7 <p>Мы публикуем видеоуроки и текстовые расшифровки - вы можете смотреть видео или читать теорию.</p>
7 <p>Мы публикуем видеоуроки и текстовые расшифровки - вы можете смотреть видео или читать теорию.</p>
8 <p><strong>Автор курса</strong></p>
8 <p><strong>Автор курса</strong></p>
9 <h3>Паша Калашников</h3>
9 <h3>Паша Калашников</h3>
10 <p>Тимлид в Purple Magic, продюсер видео в Red Magic, соведущий IT Way Podcast, автор курсов по этому вашему программированию. Любит Ruby.</p>
10 <p>Тимлид в Purple Magic, продюсер видео в Red Magic, соведущий IT Way Podcast, автор курсов по этому вашему программированию. Любит Ruby.</p>
11 <p>Мы наконец дошли до трёх последних уроков. Разберём, для чего нужен autocomplete, более подробно изучим .vimrc и расскажем о Neovim.</p>
11 <p>Мы наконец дошли до трёх последних уроков. Разберём, для чего нужен autocomplete, более подробно изучим .vimrc и расскажем о Neovim.</p>
12 <p>Автокомплит - это автоматическое завершение слова, которое вы печатаете. Очень полезная фича в программировании, да и в любом наборе текста, хотя и не все любят ей пользоваться.</p>
12 <p>Автокомплит - это автоматическое завершение слова, которое вы печатаете. Очень полезная фича в программировании, да и в любом наборе текста, хотя и не все любят ей пользоваться.</p>
13 <p>Самым мощным инструментом для этого многие считают плагин<a>YouCompleteMe</a>. К сожалению, у автора отношения с ним не сложились: как-то раз удалось его завести для Ruby, но потом он отвалился, и больше восстанавливать его не стали. Хотя для других языков программирования он работает отлично.</p>
13 <p>Самым мощным инструментом для этого многие считают плагин<a>YouCompleteMe</a>. К сожалению, у автора отношения с ним не сложились: как-то раз удалось его завести для Ruby, но потом он отвалился, и больше восстанавливать его не стали. Хотя для других языков программирования он работает отлично.</p>
14 <p>Впрочем, есть и стандартный автокомплит Vim:</p>
14 <p>Впрочем, есть и стандартный автокомплит Vim:</p>
15 <em>Скриншот: Skillbox Media</em><p>Рассмотрим способы его настройки. Чтобы посмотреть варианты возможного автокомплита, при вводе нажмите<strong>Ctrl + n</strong>и перемещайтесь по списку:</p>
15 <em>Скриншот: Skillbox Media</em><p>Рассмотрим способы его настройки. Чтобы посмотреть варианты возможного автокомплита, при вводе нажмите<strong>Ctrl + n</strong>и перемещайтесь по списку:</p>
16 <em>Скриншот: Skillbox Media</em><p>С помощью клавиши<strong>Enter</strong>можно выбрать понравившийся вариант, клавиша<strong>Esc</strong>закрывает автокомплит.</p>
16 <em>Скриншот: Skillbox Media</em><p>С помощью клавиши<strong>Enter</strong>можно выбрать понравившийся вариант, клавиша<strong>Esc</strong>закрывает автокомплит.</p>
17 <p>Словарь автодополнения Vim можно обновлять по своему усмотрению. Для этого создаём директорию<strong>complete</strong>в директории<strong>~/.vim</strong>. В ней создаём файл<strong>skillbox.vim</strong>:</p>
17 <p>Словарь автодополнения Vim можно обновлять по своему усмотрению. Для этого создаём директорию<strong>complete</strong>в директории<strong>~/.vim</strong>. В ней создаём файл<strong>skillbox.vim</strong>:</p>
18 <em>Скриншот: Skillbox Media</em><p>Туда добавляем слова skillbox и vim_da_best:</p>
18 <em>Скриншот: Skillbox Media</em><p>Туда добавляем слова skillbox и vim_da_best:</p>
19 <em>Скриншот: Skillbox Media</em><p>Далее открываем vimrc-файл и там пишем вот такой код:</p>
19 <em>Скриншот: Skillbox Media</em><p>Далее открываем vimrc-файл и там пишем вот такой код:</p>
20 <em>Скриншот: Skillbox Media</em><p>Как можно догадаться, этот код подгружает в автокомплит словарь слова из нашего нового файла, если тип файла Ruby. Откроем Ruby-файл. Начинаем вводить sk и нажимаем<strong>Ctrl + n</strong>:</p>
20 <em>Скриншот: Skillbox Media</em><p>Как можно догадаться, этот код подгружает в автокомплит словарь слова из нашего нового файла, если тип файла Ruby. Откроем Ruby-файл. Начинаем вводить sk и нажимаем<strong>Ctrl + n</strong>:</p>
21 <em>Скриншот: Skillbox Media</em><p>Как видим, редактор предлагает нам автозавершение<strong>skillbox</strong>. Это работает и <strong>vim_da_best</strong>тоже.</p>
21 <em>Скриншот: Skillbox Media</em><p>Как видим, редактор предлагает нам автозавершение<strong>skillbox</strong>. Это работает и <strong>vim_da_best</strong>тоже.</p>
22 <p>Естественно, если вы не хотите устанавливать плагины для автокомлита, вы можете скачать подходящие словари для языков программирования, можете сделать словарь для конкретного проекта. Как и во всём в Vim, у вас развязаны руки!</p>
22 <p>Естественно, если вы не хотите устанавливать плагины для автокомлита, вы можете скачать подходящие словари для языков программирования, можете сделать словарь для конкретного проекта. Как и во всём в Vim, у вас развязаны руки!</p>
23 <p>Также по умолчанию автокомплит, если вы ему не укажете словарей, будет предлагать подходящие слова из тех, что появились в буфере за время работы редактора. Для организации более умного автокомплита вам всё-таки понадобится поработать с плагинами<strong>YouCompleteMe</strong>или<a>DeoComplete</a>. Последний, кстати, скоро заменят на плагин<strong>DCC</strong>. Внимательно читайте Readme.</p>
23 <p>Также по умолчанию автокомплит, если вы ему не укажете словарей, будет предлагать подходящие слова из тех, что появились в буфере за время работы редактора. Для организации более умного автокомплита вам всё-таки понадобится поработать с плагинами<strong>YouCompleteMe</strong>или<a>DeoComplete</a>. Последний, кстати, скоро заменят на плагин<strong>DCC</strong>. Внимательно читайте Readme.</p>
24 <p>Это была краткая инструкция по работе автокомплита в Ruby. Как и всё в Vim, он настраивается настолько глубоко, насколько это нужно пользователю.</p>
24 <p>Это была краткая инструкция по работе автокомплита в Ruby. Как и всё в Vim, он настраивается настолько глубоко, насколько это нужно пользователю.</p>
25 <em>Скриншот: Skillbox Media</em><p>Ещё раз пробежимся по .vimrc. Большинство команд и настроек оттуда мы уже обсуждали; рассмотрим на конкретных примерах, где и почему их применяет автор. Откроем файл - его можно найти по адресу, указанному на картинке. Рассмотрим его построчно:</p>
25 <em>Скриншот: Skillbox Media</em><p>Ещё раз пробежимся по .vimrc. Большинство команд и настроек оттуда мы уже обсуждали; рассмотрим на конкретных примерах, где и почему их применяет автор. Откроем файл - его можно найти по адресу, указанному на картинке. Рассмотрим его построчно:</p>
26 <em>Скриншот: Skillbox Media</em><p>Команда set nu, как мы помним, показывает номера строк.</p>
26 <em>Скриншот: Skillbox Media</em><p>Команда set nu, как мы помним, показывает номера строк.</p>
27 <p>set expandtab - интересная настройка, которая при нажатии на <strong>Tab</strong>вставляет то количество пробелов, которое вам нужно. Помните известную сцену из сериала "Силиконовая долина" про проблему табов и пробелов: мол, пробелы нужно нажимать многократно, а табы - лишь однажды или дважды, зато чужие настройки табуляции влияют на отображение кода. Как раз эта проблема и решена здесь! Нажимаешь Tab один раз, появляются два пробела:</p>
27 <p>set expandtab - интересная настройка, которая при нажатии на <strong>Tab</strong>вставляет то количество пробелов, которое вам нужно. Помните известную сцену из сериала "Силиконовая долина" про проблему табов и пробелов: мол, пробелы нужно нажимать многократно, а табы - лишь однажды или дважды, зато чужие настройки табуляции влияют на отображение кода. Как раз эта проблема и решена здесь! Нажимаешь Tab один раз, появляются два пробела:</p>
28 <em>Скриншот: Skillbox Media</em><p>И никакая настройка табуляции не повлияет на отображение кода. Магия!!!</p>
28 <em>Скриншот: Skillbox Media</em><p>И никакая настройка табуляции не повлияет на отображение кода. Магия!!!</p>
29 <p>set sw=2 - это количество пробелов в одном табе.</p>
29 <p>set sw=2 - это количество пробелов в одном табе.</p>
30 <p>set sts=2 - эта настройка нужна для того, чтобы удалять в выравнивании одним нажатием<strong>Backspace</strong>сразу два пробела.</p>
30 <p>set sts=2 - эта настройка нужна для того, чтобы удалять в выравнивании одним нажатием<strong>Backspace</strong>сразу два пробела.</p>
31 <p>set nocompatible - выключение совместимости с редактором Vi.</p>
31 <p>set nocompatible - выключение совместимости с редактором Vi.</p>
32 <p>filetype off - мы уже обсуждали, почему эту настройку иногда лучше отключить.</p>
32 <p>filetype off - мы уже обсуждали, почему эту настройку иногда лучше отключить.</p>
33 <p>Следующие четыре строчки нужны для лучшей работы<strong>vim-plug</strong>под Linux:</p>
33 <p>Следующие четыре строчки нужны для лучшей работы<strong>vim-plug</strong>под Linux:</p>
34 <em>Скриншот: Skillbox Media</em><p>Далее идёт список плагинов, о многих мы с вами уже говорили:</p>
34 <em>Скриншот: Skillbox Media</em><p>Далее идёт список плагинов, о многих мы с вами уже говорили:</p>
35 <em>Скриншот: Skillbox Media</em><ul><li>syntax enable - включение подсветки синтаксиса;</li>
35 <em>Скриншот: Skillbox Media</em><ul><li>syntax enable - включение подсветки синтаксиса;</li>
36 <li>filetype plugin indent on - включение работы с типами файлов от плагинов;</li>
36 <li>filetype plugin indent on - включение работы с типами файлов от плагинов;</li>
37 <li>сохранение файла на F2;</li>
37 <li>сохранение файла на F2;</li>
38 <li>выход без сохранения на F3;</li>
38 <li>выход без сохранения на F3;</li>
39 <li>сохранить и выйти на F4;</li>
39 <li>сохранить и выйти на F4;</li>
40 <li>F5 - убрать подсветку результатов поиска. Полезная фича, сперва посмотреть все вхождения слова в файл, а потом выключить подсветку;</li>
40 <li>F5 - убрать подсветку результатов поиска. Полезная фича, сперва посмотреть все вхождения слова в файл, а потом выключить подсветку;</li>
41 <li>на F7 мы задали сложную замену старого типа хеширования в Ruby на новый;</li>
41 <li>на F7 мы задали сложную замену старого типа хеширования в Ruby на новый;</li>
42 <li>на F8 - включение и выключение подсветки колонки. Очень помогает, когда нужно найти потерявшуюся закрывающую скобку или end. Обратите внимание, что, если к некоторым настройкам по set добавить в конец !, они будут включаться, если выключены, и выключаться, если включены;</li>
42 <li>на F8 - включение и выключение подсветки колонки. Очень помогает, когда нужно найти потерявшуюся закрывающую скобку или end. Обратите внимание, что, если к некоторым настройкам по set добавить в конец !, они будут включаться, если выключены, и выключаться, если включены;</li>
43 <li>на F9 - вызов утилиты превращения HTML-кода в Haml;</li>
43 <li>на F9 - вызов утилиты превращения HTML-кода в Haml;</li>
44 <li>set relativenumber - мы с вами обсуждали, зачем это нужно;</li>
44 <li>set relativenumber - мы с вами обсуждали, зачем это нужно;</li>
45 <li>map &lt;C-p&gt;: NERDTreeToggle&lt;CR&gt; - назначение клавиш Ctrl + p на открытие<strong>NERD Tree</strong>.</li>
45 <li>map &lt;C-p&gt;: NERDTreeToggle&lt;CR&gt; - назначение клавиш Ctrl + p на открытие<strong>NERD Tree</strong>.</li>
46 </ul><p>Далее идут назначения клавиш на быстрые переходы между окнами.</p>
46 </ul><p>Далее идут назначения клавиш на быстрые переходы между окнами.</p>
47 <p>Следующий блок - довольно интересный:</p>
47 <p>Следующий блок - довольно интересный:</p>
48 <em>Скриншот: Skillbox Media</em><p>По умолчанию некоторые плагины не включают подсветку синтаксиса для некоторых расширений файлов, хотя код в этих файлах был на тех же языках. Автор добавил эти расширения и указал Vim включить подсветку синтаксиса для каждого языка:</p>
48 <em>Скриншот: Skillbox Media</em><p>По умолчанию некоторые плагины не включают подсветку синтаксиса для некоторых расширений файлов, хотя код в этих файлах был на тех же языках. Автор добавил эти расширения и указал Vim включить подсветку синтаксиса для каждого языка:</p>
49 <p>au BufRead,BufNewFile *.thor set syntax=ruby</p>
49 <p>au BufRead,BufNewFile *.thor set syntax=ruby</p>
50 <p>au BufRead,BufNewFile *.simplecov set syntax=ruby</p>
50 <p>au BufRead,BufNewFile *.simplecov set syntax=ruby</p>
51 <p>au BufRead,BufNewFile *.es6 set filetype=javascript</p>
51 <p>au BufRead,BufNewFile *.es6 set filetype=javascript</p>
52 <p>au BufRead,BufNewFile *.vue set filetype=javascript</p>
52 <p>au BufRead,BufNewFile *.vue set filetype=javascript</p>
53 <p>au BufRead,BufNewFile *.vue set syntax=javascript</p>
53 <p>au BufRead,BufNewFile *.vue set syntax=javascript</p>
54 <p>au BufRead,BufNewFile *.go set tabstop=2</p>
54 <p>au BufRead,BufNewFile *.go set tabstop=2</p>
55 <p>au BufRead,BufNewFile Makefile set tabstop=2</p>
55 <p>au BufRead,BufNewFile Makefile set tabstop=2</p>
56 <p>au BufRead,BufNewFile Dockerfile* set syntax=dockerfile</p>
56 <p>au BufRead,BufNewFile Dockerfile* set syntax=dockerfile</p>
57 <p>au BufRead,BufNewFile .eslintrc set syntax=json</p>
57 <p>au BufRead,BufNewFile .eslintrc set syntax=json</p>
58 <p>au BufRead,BufNewFile *.tsx set syntax=typescript</p>
58 <p>au BufRead,BufNewFile *.tsx set syntax=typescript</p>
59 <p>autocmd FileType vue noremap &lt;buffer&gt; &lt;C-f&gt;: %! vue-formatter&lt;CR&gt; - отдельная настройка, чтобы удобно было форматировать Vue-файлы с фактически HTML-кодом внутри;</p>
59 <p>autocmd FileType vue noremap &lt;buffer&gt; &lt;C-f&gt;: %! vue-formatter&lt;CR&gt; - отдельная настройка, чтобы удобно было форматировать Vue-файлы с фактически HTML-кодом внутри;</p>
60 <p>set hlsearch - подсветка поиска;</p>
60 <p>set hlsearch - подсветка поиска;</p>
61 <p>colorscheme molokai - назначение цветовой схемы.</p>
61 <p>colorscheme molokai - назначение цветовой схемы.</p>
62 <p>А эти строки отвечают за добавление собственного словаря автокомплита для Ruby:</p>
62 <p>А эти строки отвечают за добавление собственного словаря автокомплита для Ruby:</p>
63 <p>if has ("autocmd")</p>
63 <p>if has ("autocmd")</p>
64 <p>autocmd FileType ruby set complete+=k/home/pavel/.vim/complete/custom.vim</p>
64 <p>autocmd FileType ruby set complete+=k/home/pavel/.vim/complete/custom.vim</p>
65 <p>endif " has("autocmd")</p>
65 <p>endif " has("autocmd")</p>
66 <p><a>Neovim</a>, или Nvim, - самый перспективный и уже занявший достойное место форк Vim.</p>
66 <p><a>Neovim</a>, или Nvim, - самый перспективный и уже занявший достойное место форк Vim.</p>
67 <p>Новая версия редактора лишена многих проблем. Рассмотрим их вкратце.</p>
67 <p>Новая версия редактора лишена многих проблем. Рассмотрим их вкратце.</p>
68 <p>Код оригинального Vim сложно поддерживать, поэтому редактор перестал развиваться. Neovim имеет более чистую кодовую базу, и его ядро поддерживает много разработчиков.</p>
68 <p>Код оригинального Vim сложно поддерживать, поэтому редактор перестал развиваться. Neovim имеет более чистую кодовую базу, и его ядро поддерживает много разработчиков.</p>
69 <p>Если вы зайдёте в репозитории Vim и Neovim и откроете коммиты, то увидите, что Vim до сих пор поддерживает лично его создатель Брэм Моленар. А в Neovim коммитит большое сообщество.</p>
69 <p>Если вы зайдёте в репозитории Vim и Neovim и откроете коммиты, то увидите, что Vim до сих пор поддерживает лично его создатель Брэм Моленар. А в Neovim коммитит большое сообщество.</p>
70 <p>Neovim поддерживает язык программирования Lua, а скрипты для Vim нужно писать на менее популярном Vimscript. Программистам приходилось изучать его дополнительно, притом что он не так-то прост. Это ограничивало разработку плагинов.</p>
70 <p>Neovim поддерживает язык программирования Lua, а скрипты для Vim нужно писать на менее популярном Vimscript. Программистам приходилось изучать его дополнительно, притом что он не так-то прост. Это ограничивало разработку плагинов.</p>
71 <p>А Lua ежедневно пользуются десятки тысяч людей для других задач, и поэтому Neovim более перспективный. Да, в последние годы Vim-плагины пишут на Python, но его среда исполнения порой замедляет некоторые процессы в работе плагинов. Так что это не самое лучшее решение.</p>
71 <p>А Lua ежедневно пользуются десятки тысяч людей для других задач, и поэтому Neovim более перспективный. Да, в последние годы Vim-плагины пишут на Python, но его среда исполнения порой замедляет некоторые процессы в работе плагинов. Так что это не самое лучшее решение.</p>
72 <p>Tree-sitter - это парсер для построения синтаксических деревьев по коду. Благодаря такой интеграции Neovim может гораздо быстрее делать подсветку синтаксиса, автодополнение и выполнять вспомогательные функции плагинов, которые также берут информацию от Tree-sitter.</p>
72 <p>Tree-sitter - это парсер для построения синтаксических деревьев по коду. Благодаря такой интеграции Neovim может гораздо быстрее делать подсветку синтаксиса, автодополнение и выполнять вспомогательные функции плагинов, которые также берут информацию от Tree-sitter.</p>
73 <p>Практически все функции и возможности, которые мы с вами рассматривали в этом курсе, доступны также и в Neovim. Поэтому советуем начать знакомство с миром Vim именно через Neovim, у которого очень большое будущее. Скорее всего, он станет той же реинкарнацией редактора, какой когда-то был Vim для Vi.</p>
73 <p>Практически все функции и возможности, которые мы с вами рассматривали в этом курсе, доступны также и в Neovim. Поэтому советуем начать знакомство с миром Vim именно через Neovim, у которого очень большое будущее. Скорее всего, он станет той же реинкарнацией редактора, какой когда-то был Vim для Vi.</p>
74 <p>Хотя это дело вкуса. Выбирайте редакторы, которые нравятся именно вам, приносят радость в работе и мотивируют программировать всё больше. Так вы станете лучшими специалистами. А крутые специалисты меняют этот мир к лучшему. И не забывайте:<strong>Esc</strong><strong>:qa!</strong><strong>Enter</strong>.</p>
74 <p>Хотя это дело вкуса. Выбирайте редакторы, которые нравятся именно вам, приносят радость в работе и мотивируют программировать всё больше. Так вы станете лучшими специалистами. А крутые специалисты меняют этот мир к лучшему. И не забывайте:<strong>Esc</strong><strong>:qa!</strong><strong>Enter</strong>.</p>
75 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
75 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>