├── README.md ├── lesson1.md ├── lesson2.md ├── lesson2 ├── cat.rb ├── dog.rb └── mouse.rb ├── lesson3.md ├── lesson4.md ├── lesson5.md ├── lesson5 ├── mathPrimer.cpp └── mathPrimer.h ├── lesson6.md ├── lesson6 ├── animal.rb ├── animals │ └── mouse.rb ├── banker.rb └── road.rb ├── lesson7.md ├── lesson8.md ├── lesson8 └── .vimrc ├── lesson9.md └── presentations ├── lesson1.pdf ├── lesson2.pdf ├── lesson3.pdf ├── lesson4.pdf ├── lesson5.pdf ├── lesson6.pdf ├── lesson7.pdf ├── lesson8.pdf └── lesson9.pdf /README.md: -------------------------------------------------------------------------------- 1 | # "Vim – Это сложно" 2 | 3 | Это материалы курса лекций "Vim - Это сложно", прочитанного в рамках ныне почившей школы undev (речь и про школу, и про компанию). 4 | 5 | Можно рассматривать их как расширенную версию vimtutor. Собственно, практическая часть второго занятия - это прохождение vimtutor. Остальные лекции позволят **вам углубиться в изучение данного редактора, освоить некоторые популярные плагины и фишки, нацеленные на повышение продуктивности работы в Vim**. Бонусом в конце каждой лекции идет ссылка на полезный ресурс. 6 | 7 | ## Список лекций 8 | 9 | 1. Почему Vim? 10 | 2. Vim. Первые шаги 11 | 3. Vim. Учимся ходить. Часть 1 12 | 4. Vim. Учимся ходить. Часть 2 13 | 5. Vim. Учимся ходить. Часть 3 14 | 6. Vim. Учимся бегать. Часть 1 15 | 7. Vim. Учимся бегать. Часть 2 16 | 8. Создаем свой мир 17 | 9. Понимаем, что все уже позади 18 | 19 | 20 | ## Лицензия 21 | 22 | ![license](https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png) 23 | 24 | This work (lessons including PDFs) is licensed under a [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-nc-sa/4.0/). 25 | -------------------------------------------------------------------------------- /lesson1.md: -------------------------------------------------------------------------------- 1 | # Урок №1. Почему Vim? 2 | 3 | ## Презентация 4 | 5 | [Урок №1. Почему Vim?](presentations/lesson1.pdf) 6 | 7 | ## Практикум 8 | 9 | Отсутствует. 10 | -------------------------------------------------------------------------------- /lesson2.md: -------------------------------------------------------------------------------- 1 | # Урок №2. Vim. Первые шаги 2 | 3 | ## Презентация 4 | 5 | [Vim. Первые шаги](presentations/lesson2.pdf) 6 | 7 | ## Практикум 8 | 9 | ### 1. Перемещение курсора 10 | 11 | Для перемещения курсора нажмите клавиши `h`,`j`,`k`,`l` так, как показано ниже. 12 | 13 | ``` 14 | ^ 15 | k Советы: Клавиша `h` находится слева и перемещает влево. 16 | < h l > Клавиша `l` находится справа и перемещает вправо. 17 | j Клавиша `j` похожа на стрелку вниз. 18 | v 19 | ``` 20 | 21 | Подвигайте курсор по экрану, пока не почувствуете себя уверенно. 22 | 23 | **Замечание**: Если вы пока не уверены в том, что набираете, нажмите `` для 24 | перехода в обычный режим (Normal mode). После этого перенаберите 25 | требуемую команду. 26 | 27 | **Замечание**: Обычные клавиши управления курсором (стрелки) также должны 28 | работать. Однако, клавиши `hjkl` позволят Вам перемещаться 29 | значительно быстрее, как только Вы научитесь ими пользоваться. 30 | 31 | ### 2. Запуск и завершение работы с vim 32 | 33 | Наберите: `:q! `. 34 | 35 | Это позволит Вам выйти из редактора БЕЗ СОХРАНЕНИЯ любых сделанных изменений. 36 | Если Вы хотите сохранить изменения и выйти: 37 | 38 | ``` 39 | :wq 40 | ``` 41 | 42 | В случае, если у вас открыто несколько файлов, вы можете закрыть их 43 | БЕЗ СОХРАНЕНИЯ любых сделанных изменений выполнив: `:qall! `. 44 | 45 | Если Вам нужно сохранить файлы, то следует воспользоваться командой: 46 | 47 | ``` 48 | :wqall 49 | ``` 50 | 51 | ### 3. Редактирование текста - удаление 52 | 53 | Находясь в обычном режиме нажмите `x`, чтобы удалить символ под курсором. 54 | 55 | 1. Переместите курсор к строке внизу. 56 | 57 | 2. Для исправления ошибок, переместите курсор, пока он не окажется над 58 | удаляемым символом. 59 | 60 | 3. Нажмите клавишу `x` для удаления требуемого символа. 61 | 62 | 4. Повторите шаги 2-4 пока строка не будет исправлена. 63 | 64 | ``` 65 | The ccow jumpedd ovverr thhe mooon. 66 | ``` 67 | 68 | **Замечание**: В ходе освоения этого урока не пытайтесь запоминать, учите в 69 | процессе использования. 70 | 71 | ### 4. Редактирование текста - вставка 72 | 73 | Находясь в обычном режиме (Normal mode), нажмите `i` для вставки текста 74 | перед курсором. 75 | 76 | 1. Переместите курсор к первой строке внизу. 77 | 78 | 2. Для того, чтобы сделать первую строку идентичной второй, поместите 79 | курсор на символ ПЕРЕД которым следует вставить текст. 80 | 81 | 3. Нажмите `i` и наберите требуемые добавления. 82 | 83 | 4. После исправления всех ошибок нажмите `` для возврата в обычный режим. 84 | Повторите шаги 2-4, пока фраза не будет исправлена полностью. 85 | 86 | ``` 87 | There is text misng this . 88 | There is some text missing from this line. 89 | ``` 90 | 91 | ### 5. Редактирование текста - вставка (продолжение) 92 | 93 | Находясь в обычном режиме (Normal mode), нажмите `a` для вставки 94 | текста после курсора. 95 | 96 | 1. Переместите курсор к первой строке внизу (не важно на каком символе 97 | будет находиться курсор). 98 | 99 | 2. Нажмите `A` и наберите недостающую часть. `A` перемещает курсор в 100 | конец строки и входит в режим редактирования. 101 | 102 | 3. После внесения всех изменений нажмите `` для возврата в обычный режим. 103 | 104 | 4. Переместите курсор к третьей строке и повторите шаги 2 и 3. 105 | 106 | ``` 107 | ---> There is some text missing from th 108 | There is some text missing from this line. 109 | ---> There is also some text miss 110 | There is also some text missing here. 111 | ``` 112 | 113 | 5. Закройте Vim `:qa!` 114 | 115 | ### 6. "Почувствуй силу" 116 | 117 | **Замечание**: В ходе освоения этого урока не пытайтесь запоминать. Это 118 | упражнение дано лишь для того чтобы показать возможности Vim (только 119 | малую их часть). 120 | 121 | 1. Откройте Vim передав ему 3 файла в качестве аргументов: 122 | 123 | ``` 124 | vim lesson2/cat.rb lesson2/dog.rb lesson2/mouse.rb 125 | ``` 126 | 127 | 2. Включите запись макроса нажав `qa`. 128 | 129 | 3. Перейдите в начало файла используя `gg`. 130 | 131 | 4. Вставьте новую строку `O` и напишите `# encoding: utf-8` (так мы 132 | указываем кодировку для ruby). 133 | 134 | 5. Сохраните файл с помощью `:w`. 135 | 136 | 6. Перейдите к следующему файлу выполнив `:bn`. 137 | 138 | 7. Остановите запись макроса `q`. 139 | 140 | 8. Теперь запустим данный макрос для оставшихся файлов. Нажмите `2@a`. 141 | 142 | 9. Посмотрите на оставшиеся файлы используя `:bn`. У всех файлов 143 | вверху должна появиться строка с кодировкой. 144 | 145 | Используемые материалы: 146 | * vimtutor 147 | -------------------------------------------------------------------------------- /lesson2/cat.rb: -------------------------------------------------------------------------------- 1 | class Cat 2 | def initialize(breed, name) 3 | @breed = breed 4 | @name = name 5 | end 6 | 7 | def meow 8 | puts 'Meow.. meow' 9 | end 10 | 11 | def display 12 | puts "I am of #{@breed} breed and my name is #{@name}" 13 | end 14 | end 15 | 16 | -------------------------------------------------------------------------------- /lesson2/dog.rb: -------------------------------------------------------------------------------- 1 | class Dog 2 | def initialize(breed, name) 3 | @breed = breed 4 | @name = name 5 | end 6 | 7 | def bark 8 | puts 'Ruff! Ruff!' 9 | end 10 | 11 | def display 12 | puts "I am of #{@breed} breed and my name is #{@name}" 13 | end 14 | end 15 | 16 | -------------------------------------------------------------------------------- /lesson2/mouse.rb: -------------------------------------------------------------------------------- 1 | class Mouse 2 | def initialize(name) 3 | @name = name 4 | end 5 | 6 | def sqeak 7 | puts '.....' 8 | end 9 | 10 | def display 11 | puts "My name is #{@name}" 12 | end 13 | end 14 | 15 | -------------------------------------------------------------------------------- /lesson3.md: -------------------------------------------------------------------------------- 1 | # Урок №3 2 | 3 | ## Презентация 4 | 5 | [Vim. Учимся ходить. Часть 1](presentations/lesson3.pdf) 6 | 7 | ## Практикум 8 | 9 | ### 1. Перемещение по строке 10 | 11 | 1. Переместите курсор к первой строке внизу (не важно на каком символе будет 12 | находиться курсор). 13 | 14 | 2. Нажмите `$` для перемещения в конец строки. 15 | 16 | 3. Нажмите `0` для перемещения в начало строки. 17 | 18 | 4. Нажмите `^` для перемещения на первый не пустой символ в строке. 19 | 20 | ``` 21 | Try to navigate on this line 22 | ``` 23 | 24 | ### 2. Удаление части имени 25 | 26 | 1. Переместите курсор ко второй строке кода внизу. Курсор должен 27 | находиться в начале строки. Нажмите `0`, если это не так. 28 | 29 | 2. Нажмите `fw` для перемещения в начало имени переменной. 30 | 31 | 3. Нажмите `df_` чтобы удалить часть `wrong_` из имени переменной. 32 | 33 | ``` 34 | var wrong_name = 0 35 | ``` 36 | 37 | ### 3. Замена части имени 38 | 39 | 1. Переместите курсор ко второй строке кода внизу. Курсор должен 40 | находиться в начале строки. Нажмите `0`, если это не так. 41 | 42 | 2. Нажмите `fw` для перемещения в начало имени переменной. 43 | 44 | 3. Нажмите `ct_` чтобы удалить часть `wrong` и начать ввод. 45 | 46 | 4. Наберите `right` и нажмите ``. 47 | 48 | ``` 49 | var wrong_name = 0 50 | ``` 51 | 52 | ### 3. Исправление ошибок 53 | 54 | Взгляните на PHP код расположенный ниже. Программист, который его 55 | написал, очень спешил и допустил ряд ошибок. Давайте вместе попробуем их 56 | исправить. 57 | 58 | 1. Переместите курсор на третью строку PHP кода внизу. 59 | 60 | 2. Нажмите 'A' и поставьте `;`. 61 | 62 | 3. Перейдите в нормальный режим нажав ``. 63 | 64 | 4. Переместитесь на строку выше `k`, и нажмите `.` чтобы повторить действие. 65 | 66 | 5. Нажмите `I` и допишите `$` 67 | 68 | 6. Перейдите в нормальный режим нажав ``. 69 | 70 | ``` 71 | function foo($bar) { 72 | bar = $bar * $bar 73 | return $bar 74 | } 75 | ``` 76 | 77 | ### 4. Строка в символ 78 | 79 | Взгляните на Ruby код расположенный ниже. Давайте попробуем преобразовать 80 | строку в символ. Символ в Ruby – последовательность символов начинающаяся 81 | с `:`, как правило в нижнем регистре, разделенных подчеркиванием. (Например 82 | `:green_day`) 83 | 84 | 1. Переместите курсор ко второй строке Ruby кода внизу. Курсор должен 85 | находиться в начале строки. Нажмите `0`, если это не так. 86 | 87 | 2. Нажмите `f"`, чтобы перейти к кавычке. 88 | 89 | 3. Нажмите `r:`, чтобы заменить кавычку на двоеточие. 90 | 91 | 4. Повторите перемещение `;` и удалите кавычку `x`. 92 | 93 | 5. Нажмите `F `, и `r_` для замены. 94 | 95 | 6. Повторите перемещение `;` затем повторите действие нажав `.`. 96 | 97 | ``` 98 | def should_return_sym 99 | "This Is Symbol" 100 | end 101 | ``` 102 | 103 | ### 5. JSON => YAML 104 | 105 | Попробуем преобразовать JSON в YAML. 106 | 107 | 1. Переместите курсор к первой строке внизу 108 | 109 | 2. Нажмите `dd` чтобы удалить строку. 110 | 111 | 3. Нажмите `x` чтобы удалить текущий символ. Это должна быть кавычка. 112 | 113 | 4. Удалите пустое пространство нажав `d0`. 114 | 115 | 5. Переместитесь на кавычку `f"` и удалите ее нажав `x`. 116 | 117 | 6. Повторите перемещение на кавычку используя `;`, повторите удаление 118 | символа `.`. 119 | 120 | 7. Повторите перемещение на кавычку `;` и удалите все до конца строки `D`. 121 | 122 | 8. перейдите на строку ниже `j`. 123 | 124 | 9. Повторите "обратное" перемещение на кавычку `,` и удалите ее `x`. 125 | 126 | 10. Перейдите на начало слова `b` удалите все до начала строки `d0`. 127 | 128 | 11. Удалите лишнюю строку `dd`. 129 | 130 | ``` 131 | { 132 | "name": "John Smith", 133 | "age": 33 134 | } 135 | ``` 136 | -------------------------------------------------------------------------------- /lesson4.md: -------------------------------------------------------------------------------- 1 | # Урок №4 2 | 3 | ## Презентация 4 | 5 | [Vim. Учимся ходить. Часть 2](presentations/lesson4.pdf) 6 | 7 | ## Практикум 8 | 9 | ### 1. Включить подсветку поиска 10 | 11 | По умлочанию в VIM подсветка поиска отключена и давайте попробуем влючить ее. 12 | 13 | 1. Нажмите `:`, чтобы перейти в командный режим. 14 | 15 | 2. Наберите `set hlsearch`, нажмите `` чтобы выполнить команду. 16 | 17 | ### 2. Поиск вперед 18 | 19 | 1. Переместите курсор к первой строке внизу. 20 | 21 | 2. Перейдите на слово ex1 нажав `fx`. 22 | 23 | 3. Нажмите `*` чтобы начать поиск вперед. 24 | 25 | 4. Нажимайте `n` чтобы перейти к следующему совпадению. 26 | 27 | 5. Нажимайте `N` чтобы перейти к предыдущему совпадению. 28 | 29 | ``` 30 | This line contains ex1 word. 31 | This line contains ex1 word too. 32 | This line contains to ex1 words. ex1 33 | ``` 34 | 35 | ### 3. Поиск назад 36 | 37 | 1. Переместите курсор к первой строке внизу. 38 | 39 | 2. Перейдите на слово ex2 нажав `fx`. 40 | 41 | 3. Нажмите `#` чтобы начать поиск назад. 42 | 43 | 4. Нажимайте `n` чтобы перейти к следующему совпадению. 44 | 45 | 5. Нажимайте `N` чтобы перейти к предыдущему совпадению. 46 | 47 | ``` 48 | This line contains ex2 word. 49 | This line contains ex2 word too. 50 | This line contains to ex2 words. ex2 51 | ``` 52 | 53 | ### 4. Поиcк и замена 54 | 55 | 1. Нажмите `/` чтобы начать вводить строку поиска. 56 | 57 | 2. Введите `wrong` и нажмите ``, чтобы начать поиск. 58 | 59 | 3. Нажмите `cw`, введите `right` и нажмите ``. 60 | 61 | 4. Нажмите `n`, чтобы перейти к следующему совпадению. 62 | 63 | 5. Нажмите `.`, чтобы повторить замену. 64 | 65 | 6. Повторяйте пункты 4 и 5 пока весь текст не будет исправлен. 66 | 67 | ``` 68 | This line contains wrong word. 69 | This line contains wrong word too. 70 | This line contains to wrong words. wrong 71 | ``` 72 | 73 | ### 5. Меняем строки местами 74 | 75 | 1. Переместите курсор к первой строке внизу 76 | 77 | 2. Нажмите `dd` чтобы удалить строку. 78 | 79 | 3. Нажмите `p` чтобы вставить строку. 80 | 81 | ``` 82 | age = 33 83 | name = "John Smith" 84 | ``` 85 | 86 | ### 6. "Копипаст" мастер 87 | 88 | Написать метод sub для вычитания y из x. 89 | 90 | 1. Переместите курсор к первой строке внизу 91 | 92 | 2. Нажмите `y2j` чтобы скопировать 3 строки. 93 | 94 | 3. Нажмите `2j` чтобы перейти на 2 строки вниз. 95 | 96 | 4. Нажмите `p` чтобы вставить из буфера. 97 | 98 | 5. Нажмите `facw`, введите `sub` и нажмите ``. 99 | 100 | 6. Перейдите на строку ниже и нажмите `F+r-`, чтобы заменить `-` на `+`. 101 | 102 | ``` 103 | def add(x, y) 104 | x + y 105 | end 106 | ``` 107 | 108 | ### 6. Редактирование "колонками" 109 | 110 | Нужно заменить `margin` на `padding` и добавить `;` в конец каждой строки. 111 | 112 | 1. Переместите курсор в на первый символ второй строки внизу. 113 | 114 | 2. Нажмите `Ctrl+v`, чтобы войти в режим редактирования колонками. 115 | 116 | 3. Нажмите `3j` чтобы перейти на 3 строки вниз. 117 | 118 | 4. Нажмите `e` чтобы выделить блок до начала следцющего слова и `x` чтобы удалить. 119 | 120 | 5. Нажмите `Ctrl+v`, чтобы снова войти в режим редактирования колонками. 121 | 122 | 6. Нажмите `3j` чтобы перейти на 3 строки вниз. 123 | 124 | 7. Нажмите `I` и введите `padding`. Нажмите ``. 125 | 126 | 8. Нажмите `$` и снова перейдите в режим редактирования колонок нажав ``. 127 | 128 | 9. Нажмите `3j` чтобы перейти на 3 строки вниз. 129 | 130 | 10. Нажмите `A;`, чтобы добавить `;` в конец каждой строки. 131 | 132 | ``` 133 | div { 134 | margin-top: "1px" 135 | margin-bottom: "4px" 136 | margin-left: "2px" 137 | margin-right: "3px" 138 | } 139 | ``` 140 | 141 | ## Самостоятельная работа 142 | 143 | С помощью редактора vim приведите тексты заданий ниже из состояния A) в 144 | состояние Б), используя материалы изученные ранее. Также не возбраняется 145 | использовать другие источники 146 | 147 | В качестве ответа нужно предоставить последовательность клавиш, которая 148 | использовалась для решения. 149 | 150 | Для того чтобы записать последовательнотсь нажатй можно использовать макросы. 151 | 1. Установите курсор на первый символ в строке задания (`A`) 152 | 2. Начните записывать макрос в регистр (в примере `a`) `qa` 153 | 3. Выполните нужные преобразования над строкой 154 | 4. Завершите запись макроса `q` 155 | 5. Распечатайте содержиое регистра `:reg a` 156 | 157 | ``` 158 | А) bublegum orange 159 | Б) orange bublegum 160 | ``` 161 | 162 | ``` 163 | А) Apples: Vim is a text editor released by Bram Moolenaar in 1991 for the Amiga 164 | Б) Vim is a text editor originally released by Bram Moolenaar in 1991 for the Amiga 165 | ``` 166 | 167 | ``` 168 | А) Vegetables contain important nutrients necessary for healthy hair and skin as well. 169 | Б) Vim contains important features. 170 | ``` 171 | 172 | ``` 173 | А) [ "Vim", " is ", "hard!" ] 174 | Б) Vim is hard! 175 | ``` 176 | 177 | ``` 178 | А) [11, 22, 635,45 , 1,1, 22, 4] 179 | Б) [1, 2, 3, 4, 5, 11, 22] 180 | ``` 181 | 182 | ``` 183 | А) 9999999999999999 184 | Б) 10000000000000000 185 | ``` 186 | -------------------------------------------------------------------------------- /lesson5.md: -------------------------------------------------------------------------------- 1 | # Урок №5. Учимся ходить | Часть 3 2 | 3 | ## Презентация 4 | 5 | [Учимся ходить | Часть 3](presentations/lesson5.pdf) 6 | 7 | ## Практикум 8 | 9 | ### 1. Переключаемся между заголовком и реализацией в c++ 10 | 11 | 1. Создайте новую сессию командного интерпретатора (откройте вкладку 12 | или отдельное окно) 13 | 14 | 2. Запустите Vim указав в качестве аргументов 2 файла: lesson5/mathPrimer.h и 15 | lesson5/mathPrimer.cpp. 16 | 17 | ``` 18 | vim lesson5/mathPrimer.h lesson5/mathPrimer.cpp 19 | ``` 20 | 21 | 3. Попробуйте различные команды для работы с буферами (:ls, :bp, :bn, 22 | :b#, :b, :bd). 23 | 24 | 4. Переходите к следующему упражнению. 25 | 26 | ### 2. Держим в поле зрения пару файлов 27 | 28 | 1. Создайте горизонтальный сплит с помощью `sp`. 29 | 30 | 2. Загрузите файл с заголовком (или реализацией в зависимости от того 31 | файла, который уже открыт) выполнив `:e <имя файла>`. 32 | 33 | 3. Закройте окно `:q` 34 | 35 | 4. Создайте вертикальный сплит указав ему имя файла `vsp <имя 36 | файла>`. 37 | 38 | 5. Попробуйте попереключаться между окнами используя ` h` и 39 | ` l`. 40 | 41 | 6. Переходите к следующему упражнению. 42 | 43 | ### 3. "Looks like an IDE feature" 44 | 45 | 1. Находясь в любом из открытых окон выполните `<С-w> T` 46 | 47 | 2. Попробуйте попереключаться между вкладками используя `gt` и `gT`. 48 | 49 | 3. Закройте Vim `:qall`. 50 | 51 | ### 4. Прыгаем к реализации 52 | 53 | Для выполнения этого упражнения вам понадобится ctags. Установите его 54 | выполнив в командной строке `brew install ctags` (точная команда может 55 | различаться в зависимости от установленной ОС). 56 | 57 | 1. Перейдите в каталог `lesson5`. 58 | 59 | 2. Сгенерируйте индексный файл `ctags -R`. 60 | 61 | 3. Откройте файл `mathPrimer.h` в Vim. 62 | 63 | 4. Поместите курсор на объявление функции `add`. 64 | 65 | 5. Перейдите к реализации функции нажав ``. 66 | 67 | 6. Перейдите назад используя ``. 68 | 69 | ### 5. Вычисляем количество секунд 70 | 71 | 1. Посмотрите содержимое регистров `:reg`. 72 | 73 | 2. Измените код на свое усмотрение используя команды из предыдущих 74 | лекций. Найдите слово `int`. 75 | 76 | 3. Проверьте содержимое регистров (оно скорей всего изменилось). 77 | 78 | 4. Создайте функцию `calculateSeconds()` 79 | 80 | ``` 81 | int calculateSeconds(int hours) { 82 | return hours * ; 83 | } 84 | ``` 85 | 86 | 5. Поставьте курсор перед `;` и перейдите в режим вставки `i`. 87 | 88 | 6. Нажмите ` =` и введите 60 * 60. 89 | 90 | 7. Нажмите . 91 | 92 | 8. В результате вы должны увидеть перед `;` полученное произведение 93 | (3600). 94 | -------------------------------------------------------------------------------- /lesson5/mathPrimer.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // mathPrimer.cpp 3 | // 4 | 5 | #include "mathPrimer.h" 6 | 7 | int add(int a, int b) { 8 | return (a + b); 9 | } 10 | 11 | int subtract(int a, int b) { 12 | return (a - b); 13 | } 14 | -------------------------------------------------------------------------------- /lesson5/mathPrimer.h: -------------------------------------------------------------------------------- 1 | // 2 | // mathPrimer.h 3 | // 4 | 5 | #ifndef mathPrimer_h 6 | #define mathPrimer_h 7 | 8 | int add(int a, int b); 9 | int subtract(int a, int b); 10 | 11 | #endif 12 | -------------------------------------------------------------------------------- /lesson6.md: -------------------------------------------------------------------------------- 1 | # Урок №6. Учимся бегать | Часть 1 2 | 3 | ## Презентация 4 | 5 | [Учимся бегать | Часть 1](presentations/lesson6.pdf) 6 | 7 | ## Практикум 8 | 9 | Каждое упражнение в этом занятие лучше выполнять в отдельно запущеной сессии 10 | командного интерпретатора. 11 | 12 | Для этого откройте вкладку или отдельное окно 13 | 14 | ### 1. Пробуем grep 15 | 16 | 0. Откройте vim выполнив `vim`. 17 | 18 | 1. Наберите `:grep vim *.md`, чтобы запустить поиск `vim` во всех файлах 19 | уроков. 20 | 21 | 2. Используйте `:cnext` и `:cprev` чтобы перемещаться по совпадениям. 22 | 23 | ### 2. Поиск сначала по открытому, затем по всем файлам 24 | 25 | 0. Откройте vim выполнив `vim`. 26 | 27 | 1. Начните искать по файлу строку `vim`. 28 | 29 | 2. Наберите `:vim /` 30 | 31 | 4. Нажмите `/`, чтобы вставить в командную стру содержимое 32 | регистра поиска. 33 | 34 | 5. Наберите оставшуюся часть команды `/ *.md`, и нажмите `` 35 | чтобы начать поиск. 36 | 37 | 6. Используйте `:cnext` и `:cprev` чтобы перемещаться по совпадениям. 38 | 39 | 40 | ### 3. Рефакторинг с Ack 41 | 42 | Для выполнения этого упражнения вам потребуется плагин 43 | [ack.vim](https://github.com/mileszs/ack.vim) 44 | 45 | Задача переименовать метод класса `Animal` из `walk` в `run` 46 | 47 | 0. Откройте vim выполнив `vim`. 48 | 49 | 1. Наберите `:Ack 'walk' lesson6`, чтобы начать поиск `walk` в папке `lesson`. 50 | 51 | 2. Нажимайте `j`, `k`, чтобы перемещатья по результатам. 52 | 53 | 3. Поочередно откройте каждый файл с помощью клавиши `o` и выполните задания 54 | используя ранее полученные знания. 55 | 56 | СОВЕТЫ: 57 | 58 | - Заменить слово – `cw` 59 | - Перемещение между окнами – `Ctrl+w(h|j|k|l)` 60 | - Закрыть окно поиска – `:q` 61 | 62 | ### 4. Ctrl+p. Открываем файл. 63 | 64 | Для выполнения этого упражнения вам потребуется плагин 65 | [ctrlp.vim](https://github.com/kien/ctrlp.vim) 66 | 67 | 0. Откройте vim выполнив `vim`. 68 | 69 | 1. Нажмите `Ctrl+p`, чтобы открыть окно поиска. 70 | 71 | 2. Наберите `mo`. 72 | 73 | 3. Перемещайтесь по результатам с помощью `Ctrl+j`, `Ctrl+k` 74 | 75 | 4. Чтобы открыть файл, нажмите `Enter` 76 | 77 | ### 5. Слепой рефакторинг с :argdo 78 | 79 | Заменим во всех файлах объявление класса на модуль. 80 | 81 | 1. Выполните команду `:args lesson6/**/*.rb`. 82 | 83 | 2. Выполните команду `:agrs` чтобы посмотреть содержимое аргументов. 84 | 85 | 3. Выполните команду `:argdo %s/class/module/gI` 86 | 87 | 4. С помощью ранее изученных методов перехода по файлам, убедитесь что все 88 | верно. 89 | 90 | -------------------------------------------------------------------------------- /lesson6/animal.rb: -------------------------------------------------------------------------------- 1 | class Animal 2 | 3 | def walk 4 | "I'm walking" 5 | end 6 | 7 | end 8 | -------------------------------------------------------------------------------- /lesson6/animals/mouse.rb: -------------------------------------------------------------------------------- 1 | class Mouse 2 | end 3 | -------------------------------------------------------------------------------- /lesson6/banker.rb: -------------------------------------------------------------------------------- 1 | class Banker 2 | # implementation 3 | end 4 | -------------------------------------------------------------------------------- /lesson6/road.rb: -------------------------------------------------------------------------------- 1 | class Road 2 | 3 | def walk_animals(animals) 4 | animals.each do |animal| 5 | animal.walk 6 | end 7 | end 8 | 9 | end 10 | -------------------------------------------------------------------------------- /lesson7.md: -------------------------------------------------------------------------------- 1 | # Урок №7. Учимся бегать | Часть 2 2 | 3 | ## Презентация 4 | 5 | [Учимся бегать | Часть 2](presentations/lesson7.pdf) 6 | 7 | ## Практикум 8 | 9 | Самостоятельное изучение. 10 | 11 | -------------------------------------------------------------------------------- /lesson8.md: -------------------------------------------------------------------------------- 1 | # Урок №8. Создаем свой мир 2 | 3 | ## Презентация 4 | 5 | [Урок №8. Создаем свой мир](presentations/lesson8.pdf) 6 | 7 | ## Практикум 8 | 9 | Отсутствует. 10 | -------------------------------------------------------------------------------- /lesson8/.vimrc: -------------------------------------------------------------------------------- 1 | " Изменить лидер клавишу 2 | let mapleader = " " 3 | 4 | " Перемещаемся построчно по тексту который не поместился в строке 5 | nmap j gj 6 | nmap k gk 7 | 8 | syntax enable " Включить подсветку синтаксиса 9 | set t_Co=256 " Использовать 256 цветов 10 | set background=dark " Установить темный фон 11 | colorscheme solarized " Установить цветовую схему 12 | 13 | set nu " Включить номера строк 14 | 15 | " Поиск 16 | set hlsearch " Подсветка 17 | 18 | set incsearch " Поиск во время набора 19 | set ignorecase " Игнорировать регистр 20 | set smartcase " Учитывать регистр только если он есть 21 | " // выключает подсветку 22 | nnoremap // :nohlsearch 23 | 24 | " Предлагать все варианты при автодополнении в строке команд 25 | set wildmenu 26 | set wildmode=list:longest,full 27 | 28 | " Перемещать окно если мы находимся за 5 строк до конца и 3 символа 29 | " вправо-влево 30 | set scrolljump=5 31 | set scrolloff=3 32 | 33 | " Подсвечивать нежелательное пустое пространство 34 | set listchars=tab:›\ ,trail:•,extends:#,nbsp:. 35 | 36 | " Перемащаемся по окнам быстрее 37 | nnoremap j 38 | nnoremap k 39 | nnoremap h 40 | nnoremap l 41 | 42 | set wrap " Перенос длинных строк 43 | 44 | " Автоматически перемещать курсор на величину отступа после 45 | " открытися блока кода 46 | set autoindent 47 | set foldenable " Автоматическое форматирование кода 48 | 49 | " Передвижение блоков когда по отсупам в визуальном режиме 50 | vnoremap < >gv 52 | 53 | " Если забыли sudo 54 | cmap w!! w !sudo tee % >/dev/null 55 | 56 | 57 | " Открыть строку в гитлабе 58 | " MacOS 59 | " nnoremap og :!echo `git ghurl`/blob/`git rev-parse --abbrev-ref HEAD`/%\#L=line('.') \| xargs open 60 | 61 | " Linux chromium 62 | nnoremap ou :!echo `git url`/blob/`git rev-parse --abbrev-ref HEAD`/%\#L=line('.') \| xargs chromium-browser 63 | -------------------------------------------------------------------------------- /lesson9.md: -------------------------------------------------------------------------------- 1 | # Урок №9. Понимаем, что все уже позади 2 | 3 | ## Презентация 4 | 5 | [Понимаем, что все уже позади](presentations/lesson9.pdf) 6 | 7 | ## Практикум 8 | 9 | ### 1. Рефакторим метод 10 | 11 | 1. Перейдите к первой строке метода ниже 12 | 13 | 2. Перейдите к `p` используя `fp` 14 | 15 | 3. Выделите слово под курсором `` 16 | 17 | 4. Повторите нажатия еще пару раз 18 | 19 | 5. Нажмите `c` чтобы сменить имя переменной 20 | 21 | 6. Наберите новое имя и нажмите `` 22 | 23 | ``` 24 | def hello(poorly_named_var) 25 | poorly_named_var ||= "Nameless" 26 | puts("Hi, " + poorly_named_var) 27 | end 28 | ``` 29 | 30 | ### 2. "Брюки превращаются в элегантные шорты" 31 | 32 | 1. Перейдите к слову `Sun` ниже 33 | 34 | 2. Выделите строку `V` 35 | 36 | 3. Выделите строки ниже `6j` 37 | 38 | 4. Нажмите `` чтобы добавить виртуальный курсор в начало каждого 39 | слова 40 | 41 | 5. Вставьте `"` в начало каждого слова `I` => `"`. Нажмите `` 42 | 43 | 6. Повторите выделение `gv` 44 | 45 | 7. Повторите шаг №4 46 | 47 | 8. Вставьте `",` в конец каждого слова. Нажмите `` 48 | 49 | 9. Повторите выделение `gv` 50 | 51 | 10. Объедините строки используя `` 52 | 53 | ``` 54 | Sun 55 | Mon 56 | Tue 57 | Wen 58 | Thu 59 | Fri 60 | Sat 61 | ``` 62 | 63 | ### 3. Отноcительная нумерация 64 | 65 | Попробуйте включить/отключить относительную нумерацию `:set 66 | relativenumber` и `:set number` 67 | 68 | -------------------------------------------------------------------------------- /presentations/lesson1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/melekes/vim-is-hard-lessons/19f1475475b8509c41d6e65f5513fd5b1a1e873a/presentations/lesson1.pdf -------------------------------------------------------------------------------- /presentations/lesson2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/melekes/vim-is-hard-lessons/19f1475475b8509c41d6e65f5513fd5b1a1e873a/presentations/lesson2.pdf -------------------------------------------------------------------------------- /presentations/lesson3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/melekes/vim-is-hard-lessons/19f1475475b8509c41d6e65f5513fd5b1a1e873a/presentations/lesson3.pdf -------------------------------------------------------------------------------- /presentations/lesson4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/melekes/vim-is-hard-lessons/19f1475475b8509c41d6e65f5513fd5b1a1e873a/presentations/lesson4.pdf -------------------------------------------------------------------------------- /presentations/lesson5.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/melekes/vim-is-hard-lessons/19f1475475b8509c41d6e65f5513fd5b1a1e873a/presentations/lesson5.pdf -------------------------------------------------------------------------------- /presentations/lesson6.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/melekes/vim-is-hard-lessons/19f1475475b8509c41d6e65f5513fd5b1a1e873a/presentations/lesson6.pdf -------------------------------------------------------------------------------- /presentations/lesson7.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/melekes/vim-is-hard-lessons/19f1475475b8509c41d6e65f5513fd5b1a1e873a/presentations/lesson7.pdf -------------------------------------------------------------------------------- /presentations/lesson8.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/melekes/vim-is-hard-lessons/19f1475475b8509c41d6e65f5513fd5b1a1e873a/presentations/lesson8.pdf -------------------------------------------------------------------------------- /presentations/lesson9.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/melekes/vim-is-hard-lessons/19f1475475b8509c41d6e65f5513fd5b1a1e873a/presentations/lesson9.pdf --------------------------------------------------------------------------------