KDevelop4/Підручник/Робота з кодом програм
Робота з кодом програм
Окрім зневаджування, читання та написання коду є найважливішими завданнями під час розробки програмного забезпечення. З метою полегшення навігації кодом та його написання у KDevelop передбачено багато різних інструментів. Як буде докладніше показано у наступних розділах, KDevelop не просто редактор коду, — це скоріше система керування кодом, яка може подавати різні дані, отримані на основі аналізу загальної сукупності коду всього вашого сеансу роботи.
Інструменти та панелі перегляду
Для роботи з проектами у KDevelop передбачено інструменти. Інструмент надає певні дані щодо коду або виконує з ним певну дію. Інструментам відповідають кнопки вздовж периметра вікна програми (з вертикальним текстом на полях ліворуч і праворуч та горизонтальним вздовж нижнього поля). Якщо ви натиснете таку кнопку, у головному вікні буде відкрито підвікно — панель перегляду; якщо кнопку буде натиснуто ще раз, відповідне підвікно буде закрито.
На наведеному вище зображенні ви можете бачити певний набір інструментів, вирівняних за лівим і правим полем. Ліворуч відкрито панель інструмента Класи, праворуч — Фрагменти. Посередині можна бачити панель редактора. З практичних міркувань, переважну частину часу розробки варто працювати лише з редактором та панеллю Класи чи Перегляд коду, відкритою ліворуч. На час використання певного інструмента можна відкрити його панель, яку після використання варто закрити з метою збільшення простору для панелі редактора.
Після першого запуску KDevelop ви вже зможете скористатися кнопкою інструмента
. Натисніть цю кнопку: у відповідь буде відкрито панель зі списком проектів, які було додано до сеансу у нижній частині вікна та панель перегляду файлової системи вашого проекту у верхній його частині.У KDevelop ви можете скористатися багатьма іншими інструментами, не всі з них представлено кнопками вздовж периметра вікна у початковому стані. Щоб додати кнопку, скористайтеся пунктом меню
. Ось перелік можливих корисних інструментів:- Класи: повний список всіх класів, які визначено у одному з проектів або у вашому сеансі з усіма вбудованими функціями та змінними. Натискання пункту елемента класу відкриє вікно редактора з місцем оголошення елемента, пункт якого було натиснуто.
- Документи: містить список нещодавно відкритих файлів за типами (наприклад, файли з кодом, файли латок, звичайні текстові документи).
- Перегляд коду: залежно від розташування курсора у редакторі файла, на цій панелі буде показано пов’язані з кодом дані. Наприклад, якщо курсор перебуває у рядку з
#include
, на панелі буде показано дані щодо файла, який включено до коду, зокрема дані щодо оголошених у файлі класів. Якщо курсор перебуває на порожньому рядку у файлі, на панелі буде показано класи і функції, оголошені і визначені у поточному файлі (всі як посилання: натискання відповідного пункту відкриватиме файл з оголошенням або визначенням класу чи функції). Якщо курсор перебуває на визначенні функції, на панелі буде показано місце оголошення та список місць, у яких використано функцію.
- Файлова система: показує ієрархічну структуру файлової системи.
- Документація: надає вам змогу виконувати пошук даних на сторінках довідника (man) та у інших довідкових документах.
- Фрагменти: на цій панелі буде наведено фрагменти тексту, які використовують вами регулярно, і які ви не хочете повторно вводити кожного разу. Наприклад, на основі якого було створено знімок екрана, була потреба часто використовувати фрагмент коду
for (typename Triangulation< dim>::active_cell_iterator cell = triangulation.begin_active(); cell != triangulation.end(); ++cell)
Вираз доволі незграбний, але використовується майже у такій формі кожного разу, коли вам потрібен цикл, — чудовий кандидат на включення до списку фрагментів.
- Konsole: відкриває панель командного рядка у головному вікні KDevelop, щоб ви могли віддати потрібну вам команду оболонки (наприклад, виконати
./configure
).
З повним списком інструментів та панелей перегляду можна ознайомитися тут.
Для багатьох програмістів найважливішою є економія вертикального місця на екрані. Щоб досягти такої економії, ви можете розташувати панелі інструментів вздовж лівої та правої межі вікна програми. Щоб пересунути панель, клацніть на заголовку правою кнопкою миші і виберіть нове її розташування.
Огляд роботи з кодом
Локальні дані
KDevelop розуміє код програми, тому це середовище може надавати вам дані щодо змінних або функцій вашої програми. Наприклад, у цьому підручнику наведено знімок роботи з фрагментом коду, де вказівник миші наведено на символ cell
у рядку 1316 (якщо ви надаєте перевагу роботі за допомогою клавіатури, того самого ефекту можна досягти утримуванням певний час натиснутою клавіші Alt):
KDevelop показує підказку, зокрема тип змінної (тут: DoFHandler<dim&rt;active_cell_iterator
), де цю змінну оголошено (контейнер, яким тут є функція-обгортка get_maximal_velocity
, оскільки це локальна змінна), тип даних (змінна, не функція, клас або простір назв) та місце оголошення (у рядку 1314, декілька рядків коду).
У поточному контексті з символом, на який наведено вказівник миші, не пов’язано жодної документації. У нашому прикладі, де вказівник миші наведено на символ get_this_mpi_process
у рядку 1318, буде показано такі дані:
Тут KDevelop показано оголошення зі стороннього файла (utilities.h
, який є частиною зовсім іншого проекту того самого сеансу) разом з коментарем у форматі doxygen, який супроводжує цей оголошення.
Ще кориснішими підказки робить те, що вони є динамічними: можна натиснути пункт контейнера, щоб отримати дані щодо контексту, у якому оголошено змінну (тобто дані щодо простору назв System
, зокрема місця його оголошення, визначення, використання та документації), і можна натиснути сині посилання, які повернуть курсор на позицію оголошення символу (наприклад, у utilities.h
, рядок 289) або покажуть список місць, у яких використано символ у поточному файлі або усіх проектах поточного сеансу. Остання можливість буде корисною, якщо вам потрібно визначити, як, наприклад, певну функцію використано у об’ємному коді.
Дані щодо окремих файлів
Наступним рівнем є отримання даних щодо всього файла коду, над яким ви працюєте. Щоб переглянути її, розташуйте курсор на початку поточного файла і подивіться на дані, які буде показано на панелі інструмента Перегляд коду:
Тут середовищем показано список просторів назв, класів та функцій, оголошених або визначених у поточному файлі. За допомогою цього списку ви можете ознайомитися з загальними даними щодо дій, які виконуються у файлі, та безпосередньо перейти до будь-якого з оголошень або визначень без потреби у гортанні коду файла або пошуку певного фрагмента.
Дані щодо проектів та сеансів
Існує багато способів отримати загальні дані щодо проекту (або, фактично, всіх проектів сеансу). Такі дані, зазвичай, можна знайти на панелях перегляду різноманітних інструментів середовища. Наприклад, на панелі інструмента Класи показано ієрархічну структуру всіх класів і зовнішніх просторів назв для всіх проектів сеансу, разом з вбудованими функціями та змінними кожного з цих класів:
Знову ж таки, за допомогою наведення вказівника миші на запис у списку можна отримати дані щодо відповідного символу, розташування його оголошення та визначення і випадків використання. Подвійним клацанням на пункті цього ієрархічного списку можна відкрити вікно редактора на позиції, де оголошено або визначено символ.
Але ви можете скористатися і іншими способами перегляду загальних даних. Наприклад, за допомогою інструмента Документи можна поглянути на проект з точки зору типів файлів або інших документів, з яких складається проект:
Пересування між фрагментами коду
У попередньому розділі ми обговорювали вивчення коду програми, тобто отримання даних щодо символів, файлів та проектів. Наступним кроком є перехід між компонентами коду, тобто навігація кодом. Знову ж таки, існує декілька рівнів, на яких можна здійснювати подібну навігацію: локально, у межах файла і у межах проекту.
Пересування поточним фрагментом
KDevelop — набагато більше, ніж просто редактор, — це також редактор коду. Тому, звичайно ж, ви можете пересувати курсор текстом за допомогою звичайних клавіш зі стрілочками. Ви також можете скористатися натисканням клавіш PageUp та PageDown і всіма іншими командами, якими можна скористатися у звичайному текстовому редакторі.
Пересування файлами та режим огляду
На рівні окремого файла у KDevelop передбачено багато способів навігації кодом програми. Приклад:
- Огляд: відкрити панель з оглядом вмісту поточного файла можна у принаймні три різних способи:
- Натисканням кнопки Alt + Ctrl + N. У відповідь буде відкрито спадне меню зі списком всіх функцій та оголошень класів: Після цього ви можете вибрати пункт, до якого слід перейти, або — якщо таких пунктів багато, — почніть вводити текст, який може бути частиною потрібного пункту. У такому разі, введення символів у текстове поле скорочуватиме список, оскільки з нього виключатимуться пункти, які не відповідають введеним вами даним, доки список не буде скорочено до прийнятних розмірів. у верхній правій частині головного вікна або натисканням комбінації клавіш
- Розташуванням курсора у області файла (тобто поза межами оголошень та визначень функцій або класів) з відкритою панеллю інструмента Перегляд коду: За показаною панеллю ви зможете стежити з даними поточного файла і надасть вам змогу вибрати пункт, до якого ви хочете перейти.
- Наведенням вказівника миші на вкладку одного з відкритих файлів. У відповідь буде показано панель з оглядом даних файла у відповідній вкладці.
- Файли коду впорядковано у список оголошень та визначень. За допомогою натискання комбінацій клавіш Alt + Ctrl + PgUp і Alt + Ctrl + PgDown можна переходити до визначення попередньої або наступної функції у файлі.
Пересування проектами та сеансами: семантичне пересування
Як ми вже згадували раніше, зазвичай KDevelop не працює з окремими файлами коду, замість цього середовище працює з цілими проектами (або, точніше, з усіма проектами, які є частиною поточного сеансу). Внаслідок цього середовище надає можливість навігації у межах цілих проектів. Частина цих можливостей є наслідком можливостей, які ми вже обговорювали у розділі щодо навігації кодом, інші ж є абсолютно відмінними від них. Основною особливістю цих можливостей навігації є те, що їх засновано на семантичному розумінні коду, тобто для роботи з ними потрібна певна обробка цілих проектів та пов’язаних з ними даних. У наведеному нижче списку показано декілька способів навігації кодом, який може зберігатися у великій кількості окремих файлів:
- Як ми вже бачили з розділу щодо навігації кодом, ви можете отримати панель з поясненнями щодо окремого простору назв, класу, функції або змінної наведенням вказівника миші на відповідний запис у коді або утримуванням натиснутою клавіші Alt. Ось приклад: Натискання посилань на оголошення символу або розгортання списку використань надає вам змогу перейти до відповідних місць коду. Подібного ефекту можна досягти за допомогою панелі перегляду Перегляд коду, яку ми вже обговорювали.
- Швидке відкриття: дуже потужним способом пересування файлами у KDevelop є різноманітні інструменти швидкого відкриття. Передбачено чотири різновиди таких інструментів:
- Швидке відкриття класу (Alt + Ctrl + C): вам буде показано список всіх класів у поточному сеансі. Почніть вводити (частину) назви класу, і середовище скоротить список до назв, які відповідають введеній частині. Коли список стане достатньо коротким, просто виберіть у ньому елемент за допомогою клавіш зі стрілками вгору і вниз, а KDevelop відкриє місце у коді, де клас було оголошено. або
- Швидке відкриття функції (Alt + Ctrl + M): вам буде показано список всіх (вбудованих) функцій, які є частиною проектів у поточному сеансі, вибрати потрібну вам функцію можна у той самий спосіб, у який вибирається клас. Зауважте, що у списку можуть бути одразу пункти оголошення та визначення функцій. або
- Швидке відкриття файла (Alt + Ctrl + O): вам буде показано список всіх файлів, які є частиною проектів поточного сеансу, вибрати потрібний можна буде у описаний вище спосіб. або
- Універсальне швидке відкриття (Alt + Ctrl + Q): якщо ви забули, які комбінації клавіш пов’язано з описаними вище командами, це універсальний спосіб: вам буде показано список всіх файлів, функцій, класів та інших частин проектів, з якого ви зможете вибрати потрібний вам пункт. або
- Перехід до оголошення або визначення: під час реалізації функції часто виникає потреба у переході до місця, де цю функцію оголошено, наприклад, для синхронізації списку аргументів між оголошенням і визначенням або для оновлення документації. Виконати такий перехід можна розташуванням курсора на назві функції з наступним вибором пункту меню Ctrl + .). Повернутися до визначення можна у декілька способів:
- За допомогою пункту меню Ctrl + ,). (або натискання комбінації клавіш
- За допомогою пункту меню Meta + Стрілка ліворуч), як це описано далі. (або натискання комбінації клавіш
(або натисканням комбінації клавіш
- Перемкнути визначення/оголошення: у наведеному вище прикладі для переходу до місця оголошення поточної функції нам потрібно було спочатку розташувати курсор на назві функції. Якщо вам не хочеться цього робити, скористайтеся пунктом меню Shift + Ctrl + C), щоб перейти до оголошення функції, у якій перебуває курсор. Повторний вибір цього пункту меню поверне курсор назад до визначення функції. (або натисніть комбінацію клавіш
- Попереднє/ Наступне використання: розташування курсора на назві локальної змінної з наступним вибором пункту меню Meta + Shift + Стрілка праворуч) переведе вас до наступного використання цієї змінної у коді. Зауважте, що буде виконано не лише пошук наступного використання назви змінної, але і взято до уваги і те, що змінні з тією самою назвою, але у інших просторах назв, є іншими. Те саме стосується і назв функцій. Вибір пункту (або натискання комбінації клавіш Meta + Shift + Стрілка ліворуч) переведе перегляд до попереднього використання символу. (або натискання комбінації клавіш
- Список контекстів: у переглядачах сторінок інтернету передбачено цю можливість, — ви можете пересуватися вперед і назад списком нещодавно відвіданих сторінок. У KDevelop теж є така можливість, але замість сторінок ви пересуваєтеся контекстами. Контекст — це поточне розташування курсора, перехід до якого або з якого було здійснено за допомогою будь-яких дій, окрім натискання клавіші зі стрілками на клавіатурі (наприклад, натискання пункту на панелі підказки, панелі Перегляд коду, одного з пунктів меню Meta + Стрілка ліворуч) та (Meta + Стрілка праворуч) ви можете пересуватися списком відвіданих контекстів подібно до того, як за допомогою пунктів і ви можете пересуватися між сторінками, відвіданими за допомогою програми для перегляду інтернету. або використання будь-якої іншої команди навігації). За допомогою пунктів меню (
- Нарешті, ви можете скористатися панелями інструментів, за допомогою яких можна переходити до різних місць у коді. Наприклад, за допомогою інструмента Класи ви можете користуватися списком всіх просторів назв та класів у всіх проектах поточного сеансу. Ви можете розгортати пункти списку для перегляду списків вбудованих функцій та змінних кожного з класів: Подвійне клацання на пункті (або використання відповідного пункту контекстного меню, яке можна відкрити клацанням правою кнопкою миші) надасть вам змогу перейти до місця оголошення пункту. На інших панелях інструментів можна скористатися подібними ж прийомами, наприклад, на панелі Проекти буде наведено список частин сеансу: Знову ж таки, подвійне клацання на пункті файла призведе до його відкриття.
Введення коду
Оскільки KDevelop «розуміє» код ваших проектів, це середовище може допомогти вам у написанні коду. Нижче наведено огляд деяких з цих допоміжних можливостей.
Автозавершення
Ймовірно, найкориснішою можливістю є можливість з автоматичного завершення фрагментів коду. Розглянемо, наприклад, такий фрагмент коду:
class Car { // ... public: std::string get_color () const; }; void foo() { Car my_ride; // ...якісь дії з цією змінною... std::string color = my_ride.ge
У останньому рядку KDevelop запам’ятає, що змінна my_ride
належить до типу Car
і буде автоматично пропонувати доповнення назви вбудованої функції ge
у форматі get_color
. Фактично, вам достатньо вводити назву, аж доки список знайдених відповідників не починатиметься з потрібного вам виразу, а потім натиснути клавішу Enter:
Зауважте, що ви можете клацнути на панелі підказки, щоб отримати більше даних щодо функції, окрім типу даних, які вона повертає, і те, чи є ця функція відкритою (public):
Автоматичне доповнення може значно скоротити витрату часу на введення даних, якщо у вашому проекті використано змінні або функції з довгими назвами. Крім того, автоматичне доповнення допомагає запобігти друкарським помилкам у назвах (а отже помилкам під час збирання), за його допомогою простіше запам’ятати точні назви функцій. Наприклад, якщо назви всіх ваших функцій отримання даних починаються з get_
, можливість автоматичного доповнення надасть вам змогу скористатися повним списком таких функцій, щойно ви наберете перші чотири літери назви, що, звичайно, допоможе вам згадати, яку з них ви мали намір використати. Зауважте, що для роботи з автоматичним доповненням не обов’язково, щоб оголошення класу Car
та змінної my_ride
перебували у одному файлі, над яким ви зараз працюєте. KDevelop просто має знати, що ці клас і змінну пов’язано, тобто файли, у яких зберігається код цих елементів програми, мають бути частиною проекту, над яким ви працюєте.
Додавання нових класів та реалізація вкладених функцій
У KDevelop передбачено майстер додавання нових класів. Щоб додати новий клас, скористайтеся пунктом меню
. У відповідь буде показано таке діалогове вікно:У нашому прикладі ми ввели назву нового класу Bus
(ви також можете вказати всі інші класи, від яких має походити цей клас). За допомогою наступної сторінки діалогового вікна ви можете вибрати потрібні вам стандартні вкладені функції:
У нашому прикладі нам знадобиться типовий конструктор, конструктор копіювання та деструктор. Після визначення на наступних сторінках діалогового вікна ліцензійного заголовка та розташування нових файлів KDevelop створить дві нових вкладки з файлами заголовків та коду:
Основу файла заголовків вже створено, а у новому класів є всі вибрані нами вбудовані функції. Наступними двома кроками мають бути документування класу та його вбудованих функцій та реалізація цих класів і функцій. Нижче ми обговоримо допоміжні засоби з документування класів і функцій. Щоб реалізувати спеціальні функції, які ми вже додали, просто перейдіть на вкладку , де вже є каркас наших функцій:
Щоб додати нові вкладені функції, поверніться на вкладку
і додайте назву функції. Наприклад, можна додати таке:Зауважте, що реалізацію вже розпочато. Але у межах багатьох стилів програмування функції не слід реалізовувати у файлах заголовків, це слід робити у відповідних файлах .cpp. Для цього розташуйте курсор на назві функції і скористайтеся пунктом меню Ctrl + Alt + S. Код між фігурними дужками буде пересунуто з файла заголовків (його буде замінено на крапку з комою для завершення оголошення функції) до відповідного файла коду:
або натисніть комбінацію клавішВведення коду розпочато. Змінна students
має, ймовірно, бути вбудованою змінною класу Bus
, але її ще не додано до цього класу. KDevelop підкреслено цю змінну, щоб позначити те, що середовищу ще нічого не відомо про цю змінну. Цю проблему просто розв’язати: натискання назви змінної відкриє таку панель підказки:
(Того самого результату можна досягти за допомогою пункту контекстного меню Alt + 3). Ось що буде додано до файла заголовків:
.) Давайте виберемо «3 - private unsigned int» (за допомогою миші або натискання комбінації клавішВарто зауважити, що KDevelop визначає тип змінної, яку слід оголосити, за виразом, використаним для її ініціалізації. Наприклад, якщо було використано додавання у такому доволі безсумнівному форматі, середовище запропонує тип змінної double
:
Нарешті, метод використання пункту меню inline
і розташування його у нижній частині файла заголовків. У такому разі вкажіть оголошення і почніть введення визначення функції ось так:
KDevelop автоматично пропонує всіх можливі варіанти доповнення. Вибір одного з двох записів add_students
призведе до створення такого коду, у якому вже буде заповнено список параметрів:
inline
, яку вже написано. Про цю ваду повідомлено як про ваду KDevelop №274245.
Оголошення для документування
Хороший код завжди добре документовано, як на рівні реалізації алгоритмів у функціях, так і на рівні інтерфейсу, — тобто класи (вбудовані і загальні) функції та (вбудовані і загальні) змінні слід документувати, щоб всім було зрозумілим їхнє призначення, можливі значення аргументів, попередні та остаточні умови тощо. У документуванні інтерфейсів фактичним стандартом є формат коментарів doxygen, дані його можна видобути і показати на придатних для пошуку інтернет-сторінках.
У KDevelop передбачено підтримку коментарів у цьому форматі за допомогою скорочення для створення оболонки-коментаря, який документуватиме клас або вбудовану функцію. Наприклад, припустімо ви вже створили такий код:
class Car { public: std::string get_color () const; };
Тепер нехай вам потрібно додати документацію для класу і вбудованої функції. Для цього пересуньте курсор на перший рядок коду і скористайтеся пунктом меню Alt + Shift + D. KDevelop відкриє таке діалогове вікно:
або натисніть комбінацію клавішКурсор вже перебуває у затіненій області, щоб ви могли ввести короткий опис (після ключового слова doxygen @brief
) цього класу. Тепер ви можете продовжити додавати документацію до цього коментаря, який краще пояснюватиме призначення класу:
Доки редагування відбуватиметься у коментарі текст коментаря буде позначено зеленим кольором (колір буде знято, щойно ви виведете курсор за межі коментаря). Коли ви наприкінці рядка натиснете клавішу Enter, KDevelop автоматично додасть новий рядок, що починатиметься з зірочки та відступу у один символ.
Тепер виконаємо документування вбудованої функції. Знову розташуйте курсор на рядку оголошення і виберіть пункт меню Alt + Shift + D:
або натисніть комбінацію клавішЗнову ж таки, KDevelop автоматично створить каркас коментаря разом з документації щодо самої функції, а також типом даних, які вона повертає. У нашому випадку назва функції доволі очевидно описує її призначення, але часто аргументи функції можуть бути доволі неочевидними, їх слід документувати окремо. Наприклад, розгяньмо трохи цікавішу функцію та коментар, який автоматично створить для неї KDevelop:
У нашому прикладі у запропонованому коментарі вже містяться всі поля Doxygen для окремих параметрів.
Перейменування змінних, функцій і класів
Іноді виникає потреба у перейменуванні функції, класу або змінної. Наприклад, нехай маємо такий код:
Нехай пізніше ми зрозуміємо, що назва remove_students
є невдалою, і її варто назвати, скажімо, throw_out_students
. Ви могли б виконати пошук з заміною назви функції, але у такого способу є два недоліки:
- Функцію може бути використано у декількох файлах.
- Нам потрібно перейменувати лише цю функцію і не чіпати функції, які можуть мати ту саму назву, але які оголошено у інших класах або просторах назв.
Обидві ці проблеми можна розв’язати наведенням курсора на всі використання назви функції з наступним вибором пункту
(або клацанням правою кнопкою миші на назві з вибором пункту ). У відповідь буде відкрито діалогове вікно, за допомогою якого ви зможете ввести нову назву функції і переглянути всі місця, де використано функцію:Фрагменти коду
У більшості проектів зустрічаються фрагменти коду, які доводиться використовувати доволі часто. Приклади: інструкції компілятора, цикл для всіх інструкцій, для функцій запису інтерфейсу користувача перевірки введених користувачем даних без відкриття вікна повідомлення про помилку. У проекті автора цього підручника часто використовується такий різновид коду:
for (typename Triangulation<dim,spacedim>::active_cell_iterator cell = triangulation.begin_active(); cell != triangulation.end(); ++cell) ... якісь дії над cell ...
Rather than typing this kind of text over and over again (with all the concomitant typos one introduces), the Snippets tool of KDevelop can help here. To this end, open the tool view (see Tools and views if the corresponding button isn't already on the perimeter of your window). Then click on the "Add repository" button (a slight misnomer — it allows you to create a named collection of snippets for source codes of a particular kind, e.g. C++ sources) and create an empty repository. Then click to add a snippet, to get a dialog like the following:
To use a snippet so defined, when you are editing code, you can just type the name of the snippet like you would any other function or variable name. This name will become available for auto-completion — which means that there is no harm in using a long and descriptive name for a snippet such as the one above — and when you accept the suggestion of the auto-completion tooltip (for example by just hitting Enter), the already entered part of the snippets' name will be replaced by the full expansion of the snippet and will be properly indented:
Note that for this to work, the Snippets tool view need not be open or visible: you only ever need the tool view to define new snippets. An alternative, if less convenient, way to expand a snippet is to simply click on it in the respective tool view.
Режими і робочі набори
If you've gotten this far, take a look at the upper right of the KDevelop main window: As shown in the picture, you will see that there are three modes KDevelop can be in: Debugging programs) and (see Working with version control systems).
(the mode we discuss in the current chapter on working with source code), (seeEach mode has its own set of tools that are stacked around the perimeter, and each mode also has a working set of currently open files and documents. Furthermore, each such working set is associated with a current session, i.e. we have the relationship shown above. Note that the files in the working set come from the same session, but they may come from different projects that are part of the same session.
If you open KDevelop the first time, the working set is empty — there are no open files. But as you open files for editing (or debugging, or reviewing in the other modes) your working set grows. The fact that your working set is non-empty is indicated by a symbol in the tab, as shown below. You will notice that whenever you close KDevelop and later start it again, the working set is saved and restored, i.e. you get the same set of open files.
If you hover your mouse over the symbol for the working set, you get a tooltip that shows you which files are currently open in this working set (here: the step-32.cc
and step-1.cc
files). Clicking on the red minus sign closes the tab for the corresponding file. Maybe more importantly, clicking on the correspondingly named button allows you to close the entire working set at once (i.e. to close all currently open files). The point about closing a working set, however, is that it doesn't just close all files, it actually saves the working set and opens a new, still empty one. You can see this here:
Note the two symbols to the left of the three mode tabs (the heart and the unidentifiable symbol to its left). Each of these two symbols represents a saved working set, in addition to the currently open working set. If you hover your mouse over the heart symbol, you'll get something like this:
It shows you that the corresponding working set contains two files and their corresponding project names: Makefile
and changes.h
. Clicking will close and save the current working set (which as shown here has the files tria.h
and tria.cc
open) and instead open the selected working set. You can also permanently delete a working set, which removes it from the set of saved working sets.
Деякі корисні клавіатурні скорочення
У редакторі KDevelop використано всі звичайні клавіатурні скорочення для дій з редагування. Крім того, у редакторі передбачено декілька додаткових дій, пов’язаних з редагуванням коду програм. Деякі з цих дій мають відповідні типові клавіатурні скорочення. Нижче наведено частину з корисних клавіатурних скорочень для дій:
Пересування кодом | |
---|---|
Ctrl+Alt+O | Пришвидшене відкриття файла: вкажіть частину назви файла і виберіть той з них у каталозі проектів поточного сеансу, який вам потрібен; цей файл і буде відкрито. |
Ctrl+Alt+C | Пришвидшене відкриття класу: вкажіть частину назви класу і виберіть ту з назв класів, яка вам потрібна; курсор буде переведено до рядка оголошення класу. |
Ctrl+Alt+M | Пришвидшене відкриття функції: вкажіть частину назви функції (частини класу) і виберіть з запропонованих варіантів той, який вам потрібен; зауважте, що у списку буде показано оголошення і визначення, а курсор буде переведено до вибраного вами пункту. |
Ctrl+Alt+Q | Універсальне пришвидшення відкриття: вкажіть будь-які дані (назву файла, назву класу, назву функції), і вам буде показано список всіх частин проекту, які відповідають критерію пошуку. |
Ctrl+Alt+N | Огляд: показує список всіх дій, які виконуються у файлі, наприклад, оголошень класів та визначень функцій. |
Ctrl+, | Перейти до визначення функції, якщо курсор перебуває у місці її оголошення. |
Ctrl+. | Перейти до оголошення функції або змінної, якщо курсор перебуває у позиції визначення функції. |
Ctrl+Alt+PageDown | Перейти до наступної функції |
Ctrl+Alt+PageUp | Перейти до попередньої функції |
Ctrl+G | Перейти до рядка |
Пошук і заміна | |
Ctrl+F | Знайти |
F3 | Знайти далі |
Ctrl+R | Замінити |
Ctrl+Alt+F | Знайти і замінити у декількох файлах |
Інші команди | |
Ctrl+_ | Згорнути один рівень: вилучити блок з перегляду, наприклад, якщо ви бажаєте зосередитися на загальнішій картині у функції. |
Ctrl++ | Розгорнути один рівень: скасувати згортання. |
Ctrl+D | Знякти коментування з позначеного фрагмента тексту або поточного рядка. |
Ctrl+Shift+D | Додати позначки коментаря до позначеного тексту або поточного рядка. |
Alt+Shift+D | Документувати поточну функцію. Якщо курсор перебуває на оголошенні функції або класу, натискання цієї комбінації клавіш призведе до створення коментаря у форматі doxygen зі списком параметрів, значень, які повертаються, тощо. |
Ctrl+T | Поміняти місцями поточний і попередній символи |
Ctrl+K | Вилучити поточний рядок (зауваження: ця дія не збігається за результатом з дією «вилучити звідси до кінця рядка» у emacs) |