Перемещение между фрагментами кода

В предыдущем разделе рассказывалось об изучении исходного кода, то есть получении информации об элементах, файлах и проектах. Следующий шаг — перемещение по базе кода. Это возможно делать на разных уровнях: локально, внутри файла и внутри проекта.

Примечание

Многие из способов перемещения по коду доступны в меню Навигация главного окна KDevelop.

Локальное перемещение

Возможности KDevelop гораздо шире, чем у простого редактора, но программа также является редактором исходного кода. Конечно, можно перемещать курсор в тексте с помощью клавиш со стрелками. Также можно использовать клавиши PageUp и PageDown, как и все остальные команды, которые применяются в обычном текстовом редакторе.

Перемещение по области файла и режим структуры

В KDevelop предусмотрено много способов перемещения по исходному коду на уровне области файла. Например:

  • Структура: получить структуру текущего файла можно как минимум тремя разными способами:

    • Щёлкните по текстовому полю Структура в правой верней части части главного окна или нажмите комбинацию клавиш Alt+Ctrl+N для вызова раскрывающегося меню со списком всех объявлений функций и классов:

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

    • Поместите курсор в область файла (то есть вне объявлений или определений функций или классов), когда открыта панель Навигация по коду:

      Это также позволит получить структуру текущего файла и выбрать место для перехода.

    • Наведите указатель мыши на вкладку одного из открытых файлов. При этом также будет показана структура соответствующего файла.

  • Файлы исходного кода организованы в виде списка объявлений или определений функций. При нажатии комбинаций клавиш Alt+Ctrl+PgUp и Alt+Ctrl+PgDown выполняется переход, соответственно, к предыдущему или следующему определению функции в этом файле.

Перемещение по области проекта и сеанса: семантическое перемещение

Как упоминалось ранее, KDevelop обычно работает не с отдельными файлами исходного кода, а с проектами в целом (точнее, со всеми проектами, которые являются частью текущего сеанса). Соответственно, программа предоставляет много способов перемещения в пределах целых проектов. Некоторые из них являются производными от тех возможностей, о которых уже рассказывалось в разделе Изучение исходного кода, в то время как другие абсолютно не похожи на них. Объединяет эти возможности перемещения тот факт, что они основаны на понимании семантики кода, то есть для работы с ними требуется проводить анализ целых проектов и связывание данных. В следующем списке приводятся некоторые способы перемещения по исходному коду, который может храниться в очень большом количестве отдельных файлов:

  • Как говорилось в разделе Изучение исходного кода, подсказку со сведениями об отдельном пространстве имён, классе, функции или переменной можно вызвать путём наведения указателя мыши на соответствующий элемент или нажатия и удерживания клавиши Alt. Пример:

    Если щёлкнуть по ссылке на объявление элемента или развернуть список случаев использования, будет можно перейти к соответствующими местам в коде. Аналогичный результат можно получить с помощью инструмента Навигация по коду, описание которого также приводилось ранее.

  • Чтобы быстро переходить к объявлению элемента, не щёлкая по ссылкам во всплывающей подсказке, можно временно включить Режим навигации по коду: нажмите и удерживайте клавишу Alt или Ctrl. В этом режиме для перехода к объявлению элемента достаточно щёлкнуть по этому элементу прямо в редакторе.

  • Быстрый переход: различные способы быстрого перехода, предусмотренные в KDevelop, позволяют переходить к другим файлам или расположениям. Доступны четыре варианта:

    • Быстрый переход к классам (пункт меню НавигацияБыстрый переход к классам или комбинация клавиш Alt+Ctrl+C): позволяет получить список всех классов в этом сеансе. Начните набирать имя (или часть имени) класса, чтобы в списке остались только соответствующие введённому тексту пункты. Когда список станет достаточно коротким, выберите элемент с помощью клавиш со стрелками «вверх» и «вниз», и программа KDevelop откроет то место в коде, где объявлен этот класс.

    • Быстрый переход к функциям (пункт меню НавигацияБыстрый переход к функциям или комбинация клавиш Alt+Ctrl+M): позволяет получить список всех функций(-членов), являющихся частью проектов в текущем сеансе. Выбор из списка осуществляется приведённым ранее способом. Обратите внимание, что в списке могут встречаться как объявления, так и определения функций.

    • Быстрый переход к файлам (пункт меню НавигацияБыстрый переход к файлам или комбинация клавиш Alt+Ctrl+O): позволяет получить список всех файлов, которые являются частью проектов в текущем сеансе. Выбор из списка осуществляется приведённым ранее способом.

    • Универсальный быстрый переход (пункт меню НавигацияБыстрый переход или комбинация клавиш Alt+Ctrl+Q): универсальный вариант на тот случай, когда не удаётся вспомнить комбинации клавиш для выполнения перечисленных ранее специализированных команд. Позволяет получить объединённый список всех файлов, функций, классов и других элементов, в котором можно выбрать нужный пункт.

  • Перейти к объявлению/определению: при реализации функции(-члена) часто бывает нужно вернуться к месту объявления функции (например, для обеспечения соответствия списка аргументов функции в декларации и в определении или для обновления документации). Чтобы это сделать, наведите указатель мыши на имя функции и выберите пункт меню НавигацияПерейти к объявлению (или нажмите комбинацию клавиш Ctrl+.). Вернуться обратно можно несколькими способами:

    • Выберите пункт меню НавигацияПерейти к определению (или нажмите комбинацию клавиш Ctrl+,).

    • Выберите пункт меню НавигацияПредыдущий контекст (или нажмите комбинацию клавиш Meta+стрелка «влево»), как описано далее.

Примечание

Переход к объявлению элемента не ограничивается реализуемыми функциями. Он выполняется также и при наведении указателя мыши на переменную (локальную, глобальную или переменную-член). Аналогичным образом, можно навести указатель мыши на имя класса (например, в объявлении переменной функции) и перейти к его объявлению.

  • Переключение между объявлением и определением: в рассматриваемом выше примере для перехода к объявлению текущей функций необходимо сначала навести указатель мыши на имя функции. Чтобы исключить этот шаг, можно выбрать пункт меню НавигацияПерейти к объявлению/определению (или нажать комбинацию клавиш Shift+Ctrl+C) для перехода к объявлению функции, внутри которой сейчас находится курсор. При повторном выборе этого пункта меня выполняется возврат к месту определения функции.

  • Предыдущее или следующее обращение: поместите курсор на имя локальной переменной и выберите пункт меню НавигацияСледующее обращение (или нажмите комбинацию клавиш Meta+Shift+стрелка «вправо») для перехода к месту следующего обращения к этой переменной в коде. (Обратите внимание, что программа не просто выполняет поиск следующего вхождения имени переменной, но и учитывает, что переменные с тем же именем, но в других областях, представляют собой другие переменные.) То же самое относится и к обращениям к функциям. При выборе пункта меню НавигацияПредыдущее обращение (или нажатии комбинации клавиш Meta+Shift+стрелка «влево») выполняется переход к предыдущему обращению к элементу.

Примечание

Для просмотра списка всех случаев использования имени, циклический переход по которому осуществляется с помощью этих команд, поместите курсор на это имя, а затем откройте панель Навигация по коду или нажмите и удерживайте клавишу Alt. Более подробные сведения об этом приёме содержатся в разделе Изучение исходного кода.

  • Список контекстов: в веб-браузерах предусмотрена возможность перемещения вперёд и назад по списку недавно посещённых веб-страниц. В KDevelop есть похожая возможность, только вместо веб-страниц используются контексты. Контекст — это текущее расположение курсора. Он меняется, когда для перемещения из этого расположения используется что-либо, кроме команд курсора (например, щелчок по месту, указанному в подсказке, на панели Навигация по коду, выбор одного из пунктов меню Навигация или использование любой другой команды перехода. С помощью пунктов меню НавигацияПредыдущий контекст (Meta+стрелка «влево») и НавигацияСледующий контекст (Meta+стрелка «вправо») можно перемещаться по списку посещённых контекстов так же, как это делается в браузере при использовании кнопок назад и вперёд для перехода к предыдущей или следующей посещённой веб-странице.

  • Наконец, доступны инструменты, которые позволяют переходить к другим местам в базе кода. Например, с помощью инструмента Классы можно получить список всех пространств имён и классов во всех проектах текущего сеанса. Пункты этого списка можно разворачивать для просмотра функций и переменных, входящих в эти классы:

    При двойном щелчке по элементу (или использовании соответствующего пункта контекстного меню, которое доступно по щелчку правой кнопкой мыши) выполняется переход к объявлению этого элемента. Другие инструменты предоставляют схожие возможности; например, инструмент Проекты позволяет получить список файлов, которые являются частью сеанса:

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