# Дополнительные возможности редактирования

## Комментирование

Команды Закомментировать и Раскомментировать, которые доступны в меню Сервис, позволяют добавить или убрать маркеры комментариев для выделенного блока текста (или для текущей строки, если текст не выделен) при условии, что комментарии поддерживаются форматом редактируемого текста.

Правила комментирования определяются синтаксисом; таким образом, если подсветка синтаксиса не включена, то команды «Закомментировать» и «Раскомментировать» будут недоступны.

Некоторые форматы поддерживают только однострочные маркеры комментариев, другие — только многострочные, третьи — и те, и другие. Если многострочные маркеры недоступны, то комментирование блока, в котором не до конца выделена последняя строка, будет невозможным.

Предпочтение отдаётся комментированию отдельных строк однострочными маркерами, если последние допустимы синтаксисом и если такое комментирование возможно — это помогает избежать проблем со вложенными комментариями.

При удалении маркеров комментариев выделение снимается с раскомментированного текста. При удалении маркеров многострочного комментария пробелы снаружи маркеров игнорируются.

Чтобы закомментировать выделенный текст (или текущую строку), выберите пункт меню Сервис Закомментировать или воспользуйтесь соответствующей комбинацией клавиш (по умолчанию &Ctrl;D).

Чтобы удалить маркеры комментариев, выберите пункт меню Сервис Раскомментировать или воспользуйтесь соответствующей комбинацией клавиш ( по умолчанию &Ctrl;&Shift;D).

## Командная строка компонента редактирования

Компонент редактирования &kappname; имеет встроенную командную строку, позволяющую производить различные действия, оставляя интерфейс минималистичным. Она представляет собой поле ввода в нижней части области редактора. Чтобы получить доступ к командной строке, выберите пункт меню Вид Командная строка или нажмите клавишу F7 (по умолчанию). Описание доступных команд приводится далее. Кроме того, в модулях могут быть доступны дополнительные команды.

Для выполнения команды введите её и нажмите клавишу Enter. На месте команды будет выведено сообщение об успешном её выполнении или об ошибке. Если командная строка была вызвана с помощью клавиши F7, она будет автоматически скрыта по прошествии нескольких секунд. Чтобы убрать сообщение и ввести новую команду, нажмите клавишу F7 ещё раз.

Чтобы получить справку, введите команду `help`. Для получения списка всех доступных команд введите команду `help list`, для просмотра справки по определённой команде — `help `команда``.

В командной строке имеется встроенный журнал введённых команд, который позволяет использовать их повторно. Для перехода от одной команды к другой воспользуйтесь клавишами со стрелками Вверх и Вниз. При отображении команды из журнала её аргументы будут выделены, так что заменить их на другие легко.

### Стандартные команды

### Типы аргументов

BOOLEAN

- Используется для команд включения или отключения. Допустимые значения: `on`, `off`, `true`, `false`, `1` или `0`

INTEGER

- Целое число.

STRING

- Строка, заключённая в одинарные (') кавычки (или двойные (") кавычки, если она содержит пробелы).

#### Параметры редактора

Эти команды предоставляются компонентом редактирования и позволяют настроить только текущие документ и представление. Удобно, если требуется установить параметры, отличные от стандартных (например, отступ).

    set-tab-widthINTEGER width

- Устанавливает ширину табуляции.

    set-indent-widthINTEGER width

- Устанавливает ширину отступа. Только при создании отступов пробелами.

    set-word-wrap-columnINTEGER width

- Устанавливает максимальную длину строк в случае, если включён автоматический перенос.

    set-icon-borderBOOLEAN enable

- Устанавливает видимость полосы отметок.

    set-folding-markersBOOLEAN enable

- Устанавливает видимость маркеров сворачивания блоков кода.

    set-line-numbersBOOLEAN enable

- Устанавливает видимость нумерации строк.

    set-replace-tabsBOOLEAN enable

- Заменять при вводе символы табуляции на пробелы.

    set-remove-trailing-spaceBOOLEAN enable

- Удалять пробелы в конце строки при снятии с неё курсора.

    set-show-tabsBOOLEAN enable

- Представлять символы табуляции и пробельное пространство в конце строк маленькими точками.

    set-show-indentBOOLEAN enable

- Представлять отступы вертикальной пунктирной линией.

    set-indent-spacesBOOLEAN enable

- Вставлять заданное количество пробелов для каждого уровня отступа, вместо одного символа табуляции.

    set-mixed-indentBOOLEAN enable

- Использовать для отступов как символы табуляции, так и пробелы. Это реализуется путём замены пробелов в количестве, кратном ширине символа табуляции, на последние.

  Эта команда также включит расстановку отступов пробелами и установит ширину отступов, если она не указана, в половину значения `tab-width` (для текущего документа во время выполнения).

    set-word-wrapBOOLEAN enable

- Выполнять динамический перенос строк.

    set-replace-tabs-saveBOOLEAN enable

- Заменять символы табуляции на пробелы при сохранении.

    set-remove-trailing-space-saveBOOLEAN enable

- Удалить пробелы в конце строк при сохранении.

    set-indent-modeSTRING name

- Выбрать режим расстановки отступов. Параметр `name` может иметь следующие значения: «none», «normal», «cstyle», «haskell», «lilypond», «lisp», «python», «ruby» или «xml». При указании других значений используется «none».

    set-auto-identBOOLEAN script

- Включить или отключить автоматическую расстановку отступов.

    set-highlightSTRING highlight

- Выбрать формат для подсветки синтаксиса (один из содержащихся в меню Сервис Подсветка). Доступно также автозавершение параметра.

    reload-scripts

- Перезагрузить сценарии &javascript;, которые используются &kate;, включая сценарии расстановки отступов и сценарии командной строки.

    set-modeSTRING mode

- Выбрать тип файла для текущего документа.

    nn[oremap]STRING original STRING mapped

- Сопоставить комбинацию клавиш `original` комбинации `mapped`.

#### Команды редактирования

Команды, которые непосредственно изменяют текущий документ.

    indent

- Подставить отступы к выделенным строкам или к текущей.

    unindent

- Снять отступы с выделенных строк или с текущей.

    cleanindent

- Очистить отступы в выделенных строках или в текущей в соответствии с параметрами расстановки отступов для текущего документа.

    comment

- Вставить маркеры, отмечающие выделенные строки или текущую как комментарии, в соответствии с форматом текущего файла (определяется способом подсветки синтаксиса).

    uncomment

- Удалить маркеры, отмечающие выделенные строки или текущую как комментарии, в соответствии с форматом текущего файла (определяется способом подсветки синтаксиса).

    kill-line

- Удалить текущую строку.

    replace STRING pattern STRING replacement

- Заменить текст, совпадающий с `pattern`, на `replacement`. Чтобы включить в `pattern` пробелы, следует заключить в двойные или одинарные кавычки и `pattern`, и `replacement`. Если аргументы не заключены в кавычки, первое слово будет принято за `pattern`, а остальное — за `replacement`. Если не указать `replacement`, все вхождения `pattern` будут удалены.

  Для настройки параметров поиска следует указать соответствующие флаги после двоеточия (`replace:options pattern replacement`). Возможные параметры:

  `b`

- Искать в обратном направлении.

`c`

- Искать от позиции курсора.

`e`

- Искать только в выделенном тексте.

`r`

- Аргумент `pattern` — регулярное выражение. Возможно использовать `\N` в `replacement` для получения энной подстроки найденного текста.

`s`

- С учётом регистра.

`p`

- Запрашивать у пользователя подтверждение каждой замены.

`w`

- Только целые слова.

    dateSTRING format

- Вставить строку с датой/временем в указанном формате (задаётся параметром `format`). Если параметр не указан, используется формат yyyy-MM-dd hh:mm:ss. Доступны следующие подстановки:

  `d` | Номер дня в месяце без ведущего нуля (1-31).
  `dd` | Номер дня в месяце с ведущим нулём (01-31).
  `ddd` | Сокращённое локализованное название дня недели («пн»...«вс»).
  `dddd` | Полное локализованное название дня недели («понедельник»...«воскресенье»).
  `M` | Номер месяца без ведущего нуля (1-12).
  `MM` | Номер месяца с ведущим нулём (01-12).
  `MMMM` | Полное локализованное название месяца («января»...«декабря»).
  `MMM` | Сокращённое локализованное название месяца («янв.»...«дек.»).
  `yy` | Год двумя цифрами (00-99).
  `yyyy` | Год четырьмя цифрами (1752-8000).
  `h` | Час без ведущего нуля (0...23 или 1...12, в зависимости от параметра формата часов).
  `hh` | Час с ведущим нулём (00...23 или 01...12, в зависимости от параметра формата часов).
  `m` | Минуты без ведущего нуля (0...59).
  `mm` | Минуты с ведущим нулём (00...59).
  `s` | Секунды без ведущего нуля (0...59).
  `ss` | Секунды с ведущим нулём (00...59).
  `z` | Миллисекунды без ведущих нулей (0...999).
  `zzz` | Миллисекунды с ведущими нулями (000...999).
  `AP` | Использовать 12-часовой формат часов. AP будет заменено на «AM» или «PM».
  `ap` | Использовать 12-часовой формат часов. ap будет заменено на «am» или «pm».

    charSTRING identifier

- Эта команда позволяет вставить символ по его числовому идентификатору в десятичной, восьмеричной или шестнадцатеричной системах счисления. Чтобы использовать её, откройте командную строку и наберите `char [числовой_идентификатор]`.

  ##### Примеры использования команды `char`

  Введите: `char 234`

  Получите: `ê`

  Введите: `char 0x1234`

  Получите: `ሴ`

`s///[ig]` `%s///[ig]`

- Попробуем разобраться в этих двух sed-подобных командах. Первая выполняет поиск/замену в текущей строке, вторая — во всём файле (`%s///`).

  Команды производят поиск текста, заданного маской поиска (регулярным выражением между первой и второй наклонной чертой) и, при нахождении, замену на выражение, которое задано между второй и третьей чертой. Круглые скобки в маске поиска позволяют задать подстроки в найденном тексте, на которые возможно потом ссылаться в выражении замены. Обратная ссылка — это регулярное выражение, которое при совпадении заменяется на фактический текст и может быть использовано в шаблоне замены. Для этого необходимо поставить в нужном месте обратную черту, а за ней указать номер подстроки по порядку (`\1` — для первой пары скобок, `\2` — для второй и так далее).

  Чтобы искать сами скобки `(` или `)`, следует предварить их обратной чертой: `\(\)`

  Если в самом конце указать `i`, поиск будет выполняться с учётом регистра, а если `g` — будут заменены все вхождения текста, совпадающего с регулярным выражением (иначе — только первое).

  ##### Замена текста в текущей строке

  Предположим, что получено сообщение об ошибке компиляции: класс `myClass`, упомянутый в строке 3902, не определён.

  Добравшись до строки 3902, вместо того, чтобы пытаться найти слово `MyClass` в тексте, возможно просто открыть диалоговое окно «Команда правки», ввести `s/myclass/MyClass/i`, нажать кнопку OK, сохранить файл и выполнить компиляцию — успешно и без ошибок.

  ##### Замена текста во всём файле

  Предположим, что имеется файл, в котором несколько раз упомянута госпожа Иванова. Но вдруг стало известно, что она вышла замуж за господина по фамилии Петров, в связи с чем требуется заменить все упоминания о госпоже Ивановой на текст госпожа Петрова.

  Вызовите командную строку и введите следующий текст: `%s/госпожа Иванова/госпожа Петрова/` — и всё будет готово.

  ##### Более сложный пример

  Этот пример показывает, как пользоваться обратными ссылками и классами символов (сведения о том, что это такое, доступны в документации, которая упоминается далее).

  Допустим, набрана такая строка:

      void MyClass::DoStringOps( String      &foo, String &bar, String *p, int  &a, int &b )

  Предположим, что этот код недостаточно «красив» и решено использовать ключевое слово `const` с параметрами, передаваемыми по ссылке (теми, перед которыми стоит амперсанд), а также удалить лишние пробелы.

  Откройте диалоговое окно «Команда правки» и введите: `s/\s+(\w+)\s+(&)/ const \1 \2/g`, затем нажмите кнопку OK. Символ `g` в конце команды указывает компилятору «пересчитывать» регулярное выражение обратной ссылки каждый раз, когда встречаются совпадения.

  Вывод: `void MyClass::DoStringOps( const String &foo, const String &bar, String *p, const int &a, const int &b )`

  Всё готово! Что было сделано? Выполнялся поиск некоторого количества пробелов (`\s+`), за которыми следуют один или несколько буквенных символов (`\w+`), за которыми находятся пробелы (`\s+`), после которых расположен амперсанд, и в процессе эти буквенные символы и амперсанд сохранялись для использования в операции замены. После этого совпадающие части строки были заменены следующей последовательностью: один пробел, за которым следует спецификатор const, за ним ещё один пробел, после которого ранее сохранённые символы (`\1`), ещё один пробел и сохранённый амперсанд (`\2`)

  В одних случаях буквенные символы составили слово String, в других — слово int, то есть символьный класс `\w` с последующим знаком `+` определяет символьный набор произвольной длины.

    sort

- Упорядочить выделенный текст или весь документ.

    natsort

- Упорядочить выделенные строки или весь документ в естественном порядке.

  ##### `sort` в сравнении с `natsort`

  ``sort`(a10, a1, a2)`: результатом будет `a1, a10, a2`

  ``natsort`(a10, a1, a2)`: результатом будет `a1, a2, a10`

    moveLinesDown

- Переместить выделенные строки ниже.

    moveLinesUp

- Переместить выделенные строки выше.

    uniq

- Удалить дубликаты строк из выделенного текста или всего документа.

    rtrim

- Удалить пробелы в конце строк из выделенного текста или всего документа.

    ltrim

- Удалить пробелы в начале строк из выделенного текста или всего документа.

    joinSTRING separator

- Объединить выделенные строки или весь документ. Возможно указать параметр, который определяет разделитель, например: ``join` ', '`

    rmblank

- Удалить все пробелы из выделенного текста или всего документа.

    alignon

- Эта команда выравнивает строки в выбранном блоке или всём документе по позиции, которая указана переданным в качестве аргумента регулярным выражением.

  Если указать пустой шаблон, выравнивание по умолчанию будет выполняться по первому непустому символу.

  Если в шаблоне есть блок захвата, для захваченного совпадения будет добавлен отступ.

  Примеры:

  `alignon -` вставит пробелы перед первым «-» в каждой строке, чтобы выровнять все дефисы по одной позиции.

  `alignon :\\s+(.)` вставит пробелы перед первым непустым символом, стоящим после двоеточия, чтобы выровнять все такие символы по одной позиции.

    unwrap

- Отключить перенос строк выделенного текста или всего документа.

    eachSTRING script

- Вызвать указанную в качестве аргумента функцию &javascript; для списка выделенных строк и заменить их возвращаемым значением этого обратного вызова.

  ##### Объединить выделенные строки

  ``each` 'function(lines){return lines.join(", ")}'`

  Или более краткий вариант:

  ``each` 'lines.join(", ")'`

    filterSTRING script

- Вызвать указанную в качестве аргумента функцию &javascript; для списка выделенных строк и удалить те, для которых этот обратный вызов возвращает значение false.

  ##### Удалить пустые строки

  ``filter` 'function(1){return 1.length > 0;}'`

  Или более краткий вариант:

  ``filter` 'line.length > 0'`

    mapSTRING script

- Вызвать указанную в качестве аргумента функцию &javascript; для списка выделенных строк и заменить строку значением этого обратного вызова.

  ##### Удалить пустые строки

  ``map` 'function(line){return line.replace(/^s+/,"");}'`

  Или более краткий вариант:

  ``map` 'line.replace(/^s+/,"")'`

    duplicateLinesUp

- Дублировать выделенные строки над текущим выделенным текстом.

    duplicateLinesDown

- Дублировать выделенные строки под текущим выделенным текстом.

#### Команды навигации

    gotoINT line

- Перейти к указанной строке.

    grep STRING pattern

- Выполнить поиск регулярного выражения `pattern` в документе. Дополнительные сведения: regular-expressions.

    findSTRING pattern

- Перейти к первому вхождению, заданному параметром `pattern`. Последующие вхождения возможно найти с помощью пункта меню Правка Продолжить поиск (клавиша по умолчанию — F3).

  Параметры команды поиска возможно настраивать с помощью добавления двоеточия и флагов после её имени (`find:options pattern`). Возможные параметры:

  `b`

- Искать в обратном направлении.

`c`

- Искать от позиции курсора.

`e`

- Искать только в выделенном тексте.

`r`

- Аргумент `pattern` — регулярное выражение. Возможно использовать `\N` в `replacement` для получения энной подстроки найденного текста.

`s`

- С учётом регистра.

`w`

- Только целые слова.

    ifindSTRING pattern

- Поиск по мере набора. Для настройки параметров поиска следует указать один или несколько флагов после двоеточия: `ifind:options pattern`. Допустимые параметры:

  `b`

- Искать в обратном направлении.

`r`

- Поиск по регулярному выражению.

`s`

- С учётом регистра.

`c`

- Искать от позиции курсора.

#### Команды базовых функций редактора (определяются приложением, в котором используется компонент редактирования)

    w

- Сохранить текущий документ.

    wa

- Сохранить все открытые документы.

    q

- Закрыть текущий документ.

    qa

- Закрыть все открытые документы.

    wq

- Сохранить и закрыть текущий документ.

    wqa

- Сохранить и закрыть все открытые документы.

    x

- Сохранить и закрыть текущий документ только в том случае, если он был изменён.

    x

- Сохранить и закрыть все открытые документы только в том случае, если они были изменены.

    bp

- Перейти к предыдущему документу в списке документов.

    bn

- Перейти к следующему документу в списке документов.

    new

- Открыть новый документ в представлении, разделённом по горизонтали.

    vnew

- Открыть новый документ в представлении, разделённом по вертикали.

    e

- Обновить текущий документ, если файл этого документа на диске был изменён.

    enew

- Редактировать новый документ.

    print

- Открыть диалог печати текущего документа.

## Использование сворачивания кода

Сворачивание кода позволяет скрывать участки документа в редакторе, упрощая просмотр больших документов. В &kappname; разделение на сворачиваемые участки определяется правилами подсветки синтаксиса. Следовательно, оно доступно не для всех форматов файлов. В основном сворачивание кода доступно в режиме написания исходного кода, XML-разметки и тому подобного. Большинство способов подсветки позволяют также самостоятельно определять скрываемые области, чаще всего с помощью ключевых слов `BEGIN` и `END`.

Чтобы использовать функцию сворачивания, включите отображение полосы сворачивания блоков (пункт меню Вид Полоса сворачивания блоков), если она ещё не отображается. В этой полосе, расположенной с левой стороны документа, содержится графическое представление сворачиваемых участков. Треугольник, указывающий вниз, обозначает, что участок развёрнут. Треугольник, указывающий вправо, обозначает свёрнутый участок. Щелчок по треугольнику приведёт, соответственно, к сворачиванию или разворачиванию участка (с одновременным изменением графического представления).

Для управления состоянием сворачиваемых участков доступны три команды, смотрите справку по меню.

Состояние сворачивания сохраняется при закрытии файла, поэтому при его повторном открытии свёрнутые участки останутся таковыми. Это справедливо также и для действий обновления.

Если в использовании функции сворачивания нет необходимости, возможно отключить параметр Полоса сворачивания блоков на странице Внешний вид диалога настройки редактора.