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 <C-p>: NERDTreeToggle<CR> - назначение клавиш Ctrl + p на открытие<strong>NERD Tree</strong>.</li>
45
<li>map <C-p>: NERDTreeToggle<CR> - назначение клавиш 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 <buffer> <C-f>: %! vue-formatter<CR> - отдельная настройка, чтобы удобно было форматировать Vue-файлы с фактически HTML-кодом внутри;</p>
59
<p>autocmd FileType vue noremap <buffer> <C-f>: %! vue-formatter<CR> - отдельная настройка, чтобы удобно было форматировать 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>