# Режим введення VI

Метою використання режиму VI є не повна заміна Vim і підтримка всіх можливостей Vim. Його метою є використання способу редагування текстів Vim, — та вивчених прийомів користування Vim, — у програмах, які використовують текстовий редактор &kappname; для вбудованих режимів редагування.

Режим VI чудово інтегрується у сторонні програми і відхиляється від поведінки Vim там, де це має сенс. Наприклад, команда ``:w`` у режимі VI &kappname; відкриває діалогове вікно збереження файла.

Увімкнути режим VI для всіх нових панелей редагування можна за допомогою пункту меню Параметри Налаштувати &kappname;... Редагування Режим вводу VI. На цій вкладці ви зможете встановити параметри роботи режиму введення VI, ви значити або змінити прив’язки клавіш у цьому режимі. Увімкнути або вимкнути режим введення VI можна також за допомогою пункту Режим вводу VI меню Зміни. (Типовим клавіатурним скороченням є Meta&Ctrl;V, де Meta зазвичай відповідає клавіша Windows).

На відміну від більшості клавіатурних скорочень &kde;, багато клавіатурних команд режиму Vi є залежними від регістру символів. Це означає, що команди `y` і `Y` мають зовсім різне призначення. Щоб ввести команду `y` (копіювати), переконайтеся, що режим Caps Lock (літер верхнього регістру) вимкнено і натисніть клавішу Y. Щоб ввести команду `Y` (копіювати до кінця рядка), скористайтеся комбінацією клавіш &Shift;Y.

Висловлене вище зауваження не стосується команд, у яких використовується клавіша. Ці команди можна ввести у будь-якому з режимів Caps Lock без натискання &Shift;, але у частині команд використовується комбінація з &Ctrl;, після якої слід натиснути іншу клавішу, регістр якої слід брати до уваги. Наприклад, щоб ввести команду «&Ctrl;W, `h`» (перемкнутися на праву панель у розділеному перегляді), переконайтеся що режим літер верхнього регістру вимкнено, натисніть комбінацію клавіш &Ctrl;W, відпустіть клавіш, а потім натисніть клавішу H.

### Несумісності з Vim

З Vim несумісні лише декілька можливостей режиму VI &kappname;, якщо не брати до уваги багатьох речей, які просто не реалізовано. Нижче наведено список цих можливостей з поясненнями причин несумісності.

- &kappname;: `U` і &Ctrl;R відповідають повторному виконанню скасованої команди.

  Vim: &Ctrl;R звичайне повторення дії, U призначено для скасування всіх останніх змін у одному рядку.

  Причиною того, що U прив’язано до повторення дії у режимі VI &kappname;, є те, що клавіатурне скорочення &Ctrl;R типово зайнято у &kappname; заміною (пошук з заміною). Типово режим VI не змінює клавіатурні скорочення &kappname; (ви можете зробити це вручну за допомогою сторінки Параметри Налаштувати &kappname;... Редагування Режим вводу Vi), тому дія з повернення редагування має бути доступна у «звичайному» режимі натискання комбінацій клавіш. Окрім того, дія команди `U` у Vim не дуже добре збігається з внутрішньою системою скасування &kappname;, отже її підтримка є доволі складним завданням.

- &kappname;: ``print`` відкриває діалогове вікно Друк.

  Vim: ``print`` друкує рядки вказаного діапазону, подібно до свого дідуся, ed.

  Команди на зразок ``:print`` доступні не лише у режимі VI, але і користувачам «звичайних» режимів &kappname;. Тому ``:print`` відкриває діалогове вікно друку відповідно до принципів однорідності, замість імітації поведінки Vim.

- &kappname;: `Y` копіює дані до кінця рядка.

  Vim: `Y` копіює весь рядок, подібно до команди `y` `y`.

  Поведінка VI для команди `Y` насправді є вадою. Для обох команд, зміни і вилучення, команди `c` `c`/ `d` `d` виконують дію на поточному рядку, а `C`/`D` виконує дію над даними від позиції курсора до кінця рядка. Але обидві команди, `y` `y` і `Y`, копіюють поточний рядок. У режимі VI &kappname; `Y` копіює дані до кінця рядка. Така поведінка описана як «логічніша» у документації до Vim.

- &kappname;: `O` і `o` відкривають [`кількість`] нових рядків і переводять програму у режим вставлення.

  Vim: `O` і `o` відкривають нових рядок і вставляють текст [`кількість`] разів з виходом з режиму вставлення.

  Так зроблено в результаті узагальнення досвіду багатьох людей, які висловлювали здивування поведінкою Vim на каналі vim у IRC (#vim на Libera Chat).

### Перемикання режимів

- Звичайний режим надає вам змогу вводити команди навігації або редагування документа і є типовим. Повернутися до цього режиму з будь-якого іншого режиму можна натисканням клавіші &Esc;.

- Візуальний режим надає вам змогу позначати текст у документі. У цьому режимі можна користуватися більшістю команд звичайного режиму. Ви можете перевести команду у цей режим введенням літери `v` для позначення символів або `V` для позначення рядків.

- Режим вставлення надає вам змогу редагувати документ безпосередньо. Ви можете перевести програму у цей режим натисканням клавіші `i` або за допомогою одної з декількох інших команд, наведених нижче.

- Режим команд відкриває панель командного рядка &kappname;. За допомогою цієї панелі ви зможете виконувати значну частину команд, доступних у реалізаціях Vi, а також деякі специфічні для &kappname; команди. Докладніше про ці команди можна дізнатися з розділу advanced-editing-tools-commandline. Користуватися режимом команд просто: натисніть клавішу :, вкажіть команду і натисніть клавішу &Enter;.

### Інтеграція з командами &kate;

- Програма автоматично перемикатиметься на візуальний режим, якщо фрагмент тексту буде позначено за допомогою миші. Також перемикання відбуватиметься у разі використання функцій &kate;, які позначають фрагменти тексту, зокрема «Вибрати все» (вибір або за допомогою меню, або за допомогою комбінації клавіш &Ctrl;A .)

- Передбачено підтримку позначок Vi та закладок &kate;. У разі створення позначки у режимі Vi буде також створено відповідну закладку &kate;, яку буде показано у меню Закладки. І навпаки, якщо буде створено закладку &kate;, програма також створить відповідну позначку Vi у нульовій позиції рядка.

### Підтримувані команди звичайного/візуального режимів

`a` | Перейти у режим вставлення, додавати символи після курсора
`A` | Перейти у режим вставлення, додавати символи після рядка
`i` | Перейти у режим вставлення, додавати символи перед курсором
&Ins; | Перейти у режим вставлення, додавати символи перед курсором
`I` | Перейти у режим вставлення, вставляти до першого непорожнього символу у рядку
`gi` | Перейти у режим вставлення, вставити перед місцем, у якому було здійснено останній вихід з режиму вставлення
`v` | Перейти у візуальний режим; позначати символи
`V` | Перейти у візуальний режим; позначати рядки
&Ctrl;v | Перейти у візуальний режим; позначати блоки
`gb` | Перейти у візуальний режим; повторно позначити останній позначений фрагмент
`o` | Додати новий рядок під поточним
`O` | Додати новий рядок перед поточним
`J` | Об'єднати рядки
`c` | Змінити: з наступним визначенням позиції для вилучення і переходом у режим вставлення
`C` | Змінити до кінця рядка: вилучити текст до кінця рядка і увійти до режиму вставлення
`cc` | Змінити рядок: вилучити рядок і перейти у режим вставлення
`s` | Замінити символ
`S` | Замінити рядок
`dd` | Вилучити рядок
`d` | З наступним визначенням позиції для вилучення
`D` | Вилучити до кінця рядка
`x` | Вилучити символ праворуч від курсора
∇ | Вилучити символ праворуч від курсора
`X` | Вилучити символі ліворуч від курсора
`gu` | З визначенням позиції для встановлення нижнього регістру
`guu` | Перевести всі символи поточного рядка у нижній регістр
`gU` | З визначенням позиції для встановлення верхнього регістру
`gUU` | Перетворити символи поточного рядка на символи у верхньому регістрі
`y` | З визначенням позиції для копіювання
`yy` | Копіювати рядок
`Y` | Копіювати рядок
`p` | Вставити після курсора
`P` | Вставити перед курсором
`]p` | Вставити після курсора з відступом
`[p` | Вставити перед курсором з відступом
`r` | З визначенням символу, який слід замінити символ за курсором
`R` | Увійти до режиму заміни
`:` | Увійти у командний режим
`/` | Шукати
`u` | Вернути
&Ctrl;R | Повторити
`U` | Повторити
`m` | Встановити позначку (може бути використано для наступних пересувань текстом)
`n` | Знайти наступне
`N` | Знайти попереднє
`>>` | Збільшити відступ рядка
`<<` | Зменшити відступ рядка
`>` | Збільшити відступ рядків
`<` | Зменшити відступ рядків
&Ctrl;F | Сторінка вниз
&Ctrl;B | Сторінка вгору
`ga` | Вивести значення ASCII для символу
`.` | Повторити останню зміну
`==` | Команда вирівнювання рядка
`=` | Команда вирівнювання рядків
`~` | Змінити регістр поточного символу
&Ctrl;S | Розділити перегляд горизонтально
&Ctrl;V | Розділити перегляд вертикально
&Ctrl; W, `w` | Циклічний перехід до наступної панелі поділу
&Ctrl; W, `h` &Ctrl; W← | Перейти до лівої панелі поділу
&Ctrl; W, `l` &Ctrl; W→ | Перейти до правої панелі поділу
&Ctrl; W, `k` &Ctrl; W↑ | Перейти до верхньої панелі поділу
&Ctrl; W, `j` &Ctrl; W↓ | Перейти до нижньої панелі поділу

### Підтримувані пересування кодом

Цими командами можна скористатися для пересування документом у звичайному та візуальному режимах або у поєднанні з однією з описаних вище команд. Перед цими командами можна вказувати параметр, який визначає кількість рухів, які слід виконати.

`h` | Ліворуч
← | Ліворуч
&Backspace; | Ліворуч
`j` | Вниз
↓ | Вниз
`k` | Вгору
↑ | Вгору
`l` | Праворуч
→ | Праворуч
Пробіл | Праворуч
`$` | У кінець рядка
&End; | У кінець рядка
`0` | До першого символу рядка (позиція 0)
&Home; | До першого символу рядка
`^` | До першого непорожнього символу рядка
`f` | З додаванням символу, до якого слід перейти праворуч від курсора
`F` | З додаванням символу, до якого слід перейти ліворуч від курсора
`t` | З додаванням символу, до якого слід перейти праворуч від курсора, з розташуванням курсора перед цим символом
`T` | З додаванням символу, до якого слід перейти ліворуч від курсора, з розташуванням курсора перед цим символом
`gg` | До першого рядка
`G` | До останнього рядка
`w` | До наступного слова
`W` | До наступного слова, відокремленого пробілом
`b` | До попереднього слова
`B` | До попереднього слова, відокремленого пробілом
`e` | До кінця слова
`E` | До кінця слова, відокремленого пробілом
`ge` | До кінця попереднього слова
`gE` | До кінця попереднього слова, відокремленого пробілом
`|` | З визначенням номера позиції у рядку для переходу
`%` | З визначенням елемента для переходу
``` | До позначки
`‘` | До першого непробільного символу рядка з позначкою
`[[` | До попередньої початкової дужки
`]]` | До наступної початкової дужки
`[]` | До попередньої завершальної дужки
`][` | До наступної завершальної дужки
&Ctrl;I | Перейти до наступного місця
&Ctrl;O | Повернутися до попереднього місця
`H` | Перейти до першого рядка на екрані
`M` | Перейти до рядка посередині екрана
`L` | Перейти до останнього рядка на екрані
`%`значення у відсотках`` | Перейти до вказаної у відсотках позиції документа
`gk` | Перейти на рядок вгору візуально (у разі використання динамічного перенесення рядків)
`gj` | Перейти на рядок вниз візуально (у разі використання динамічного перенесення рядків)
&Ctrl;&Left; | Перейти на слово ліворуч
&Ctrl;&Right; | Перейти на слово праворуч

### Підтримувані текстові об’єкти

Цими командами можна скористатися для позначення частин тексту документа.

`iw` | Блок слова: слово з пробілами
`aw` | Слово: слово без пробілів
`i"` | Від попередніх подвійних лапок (`"`) до наступних подвійних лапок, разом з лапками
`a”` | Від попередніх подвійних лапок (`"`) до наступних подвійних лапок, без лапок
`i'` | Від попередніх одинарних лапок (`"`) до наступних одинарних лапок, разом з лапками
`a'` | Від попередніх одинарних лапок (`"`) до наступних одинарних лапок, без лапок
`i(` | Від попередньої початкової круглої дужки [`(`] до наступної завершальної круглої дужки [`)`], разом з дужками
`a(` | Від попередньої початкової круглої дужки [`(`] до наступної завершальної круглої дужки [`)`], без дужок
`i[` | Від попередньої початкової квадратної дужки (`[`) до наступної завершальної квадратної дужки (`]`), разом з дужками
`a[` | Від попередньої початкової квадратної дужки (`[`) до наступної завершальної квадратної дужки (`]`), без дужок
`i{` | Від попередньої початкової фігурної дужки (`{`) до наступної завершальної фігурної дужки (`}`), разом з дужками
`a{` | Від попередньої початкової фігурної дужки (`{`) до наступної завершальної фігурної дужки (`}`), без дужок
`i<` | Від попередньої початкової кутової дужки (`<`) до наступної завершальної кутової дужки (`>`), разом з дужками
`a<` | Від попередньої початкової кутової дужки (`<`) до наступної завершальної кутової дужки (`>`), без дужок
`i`` | Від попередніх зворотних лапок (```) до наступних зворотних лапок, разом з лапками
`a`` | Від попередніх зворотних лапок (```) до наступних зворотних лапок, без лапок

### Підтримувані команди режиму вставлення

&Ctrl;D | Зменшити відступ
&Ctrl;T | Збільшити відступ
&Ctrl;E | Вставити знизу
&Ctrl;Y | Вилучити слово
&Ctrl;W | Вилучити слово
&Ctrl;U | Вилучити рядок
&Ctrl;J | Новий рядок
&Ctrl;H | Вилучити символ у напрямку назад
&Ctrl;&Home; | Перейти до першого символу документа
&Ctrl;R `n` | Вставити вміст регістра `n`
&Ctrl;O, `команда` | Увійти до звичайного режиму лише для однієї команди
&Ctrl;A | Збільшити поточне позначене число
&Ctrl;X | Зменшити поточне позначене число

### Текстовий об’єкт, обмежений комами

Цього об’єкта немає у Vim. За допомогою текстового об’єкта, обмеженого комами, просто змінювати списки параметрів у C-подібних мовах та інших списках, поділених комами. Таким текстовим об’єктом є фрагмент тексту між двома комами або між комою і дужкою. На нашій ілюстрації показано три діапазони текстових об’єктів, позначені червоним тлом.

Приклад відокремлених комами об’єктів Приклад відокремлених комами об’єктів

Відокремлені комами текстові об’єкти визначають діапазони даних. Якщо, наприклад, курсор перебуває у `arg2`, натискання клавіш `ci`, («змінити між комами») вилучить `double arg2` і розташує курсор між двома комами у режимі вставлення. Це дуже зручний спосіб зміни параметрів функцій.

### Нереалізовані можливості

Як ми вже зазначали раніше, метою режиму VI &kappname; не є 100% підтримка можливостей Vim.