Как сделать несколько файлов в visual studio

Добавил пользователь Алексей Ф.
Обновлено: 04.10.2024

У меня есть файл, xyz.cpp. Я хочу открыть два экземпляра этого файла в Visual Studio (кстати, я использую Visual Studio 2005). Зачем мне это делать? Я хочу сравнить два раздела одного и того же файла рядом. Я знаю обходные пути, такие как:

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

Я могу разбить окно на две части. Проблема с разделением, что я могу разделить только по горизонтали. Результатом горизонтального разделения является то, что правая половина моего экрана является пустым пространством.

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

ОТВЕТЫ

Ответ 1

Вот как это сделать.

  1. Выберите вкладку, которую вы хотите две копии
  2. Выберите меню Окно → Новое окно из меню.
  3. Щелкните правой кнопкой мыши новую вкладку и выберите New Vertical Tab Group

Если "Новое окно" не указано в меню "Окно", обратите внимание, что команда существует, даже в Visual Studio 2017. Добавьте ее в меню "Окно" с помощью меню "Инструменты" → "Настройка" → "Команды". В этот момент решите, куда поместить команду "Новое окно" и выберите "Добавить команду".

ОБНОВЛЕНО "30 июля 2018 года"

В Visual Studio Code версии 1.25.1 и новее

Способ 1

Вы можете просто щелкнуть левой кнопкой мыши по файлу на боковой панели (проводнике) и нажать Ctrl + Enter .

Способ 2

Просто щелкните правой кнопкой мыши свой файл на боковой панели кода Visual Studio (проводник) и выберите первый вариант, открытый сбоку.

Ответ 2

Для выражений Visual Basic, HTML, JScript и RDL опция Window > New Window упомянутая в ответе PaulB, отключена. Однако в реестре можно изменить параметр, чтобы включить пункт меню.

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

Включение нового окна в реестре Windows. [ 1 ] [ 2 ]

Перейти к следующему разделу реестра. Этот пример для Basic (Visual Basic), но ключ также для HTML, JScript и RDL Expression.

  • 64-разрядная ОС: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\Languages\Language Services\Basic
  • 32-разрядная ОС: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\Languages\Language Services\Basic

Найдите значение Single Code Window Only и выполните одно из следующих действий:

  • Установите 0
  • Переименовать значение
  • Удалить значение (будьте осторожны !)

Это активирует пункт меню "Новое окно", но он все еще может не отображаться в меню.

Добавление пункта меню

Чтобы увидеть пункт меню "Новое окно", мне пришлось добавить его обратно в меню:

  • Инструменты> Настроить. > Команды> Добавить команду.
  • Выберите "Строка меню", выберите меню "Окно" в выпадающем меню
  • Добавить команду. > Окно> Новое окно> ОК

Восстановление значения реестра
Скопируйте и вставьте его в блокнот, сохраните как файл.reg и импортируйте файл в реестр, чтобы восстановить первоначальные настройки.

Ответ 3

Откройте файл (если вы используете несколько групп вкладок, убедитесь, что ваш файл выбран).

Окно меню → Разделить (поочередно, этот маленький кусочек чуть выше вертикальной полосы прокрутки редактора - возьмите его и перетащите вниз)

Это дает вам два (горизонтальных) просмотра одного и того же файла. Помните, что любые действия редактирования отразятся на обоих представлениях.

Как только вы закончите, возьмите разделитель и перетащите его полностью (или меню Окно → Удалить разделение).

Ответ 4

Вы можете использовать опцию Windows → Новое окно, чтобы дублировать текущее окно. Смотрите больше на: Почему мне нравится Visual Studio 2010? Открепить Windows

Ответ 5

Ответ Люка не сработал для меня. Команда "Новое окно" уже была указана в настройке параметров, но не отображалась в контекстном меню вкладок.js, несмотря на удаление параметра реестра.

Поэтому я использовал:

Прокрутите вниз, чтобы выбрать Window.NewWindow

И я нажал и назначил сочетания клавиш, Ctrl + Shift + W .

Это сработало для меня.

Ну, "работал" был слишком сильным. Мои сочетания клавиш действительно открывают другую вкладку в том же файле JavaScript, но, скорее всего, бесполезно, они не отображают содержимое; это просто пустое белое окно! Возможно, вам повезет больше.

Ответ 6

Зайдите в меню → Windows → Новое окно:

Enter image description here

Ответ 7

Меню "Окно", "Новая горизонтальная/вертикальная вкладка", я думаю.

Ответ 8

При работе с Visual Studio 2013 и VB.NET я обнаружил, что вы можете довольно легко настроить меню и добавить команду "Новое окно" - нет необходимости возиться с реестром!

Только Бог знает, почему Microsoft решила не включать команду для некоторых языков.

Ответ 9

Для более новых версий (таких как Visual Studio 2017)

  • Выберите окно, которое вы хотите дублировать.
  • Перейдите на вкладку окна и нажмите на разделить в верхней части списка.
  • Когда вы закончите, нажмите еще раз, чтобы выключить его.

Ответ 10

Для типов файлов, где один и тот же файл не может быть открыт в вертикальной группе вкладок (например, файлы .vb), вы можете

  • Откройте 2 разных экземпляра Visual Studio
  • Открыть один и тот же файл в каждом экземпляре
  • Измените размеры окон IDE и поместите их рядом друг с другом, чтобы достичь своего макета.

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

Ответ 11

У меня нет копии Visual Studio 2005, но этот процесс работает в Visual Studio 2008:

  1. Откройте xyz.cpp вместе с другим файлом.
  2. Щелкните правой кнопкой мыши заголовок вкладки и выберите новую вертикальную группу вкладок.
  3. Щелкните левой кнопкой мыши по этому другому файлу в первой группе вкладок.
  4. Снова откройте xyz.cpp через обозреватель решений.

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

Ответ 12

Открыв свой файл, перейдите в окно команд (меню "Вид" → "Другие окна" → "Окно команд" или просто Ctrl + Alt + A )

работал для меня (Visual Studio 2017).

Или используя меню:

Окно меню → Новое окно

Окно меню → Новая вертикальная группа нажатий

Ответ 13

Я придумал хак, который может дать результат, намеченный в первоначальном ответе.

Если у вас есть файл, который вы хотите в двух окнах в элементе управления источником, вы можете щелкнуть правой кнопкой мыши на файле и выбрать сравнить, вы можете сравнить

Если вы сравните, у вас появится новое окно под названием diff, показывающее содержимое вашего файла.

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

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

Алгоритм работы при создании C++-проекта в Visual Studio

1. New Project: Создание проекта.

2. Add files: Добавление файлов.
Правый клик на проекте в окне Solution Explorer (Обозреватель решений) — пункт Add (Добавить) — пункт Create New Item (Создать элемент) или Add existing Item (Существующий элемент). Для этого и любого другого проекта понадобится как минимум один файл с точкой входа в программу — функцией main.

У меня есть основной исполняемый файл, который выполняется на основе настроек, сохраненных в файле конфигурации. Я хочу иметь возможность изменять настройки в файле конфигурации с помощью другого исполняемого файла.

Есть ли простой способ создания этих двух разных исполняемых файлов в одном проекте winforms? Это означает, что когда я нажимаю build, в одной папке решения создаются два разных exes - тот, который изменяет конфигурационный файл, и другой, который его использует.

Я знаю, что это можно сделать, если я создаю два отдельных проекта, которые используют одну и ту же папку решений, но я надеялся сделать все за один шаг.

Я предполагаю, что для этого мне нужен проект с двумя "главными" функциями. Это возможно?

Вы можете построить столько сборок в одном решении, сколько захотите. Ассембли могут приводить к.DLL или.EXE.

Создайте решение (или откройте существующее решение). Щелкните правой кнопкой мыши корневой узел в "Обозревателе решений" и выберите "Добавить"> "Создать проект" и выберите тип проекта, который вы хотите добавить. Щелкните правой кнопкой мыши элемент проекта в обозревателе решений и выберите "Свойства"> "Создать"> "Выход". Установите в нужный каталог, где его нужно создать. Повторите это для других проектов.

Таким образом, вы можете получить следующее в своем обозревателе решений:

  • MySolution
    • MyCommonCode (библиотека классов, результат MyCommonCode.dll)
    • MyMainApp (приложение Winforms, результат MyMainApp.exe)
    • MyConfigApp (Winforms App, результат MyConfigApp.exe)

    В сборке MyCommonCode содержится общий код, который оба exe используют как идентификаторы вашего файла конфигурации и т.д.

    MyMainApp - это приложение графического интерфейса (Winforms, WPF и т.д.) Для основного приложения с проектом-ссылкой на проект MyComonCode.

    MyConfigApp - это графическое приложение для редактирования значений конфигурации с ссылкой на проект проекта MyCommonCode.

    Таким образом вы получаете: MyCommonCode.dll , MyMainApp.exe и MyConfigApp.exe .

    Обновление на основе комментария:

    Насколько я знаю, один компилятор может построить только один двоичный файл (dll или exe) для одного проекта. Что-то вроде ответа на код выше: переместите большую часть кода в общую/основную DLL и создайте два тонких проекта для двух exe, которые только "настраивают и используют" центральную общую/основную DLL.

    Вы можете создавать различные EXE на основе одного и того же проекта, используя определения компилятора. Вы даже можете определить свои собственные определения. Но при компиляции вы можете создавать только одну бинарную (DLL, EXE) для каждого проекта - одну или другую, но не обе.

    В статье вы научитесь создавать программу из нескольких файлов

    Содержание

    Объявления и определения

    Рассмотрим задачу: надо вывести числа от N до 1, при этом для нечётных чисел надо писать odd $ , а для чётных even $ . Вывод должен выглядеть так:

    Ради интереса решим задачу с помощью рекурсии:

    Увы программа не компилируется. В C++ каждая функция должна быть объявлена или определена до первого использования, но в нашем случае printEvenRecursive использует printOddRecursive, а printOddRecursive использует printEvenRecursive! Мы не можем поместить определение одной функции выше другой так, чтобы каждая функция была объявлена перед использованием.

    Но кроме определений функций в C++ есть объявления функций

    • Объявление (declaration) - это конструкция, которая зарезервирует идентификатор и опишет для компилятора его тип, но не раскроет деталей работы объявленной сущности.
    • Определение (definition) - это конструкция, которая не только зарезервирует идентификатор, но и раскроет реализацию связанной с ним сущности

    Объявление функции похоже на определение функции, только вместо тела стоит точка с запятой:

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

    Хорошим стилем считается заранее и в одном месте писать объявления всех функций, кроме main. Вы можете писать объявления в начале cpp-файла или в заголовке. О заголовках читайте ниже.

    Пишем свой заголовок

    • Заголовок может иметь и другое расширение файла, но не стоит нарушать джентльменских соглашений: используйте h или hpp
    • В заголовке пишут только объявления функций, а все определения можно и нужно помещать в cpp-файл

    Создайте каталог, и разместите в нём файл print.h , в котором будут объявления функций. Скопируйте туда код, приведённый ниже.

    Мы могли бы убрать из заголовка printEvenRecursive и printOddRecursive, сделав его чище, но сейчас для примера оставим.

    Запомните правила хорошего тона:

    Теперь создайте файл print.cpp , в котором будут реализованы функции из заголовка print.h . Скопируйте туда код, расположенный ниже.

    В конце создайте файл main.cpp и скопируйте в него код:

    Компоновка программы из нескольких файлов

    Собирая программу из одного файла с помощью g++, вы на деле выполняли одним махом два действия:

    • компиляцию, в ходе которой исходный текст файла превращается в логическую модель (AST) и затем превращается в объектный код, в котором машинные коды смешаны со ссылками на внешние функции
    • компоновку, в ходе все внешние ссылки на функции заменяются на машинный код либо превращаются в ссылки на динамические библиотеки (dll/so, также известны как shared libraries)

    Сейчас эти же действия мы выполним раздельно. Отройте терминал и введите последовательно две команды:

    Если код в обоих cpp-файлах синтаксически правилен, то компилятор создаст два файла: main.o и print.o . Эти файлы называют объектными файлами (object files). Именно они содержат машинный код, смешанный со ссылками на внешние функции.

    Вы можете дизассемблировать эти файлы, чтобы посмотреть, во что компилятор превратил ваш код. Для этого выполните команду objdump -d main.o .

    Теперь мы вызовем g++ для компоновки объектных файлов. На выходе мы получим исполняемый файл print_executable.exe

    На деле компилятор не будет компоновать: он передаст эту задачу утилите ld. Вызывать утилиту ld вручную мы не станем, потому что потребуются дополнительные флаги, которые включают компоновку со стандартной библиотекой C++.

    Компоновка программы в CMake

    CMake прячет факт раздельной компиляции файлов. Чтобы в CMake скомпоновать программу, состоящую из нескольких частей, просто перечислите эти файлы в add_executable.

    Удалите файл print_recursive.exe :

    Создайте файл CMakeFiles.txt с одной строкой:

    Теперь выполните конфигурирование и сборку программы:

    Мы почти закончили! Остался только один вопрос: почему в add_executable мы указали заголовок print.h , если он всё равно не компилируется сам по себе? Дело в том, что при любых изменениях в коде заголовка print.h вся программа должна быть пересобрана, но файл print.h сам по себе не компилируется. Добавление print.h в список исходников в CMake позволяет CMake следить за датой и временем модификации заголовка, чтобы решить, надо ли повторно собирать проект из-за изменений в заголовках.

    Читайте также: