Глава 5
Болышую часть процесса разработки программ занимает написание кодов в окне редактора. Как хороший текстовый редактор кардинально упрощает процесс написания книги (ну хорошо, не кардинально, но все же упрощает), так и хороший редактор кодов значительно облегчает процесс создания программ. Редактор кодов позволяет решать не только обычные задачи редактирования, такие как копирование, вырезание и вставка текста, но и специальные задачи, касающиеся создания программ.
Visual С++ имеет многофункциональный настраиваемый редактор кодов, позволяющий
решать многие специальные задачи, например такие, как одновременный сдвиг нескольких строк или быстрое подключение заголовочного файла. В этой главе дается краткий обзор наиболее важных возможностей этого редактора.
Visual C++ позволяет открывать для редактирования любое количество файлов (может и не любое, но достаточно большое). Если вы открыли cpaзy несколько файлов, коды каждого из них будут отображаться в отдельном окне. Visual C-+ поддерживает как многооконный интерфейс MDI (Multiple Document Interface), так и отображение окон в виде вкладок. (MDI — это о всего лишь интерфейс, позволяющий отображать на экране одновременно несколько окон и перемещать их независимо друг от друга.)
Режим отображения окон в виде вкладок установлен по
умолчанию. Как обычно выглядит окно редактора кодов, показано на рис. 5.1.
Рис. 5.1. Редактор используется для отображения,
ввода и редактирования кодов программы
Для открытия окна редактора кодов обычно используют один из перечисленных ниже
способов.
Сохранить отредактированный файл также очень просто. Можно даже сохранить сразу
все файлы, открытые для редактирования. Вот как это делается.
В процессе написания кодов вы можете заметить, что некоторые действия приходится
выполнять снова и снова. Одни из них относятся к разряду обычных (например, вырезание или копирование текста). Другие возможны только при написании программ (например, одновременное смешение группы строк или открытие заголовочного файла). В табл. 5.1 приведен список наиболее часто выполняемых задач и описание способов их решения. Более специфические задачи описаны после более общих.
Задача | Способ решения |
Выделение текста | Щелкните в позиции, с которой должно начинаться выделение. Нажмите
левую кнопку мыши, перетащите курсор к позиции, в которой выделение
должно заканчиваться, и отпустите кнопку мыши.
Или щелкните в позиции, с которой должно начинаться выделение, нажмите и удерживайте клавишу <Shift> и щелкните в позиции, в которой выделение должно заканчиваться. Или используйте клавиши управления курсором, чтобы перейти в позицию начала выделения, нажмите и удерживайте клавишу <Shift> и, опять используя клавиши управления курсором, перейдите в позицию окончания выделения |
Вырезание текста | Выделите текст. Выберите команду Edit->Cut (Правка->вырезать) или нажмите клавиши <Ctrl+X>. Можете затем вставить вырезанный текст в любом другом месте. (Для вырезания текста можно также щелкнуть правой кнопкой мыши на выделенном фрагменте и выбрать из открывшегося контекстного меню команду Cut.) |
Копирование текста |
Выделите текст. Выберите команду Edit->Copy (Правка->Копировать) или нажмите клавиши <Ctrl+C>. Можете затем вставить скопированный текст в любом другом месте. (Для копирования текста можно также щелкнуть правой кнопкой мыши на выделенном фрагменте и выбрать из открывшегося контекстного меню команду Сору.) |
Вставка текста | Выберите команду Edit->Paste (Правка->Вставить) или нажмите клавиши <Ctrl+V>. В окно редактора будет вставлен текст из буфера обмена. (Можно также щелкнуть правой кнопкой мыши в позиции, где должен быть вставлен текст, и выбрать из открывшегося контекстного меню команду Paste.) |
Переход в начало файла | Нажмите <Ctrl+Home> |
Переход в конец файла | Нажмите <Ctrl+End> |
Переход на страницу назад | Нажмите клавишу <PgUp> |
Переход на страницу вперед | Нажмите клавишу <PgDn> |
Переход вправо на одно слово | Нажмите <Ctrl + стрелка вправо> |
Переход влево на одно слово | Нажмите <Сtгl+стрелка влево> |
Одновременный сдвиг нескольких строк | Выделите несколько строк и нажмите клавишу <ТаЬ>. Это может быть полезно, например, если вы добавили оператор if и хотите выделить часть кодов, которые к этому оператору относятся |
Отмена сдвига нескольких строк | Выделите строки и нажмите <Shift+Tab>. Этот прием может быть полезен, если вы скопировали часть кодов в другое место программы и теперь нет необходимости специально выделять их с помощью отступов |
Переход ко второй скобке из пары скобок |
Нажмите <Ctri+]>, чтобы перейти от открывающей скобки (,
{, < или
[ - курсор уже должен находиться перед ней - к соответствующей ей
закрывающей скобке:), }, > или ].
Тем же нажатием выполняется
обратный переход. |
Использование закладок |
Поместите курсор в том месте, где вы хотите оставить закладку.
Нажмите дважды <Ctrl+К>. Таким образом вы отметите позицию в
кодах программы, к которой при необходимости сможете быстро
вернуться. Например, если вы хотите скопировать фрагмент кодов из одной части программы в другую, установите закладку, найдите нужный фрагмент кодов, скопируйте его, вернитесь обратно к закладке и вставьте скопированный фрагмент |
Переход к закладке | Нажмите <Ctrl+K> и <Ctrl+N>, чтобы перейти к следующей закладке в файле. Нажмите <Ctrl+K> и <Ctrl+P>, чтобы перейти к предыдущей закладке |
Переключение между окнами редактора |
Нажмите <Ctrl+Tab> или <Ctrl+F6>, чтобы перейти к следующему окну редактора (которое было открыто после текущего). Нажмите <Shift+Ctrl+Tab> или <Shift+Ctrl+F6>, чтобы перейти к предыдущему окну редактора (которое было открыто перед текущим) |
Открытие заголовочного файла, соответствующего открытому файлу | Щелкните правой кнопкой мыши на команде #include и выберите из открывшегося контекстного меню команду Open Document. При написании программ C++ редактировать заголовочные файлы приходится почти так же часто, как и исходные файлы. Иногда открывать заголовочный файл необходимо для того, чтобы просмотреть, что уже было определено |
Получение справки о командах | Щелкните на том элементе программы, по которому нужно получить справку. Нажмите клавишу <F1>. Таким образом, например, можно получать справку относительно синтаксиса вызова библиотек, Windows API или команд C++ |
В Visual C++ есть возможность выделять цветом отдельные синтаксические элементы,
что значительно упрощает чтение набранных кодов. Выделив цветом отдельные элементы программы, такие как комментарии, ключевые слова, значения и переменные, вы делаете для себя их идентификацию автоматической. Этот прием также облегчает обнаружение типичных синтаксических ошибок.
Например, если все коды программы будут отображаться черным цветом, а комментарии— синим, вы сразу увидите, что забыли закрыть какой-то комментарий (поставив в его конце символы */) , поскольку далее за ним будет открываться бескрайнее море синего текста.
Если установить, что все ключевые слова должны отображаться зеленым цветом, и если какое-то набранное ключевое слово не окрасится в зеленый цвет, вы сразу же поймете, что при его наборе допустили синтаксическую ошибку. Например, если вы наберете claps вместо class , набранное слово зеленым не станет. Точно так же, если при объявлении какая-то переменная окрасится в зеленый цвет, вы сразу поймете, что это имя для нее неприемлемо,
поскольку имена переменных не должны совпадать с ключевыми словами. (Более детально правила присвоения имен переменным будут рассмотрены в главе 8.)
Чтобы определить цвета для различных синтаксических элементов программы, выберите команду Tools->Options (Сервис->Параметры) и во вкладке Environment (Окружение) перейдите к опциям Fonts and Colors (Шрифты и цвета).
На рис. 5.2 показано окно редактора кодов с включенной возможностью выделения цветом. (Разумеется, поскольку вы смотрите на черно-белый рисунок, для вас это больше похоже на выделение серым цветом.)
Рис. 5.2. Выделение цветом отдельных синтаксических элементов про-
граммы значительно облегчает их визуальную идентификацию
Если вы используете C++, окружение .NET, библиотечные функции, среду Windows и не помните или не знаете, как работает то или иное средство, либо что обозначает тот или иной элемент, нужная подсказка находится на "расстоянии" одного щелчка. Например, допустим, что вы используете библиотечную функцию cout, но не уверены в корректности такого выражения:
cout << "Bob";
Щелкните на слове cout , нажмите клавишу <FI>, и тут же откроется окно с необходимой справочной информацией.
Рассмотрим другой пример. Предположим, вы набрали такое выражение:
while (strlen ( bar ) > 10)
Можно щелкнуть на ключевом слове while , нажать клавишу <F1> и получить справку об
использовании команды while , а можно щелкнуть на слове strlen , нажать клавишу <F1> и получить справку об использовании библиотечной функции strlen .
Чтобы добиться правильного выполнения программы, в процессе редактирования ее кодов вам придется переключаться с одной функции на другую почти так же часто, как переходить от одной строки программы к другой в пределах одной и той же функции.
На панели перехода, расположенной в верхней части окна редактора кодов, вы можете видеть названия классов и функций, используемых в открытом в данный момент файле. Чтобы быстро перейти к нужной функции выполните следующее.
РИС. 5.З. Панель перехода автоматизирует переход к нужным элементам программы
Обратите внимание, что панель перехода отображает только классы и функции, используемые в текущем файле. Если вы хотите просмотреть другие элементы классов, используйте средство Class View.
Иногда обилие кодов в открытых окнах нескольких проектов может создавать впечатление хаоса. Разработчики Visual C++ учли эту проблему и предложили способ ее решения. Те фрагменты кодов, которые в данный момент вас не интересуют, могут быть свернуты, чтобы не занимать место на экране. А если вы снова захотите их просмотреть, их отображение можно быстро восстановить.
Набор строк, который одновременно может быть свернут или вновь отображен, называется фрагментом кодов. Фрагменты могут быть созданы автоматически, либо вы
сами можете их определить. Рядом с каждым фрагментом расположен знак "плюс" или "минус", позволяющий отображать либо сворачивать нужный фрагмент (рис. 5.4).
Рис. 5.4. Свернув коды, вы можете видеть "общую картину"
Существует два основных способа свертывания кодов.
Свертывание произвольных фрагментов. Вы можете легко свернуть любой нужный вам набор кодов. Для этого просто выделите его, щелкните на нем правой кнопкой мыши и выберите команду Outlining->Hide Selection (Свернуть->Скрыть выделенное). Можно также выделить нужный набор кодов и в главном меню выбрать команду Edit->Outlining->Hide Selection (Правка->Свернуть->Скрыть выделенное).
Свертывание блоков. Visual C++ автоматически выделяет структурные элементы языка С+-. Таким образом вы можете сразу сворачивать отдельные блоки программы. (Более подробно о блоках программы, к которым относятся циклы, операторы управления потоками данных и функции, речь идет в части 2 книги.)
Чтобы получить возможность сворачивать отдельные блоки, выберите команду Edit->Outlining->Collapse to Definitions (Правка-> Свернуть-> Сворачивать по определениям). Visual C++ выделит в отдельные фрагменты каждое определение функции, определение класса и все прочие блоки, имеющиеся в кодах открытого в данный момент окна. Также будут выделены все блоки, входящие в состав дргих блоков.
В процессе написания программ вы очень часто будете сталкиваться с необходимостью
поиска некоторых уже набранных кодов. Вместо того чтобы самостоятельно просматривать коды всей программы в поиске нужного фрагмента, доверьте это занятие редактору кодов.
Чтобы найти какой-то фрагмент текста программы, воспользуйтесь командой Edit->Find and Replace->Find (Правка->Поиск и замена->Найти) или нажмите клавиши <Ctrl+F>. Если найденный фрагмент текста нужно сразу же заменить каким-то другим, примените команду Edit->Find and Replace->Replace (Правка->Поиск и замена->Заменить) или нажмите комбинацию клавиш <Ctrl+H>. Например, можно использовать команду Edit->Find and Replace->Replace, чтобы найти в тексте программы все упоминания переменной foo и заменить их переменной goo.
Диалоговые окна Find (Поиск) и Replace (Замена) позволят вам определить множество дополнительных установок, контролирующих процесс поиска нужных фрагментов в тексте
Откуда берутся все эти загадочные термины
Подстановочные знаки иногда называют regular expression matching commands (команды сопоставления регулярных выражений). Этот громоздкий термин появился благодаря некоторым особенностям работы компиляторов. При построении компиляторов создаются так называемые лексические анализаторы - специальные программы, просматривающие текст исходных файлов и разбивающие его на отдельные составляющие, которые компилятор сможет как-то интерпретировать. Разбивка текста файлов осуществляется на основании сопоставления его с заранее определенными образцами (или шаблонами). Эти шаблоны и называются регулярными выражениями.
Таким образом, сопоставление регулярных выражений обозначает всего лишь поиск и идентификацию текста, соответствующего заданным шаблонам.
Но вы можете называть это просто использованием подстановочных знаков.
Регулярные выражения, представленные в табл. 5.3, иногда называются регулярными выражениями GREP, поскольку они используются программой GREP - одной из наиболее распространенных программ поиска текста. GREP стала популярным инструментом именно в системах UNIX. А как известно, многие инструменты UNIX имеют такие своеобразные названия, как MAWK, SED, DIFF, или как GREP. В разговоре с каким-нибудь хакером, можете спокойно использовать слово grep вместо слова поиск, если вы имеете в виду поиск текста по заданному шаблону. Если это настоящий хакер, он вас поймет.
Рис. 5.5. Укажите, что нужно найти, и вы немедленно получите результат
Ниже приведен список основных опиий диалоговых окон Find и Replace.
Match case (С учетом регистра). В языке C++ строчные и прописные буквы считаются разными. Например, слова Boogs и boogs рассматриваются как названия двух разных переменных. Если вы активизируете опцию Match case, будут найдены (или заменены) только те слова, в которых очередность строчных и прописных букв точно совпадает с заданным образцом. Используйте ее только в том случае, если точно знаете, какое слово должно быть найдено (учитывая строчные и прописные буквы). Если есть какие-то сомнения, отключите эту опцию.
Match whole word only (Только целые слова). Если эта опция активизирована, обрабатываться будут только отдельные целые слова (слова, которые отделены от
других слов пробелами, запятыми или скобками).
Если вы эту опцию отключите,
найден будет также тот текст, который совпадает со сравниваемым образцом и является составной частью другого слова. Например, если вы отключите эту опцию и
укажете для поиска текст const, он будет найден в таких словах, как constant и
deconstruct.
Search hidden text (Просматривать скрытый текст). Если вы активизируете эту
опцию, просматриваться также будет скрытые (в результате сворачивания) фрагменты текста.
Search up (Найти выше). Обычно поиск ведется от текущей позиции курсора вниз
до конца файла. Эта опция указывает редактору, что нужно просматривать текст от
текущей позиции курсора вверх до начала файла.
Use regular expression and wildcards (Использовать регулярные выражения и
подстановочные знаки). Подстановочные знаки— это специальные символы, которые используются для представления других символов. Например, предположим,
что нужно найти какую-то переменную и вы не помните точно ее названия, но
знаете, что она начинается с буквы. В таком случае при указании образца для поиска наберите между буквами S и h подстановочный знак * (звездочка), который
заменит собой произвольное количество любых других символов.
Подстановочные знаки являются упрощенным вариантом более гибкого инструмента— регулярных выражений. В табл. 5.2 приведен список наиболее часто употребляемых подстановочных знаков. В табл. 5.3 вы найдете перечень основных регулярных выражений.
Search: Current window->Current document (Поиск: Текущее окно->Текущий документ). Эта опция сообщает редактору, что нужно просматривать только тот файл, который открыт в текущем окне.
Search: All Open documents (Просмотр всех открытых документов). Эта опция
сообщает редактору, что нужно просматривать все открытые в данный момент
файлы. Эта возможность может быть полезной, например, если вы хотите изменить имя класса, используемого в разных файлах проекта.
Search: Only
быть ограничен пределами блоков, на которые разбивается текст или коды. Если
поиск в пределах блоков будет возможен. Visual C++ сделает эту опцию доступной
и укажет параметры этого поиска.
Search: Selection only (Просмотр только выделенного фрагмента). Эта опция позволяет заменить текст только в выделенном в данный момент фрагменте. Это удобно, если необходимо, например, изменить имя переменной для какой-то одной функции.
Mark All (Пометить все). Щелчок на этой кнопке дает указание Visual C++ найти
все соответствия, но не отображать их на экране, а просто пометить, с тем чтобы
впоследствии вы могли к ним вернуться.
Команда | Значение |
? | Заменяет один произвольный символ. Например, шаблону s?ip соответствуют слова Skip, Swip и т.п. |
* | Заменяет любое количество произвольных символов. Например, шаблону s i * сооветствуют слова SI , Slip , Sliding и др. |
[] | Заменяет один из символов, указанных с скобках. Например, шаблону S [ml] ug соответствуют слова Smug и Slug |
[!] | Заменяет любой символ, за исключением тех, что указаны в скобках. Например, шаблону S[!ml] ug соответствуют такие слова, как Stug, Swug, но не Smug и Slug |
. | Заменяет собой любой один символ. Например, шаблону s. ip соответствуют слова Skip, Swip и т.п |
* | Заменяет любое количество произвольных символов. Например, шаблону Sl* соответствуют слова SI, Slip , Sliding и др. |
+ | Заменяет любое количество символов, предшествующих (по алфавиту) символу, после которого эта команда набрана. Например, шаблону So+ соответствуют слова Soon, Son, So и др. |
^ | Ищет соответствие по началу строки. Например, шаблон ^// находит все комментарии, которые начинаются от начала строки |
$ | Ищет соответствие по концу строки. Например, шаблон fоо$ находит только те слова fоо, которые набраны в конце строки |
['] | Заменяет собой один из символов, набранных внутри скобок. Например, шаблону s [ml] ug соответствуют слова Smug и Slug |
[^] | Заменяет собой любой символ, кроме тех, что набраны внутри скобок. Например, шаблону S[^ml]ид соответствуют слова Saug, Skug и другие, но не Smug и Slug |
[-] | Заменяет собой любую букву из диапазона, указанного в скобках (включая сами набранные буквы). Например, шаблону S [ c - l ] u g соответствуют только слова из набора Scug, Sdug, Seug, . . . Slug |
АВ: Некоторые знаки из этой таблицы могут быть неверны, надо уточнить!
Назад |
Начало урока |
Вверх |
Вперед
Содержание