Глава 9. Режим ввода Vi

Erlend Hamberg

Перевод на русский язык: Олеся Герасименко

Режим ввода Vi

Задача режима ввода Vi состоит не в том, чтобы полностью заменить Vim, обеспечив поддержку всех возможностей Vim. Она заключается в том, чтобы в программах, которые используют текстовый редактор KatePart в качестве встроенного, было возможно выполнять редактирование в «стиле Vim» и применять изученные приёмы работы с Vim.

Режим ввода Vi прекрасно интегрируется в сторонние программы и отклоняется от поведения Vim там, где это имеет смысл. Например, команда :w в режиме Vi KatePart позволяет открыть диалог сохранения.

Включить режим ввода Vi для всех новых областей просмотра возможно с помощью пункта меню НастройкаНастроить KatePart...+РедактированиеРежим ввода Vi. На этой вкладке возможно установить параметры режима ввода Vi, а также определить и отредактировать привязки клавиш. Также режим ввода Vi возможно включать или отключать с помощью пункта Режим ввода Vi в меню Правка. (Комбинация клавиш по умолчанию: Meta+Ctrl+V, где Meta обычно представляет собой клавишу Windows.)

Примечание

В отличие от большинства комбинаций клавиш KDE, многие клавиатурные команды режима Vi зависят от регистра символов. Это означает, что команды y и Y имеют совершенно разное назначение. Чтобы ввести команду y (копировать), убедитесь, что режим Caps Lock отключён, и нажмите клавишу Y. Чтобы ввести команду Y (копировать до конца строки), воспользуйтесь комбинацией клавиш Shift+Y.

Вышеприведённое замечание не касается команд, в которых используется клавиша Ctrl. Эти команды возможно вводить независимо от состояния режима Caps Lock и без нажатия клавиши Shift. Тем не менее, для ввода некоторых команд требуется использовать Ctrl-комбинацию, за которой следует другая клавиша, регистр которой следует принимать во внимание. Например, чтобы ввести «Ctrl+W, h» (переключиться на левую створку в разделённой области просмотра), убедитесь, что режим Caps Lock отключён, используйте комбинацию клавиш Ctrl+W, затем отпустите эти клавиши и нажмите клавишу H.

Расхождения с Vim

C Vim несовместимы лишь несколько функций режима ввода Vi KatePart (не принимая во внимание различные функции, которые просто не реализованы). Их перечень (с указанием соответствующих причин несовместимости) приводится далее.

  • KatePart: U и Ctrl+R — повторное выполнение отменённой команды.

    Vim: Ctrl+R — обычное повторение действия, U — отмена всех последних изменений в одной строке.

    Клавиша U привязана к повторению отменённого действия в режиме Vi KatePart, потому что комбинация клавиш Ctrl+R по умолчанию используется для функции замены KatePart (поиск и замена). По умолчанию режим Vi не переопределяет комбинации клавиш KatePart (это возможно сделать вручную: НастройкаНастроить KatePart...+РедактированиеРежим ввода Vi), следовательно, возврат действия должен быть доступен в «обычном» режиме нажатия комбинаций клавиш. Кроме того, поведение команды U в Vim не очень хорошо совпадает с внутренней системой отмены KatePart, поэтому её поддержка была бы довольно сложной задачей.

  • KatePart: print — открытие диалога Печать.

    Vim: print — печать строк указанного диапазона (как в ed).

    Такие команды, как :print, доступны не только в режиме Vi, но и в «обычном» режиме ввода KatePart. Следовательно, при использовании команды :print будет открыт диалог печати (соблюдается принцип однородности, а не имитируется поведение Vim).

  • KatePart: Y — копирование данных до конца строки.

    Vim: Y — копирование всей строки, аналогично yy.

    Поведение команды Y в режиме Vi на самом деле является внутренней ошибкой. Для обеих команд, изменения и удаления, cc/ dd выполняет действие над текущей строкой, а C/D выполняет действие над данными от позиции курсора до конца строки. Но обе команды, yy и Y, копируют текущую строку. В режиме Vi KatePart Y копирует данные до конца строки. Такое поведение описывается как «более логичное» в документации Vim.

  • KatePart: O и o — открытие [количество] новых строк и переход в режим вставки.

    Vim: O и o — открытие новой строки и вставка текста [количество] раз при выходе из режима вставки.

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

Переключение режимов

  • В обычном режиме возможно вводить команды для навигации по документу или его редактирования. Этот режим используется по умолчанию. Чтобы вернуться в этот режим из любого другого, нажмите клавишу Esc.

  • Визуальный режим позволяет выделять цветом текст в документе. В этом режиме также возможно применять большинство команд обычного режима. Чтобы перейти в этот режим, нажмите клавишу v (для выбора символов) или V (для выбора строк).

  • Режим вставки позволяет выполнять непосредственное редактирование документа. Чтобы перейти в этот режим, нажмите клавишу i или введите одну из нескольких перечисленных далее команд.

  • Режим команд позволяет вызвать командную строку KatePart для выполнения значительной части команд, доступных в реализациях Vi, а также некоторых специфичных для KatePart команд. Более подробные сведения об этих командах: «Командная строка компонента редактирования». Чтобы перейти в этот режим, нажмите клавишу :, введите команду и нажмите клавишу 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

Удалить символ справа от курсора

Del

Удалить символ справа от курсора

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+Влево

Перейти на слово влево

Ctrl+Вправо

Перейти на слово вправо

Поддерживаемые текстовые объекты

Текстовые объекты возможно использовать для выбора определённых частей документа.

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 KatePart не является стопроцентная поддержка возможностей Vim.