Пояснення вім логіки. Як працювати в nvim?
Tags: nvim, tutorial, linux, beginners
Published: 2022-11-10 10:33:59

## 1. Апетайзер:

У випадку якщо ви є користувачем linux/mac у вас вже інстальований vim і ви вже можете протестувати потужні команди!

Відкрити навчальний файл за допомогою віму:
```shell
vimtutor
```
1. Використовуючи стрілки перейдіть до будь якого параграфу та натисніть `dap`. Ця дія видалить параграф + порожні лінії, що оточують.
2. `.` і у вас видалиться ще один параграф. `.` працює для повторення майже всіх дій.
3. `gUiw` - зробити всі букви в слові великими. Це може бути використане для перейменування змінної до константи. `gUU`/`guu` - upcase/downcase цілий рядок.

---

## 2. Коротка історія:

- Початково був створений **vi** у 1976 рік

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pnnmho24m87952i9k4ib.png)



- Згодом був **vim**, що розшифровується як **vi IMPROVED**. Vim's автор, Bram Moolenaar, зробив публічний реліз в 1991. [git repo](https://github.com/vim/vim).

- Найбільш новий і крутий це **nvim**, розшифровується як **Neo vim**. Починалось це як форк vim, але згодом вони значно переписали код та додали круті фічі. [git repo](https://github.com/neovim/neovim).

### В чому відмінність **nvim** та **vim**?

1. **vim** це проєкт "однієї людини" і він є "засміченим". В цей час **neovim** розвивається за рахунок спільноти відповідно і якість коду вища.
2. **vim** є однопоточним, в той час як **nvim** підтримує багатопоточність.
3. Найбільшою відмінністю є вістутність підтримки/підтримка мови `Lua` для кастомізації і написання власних плагінів. `Lua` достатньо швидка, аби бути використаною для плагінів і не бути вузьким горлишком + вона значно більш читаєма аніж `Vim Script`.

---

## 3. Як завантажити?

### Завантаження використовуючи homebrew:

```shell
brew install neovim
```
Відвідайте [brew.sh](https://brew.sh/) і інсталюйте цей чудовий менеджер пакетів однією командою у випадку, якщо ви його поки що не маєте(цей менеджер підтримує лише mac/linux).

[https://github.com/neovim/neovim/wiki/Installing-Neovim](https://github.com/neovim/neovim/wiki/Installing-Neovim) - альтернативні варіанти/інструкція для windows.

---

## 4. Найсмачніше

### Vim є модальним едітором

Це означає, що ви маєте деяку кількість режимів, між котрими перемикаєтесь в залежності від того, що саме ви зараз робите. Ця ідея здається незручною і викликає питання напочатку, але спробувавши ви закохаєтесь в неї з ймовірністю в 95%, а якщо вам пощастить потрапити в решту 5% то ви просто розширите свій кругозір і дізнаєтесь про таку цікаву концепцію. Vim це дійсно супер нова концепція для тих хто не пробував модальні едітори.

### В чому основна перевага?

Основна перевага в тому, що *шорткати* можуть складатись із **однієї літери**, наприклад, просто `a` або `i`. Тобто не є вимогою затискати  shift/control/command/function і це **суттєво впливає на пальці**.

Пальцям не доводиться перебувати в постійному напруженні і це зменшує ймовірність виникнення [тунельного синдрому](https://uk.wikipedia.org/wiki/Синдром_зап%27ястного_каналу).

Vim може вирізняти **послідовність натискань**, що також допомагає з *шорткатами*. Тобто vim зрозуміє, що швидке натискання `ai` це є шорткат. Наголошу на тому, що це саме послідовність натискань, немає необхідності затискати одночасно `a`+`i`.

### Які режими є?

> Якщо не сказано інакше то за замовчуванням всі дії виконуються перебуваючи в `normal mode`.

1. Основним режимом є `normal mode`. В ньому ми пересуваємось по тексту та нам доступні всі клавіші для шорткатів. Кожна клавіша в `normal mode` виконує певну дію. Аби перейти в нього потрібно натиснути `esc`/`control[`.
2. Другим за популярністю є `insert mode`. В ньому ми власне набираємо текст, або код. Всі наші натискання друкуються в файлі, що є найбільш інтуітивним, тому із цим режимом питань не має виникнути. Аби перейти в нього потрібно натиснути `i`. Також є інші варіанти, але про них згодом)
3. `command mode` використовується для команд. Найчастіше це команди від якихось плагінів, що ви встановили. Аби перейти в нього потрібно натиснути `:`.
4. `visual mode` використовуємо для виділення тексту. Аби перейти в нього натискаємо `v`.

### РОЗКАЖИ вже як ним користуватись!

#### Базові дії:

- `gg`/`G` = go to the start of the file/end
- `hjkl` виконує роль стрілок. Звичайні стрілки в вімі також працюватимуть, але, будь ласка, утримайтесь від їх використання. Це буде не просто, але це 100% того варте. Перевага цього в тому, що це дозволить рукам більшу кількість часу залишатись на *homerow*, що в свою чергу пришвидшить вас та зменшить втому. А якщо вам цікаво мотивацію появи цього то все просто😆 – в перших клавіатур не було стрілок.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/slrw2ij8q97x83o33a22.jpg)

> В вімі дуже прокачана мнемоніка від англійських слів. Тому коли ви хочете зробити якусь дію подумавши про першу букву дії ви зрозумієте який шорткат натиснути.
 
- `ZZ`= save and quit
- `ZQ` = quit without saving
- `:w` = save or `:w filename` = save as
- `i` = insert before the cursor
- `a` = insert after the cursor aka append
- `I`/`A` = insert at the beginning of the line/end of the line
- `d` = delete
- `y` = yank(copy)
- `dd`/`yy` = delete/yank line
- `v` = visual select
- `0` = beginning of the line
- `$` = end of the line
- `w` = go forward 1 word
- `b` = go backwards 1 word
- `u` = undo operation
`control + r` = redo operation
- `/`, `n/N` = search, go to next result/go to previous result
- `.` = repeat last operation

#### Обʼєднуючи це в послідовності ви досягаєте саме потужних дій. Ви ж за цим прийшли?)

Пояснення як будується послідовність. Є декілька умовних груп, взявши по одній букві із кожного ви можете побудувати шорткат. Найчастіше це саме так і працює, але не для всіх випадків. Тобто не всі комбінації спрацюють.

> Потрібно **досить швидко** натискати послідовність, бо інакше вім не рахуватиме це за шорткат.

> Друга та четверта група є обовʼязковою, а перша та третє опційною.

1- Множник, тобто число разів скільки ви хочете повторити дію.

2- Що зробити?
- y=yank
- v=visual select
- d=delete
- c=change

3- Текст обʼєкт
- i=inside
- a=around
- f=on the top
- t=to

4- Текст обʼєкт:
- w=word
- e=end of the word
- hjkl
- p=paragraph
- gg/G = start of the file

**Приклади шорткатів:**
- `dw` = delete word
- `dip` = delete inside paragraph
- `5dd` = 5 times delete line
- `dt{` = delete all characters in the current line to {
- `ygg`/`yG` = yank to the start/end of the file

---

## 5. Плагіни?

- Ви можете знайти їх на [vimawesome.com](https://vimawesome.com/), або на GitHub.

Вім без доданих плагінів не є достатньо зручним тому, аби почуватись комфортно пропоную вам подивитис на наступні позиції:
- [nerdtree](https://github.com/preservim/nerdtree)/[nvim-tree](https://github.com/nvim-tree/nvim-tree.lua) - бокова панель із файлами
- [tokyonight](https://github.com/folke/tokyonight.nvim)/[gruvbox](https://github.com/morhetz/gruvbox) - кольорова тема
- [lualine](https://github.com/nvim-lualine/lualine.nvim) - status bar
- [surround](https://github.com/tpope/vim-surround) - useful for changing " to '
- [fugitive](https://github.com/tpope/vim-fugitive) - git integration
- [commentary](https://github.com/tpope/vim-commentary) - comment/uncomment with a 1 shortcut in all languages
- Налаштування lsp і completions. Це саме те через що можна сумувати за vscode і це дійсно зручно. Тому просто погугліть як це зробити і ви знайдете хороший туторіал.

---

## Рекомендації:

1. Не тисніть на себе. Повільно та стабільно!
2. Пройдіть `vimtutor`. Він займе в вас приблизно 30-50 хвилин.
3. Налаштовувати вім під себе кльово, але може бути складно, тому, якщо що, можете розглянути наступні варіанти: [astrovim](https://github.com/AstroNvim/AstroNvim), [lunarvim](https://github.com/LunarVim/LunarVim).