Как закомментировать строки в visual studio
Перейти к содержимому

Как закомментировать строки в visual studio

  • автор:

VScode закомментировать блок кода

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

29 дек 2021 в 16:15
Ctrl + / должен работать
29 дек 2021 в 16:29

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Несколько способов, но сначала выделите блок, который будете комментить:

  1. По умолчанию на Windows Shift + Alt + A , для OS X Shift ⇧ + Option ⌥ + A .
    Поскольку я, например, использую Azure расширение, то данная комбинация переопределяется под него, поэтому данное сочетание клавиш может не работать. В этом случае можно назначить собственные горячие клавиши через интерфейс, который открывается при помощи Ctrl + K Ctrl + S
  2. Через Command Palette
    F1 или Win: Ctrl + Shift + P или OS X: Shift ⇧ + Command ⌘ + P
    В строке ввести: Toggle Block Comment , выбрать и нажать Enter
  3. Через пользовательский интерфейс
    File -> Edit -> Toggle Block Comment

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

""" import requests for f in range(10): print(f) """ 
/* let range = < start: new Date(), end: new Date(new Date().setDate(new Date().getDate() - 150)), >; */ 
/* typedef enum < INIT = 0 ,DRAW ,PROCESSING ,EXIT >eGameState; */ 

Как закомментировать несколько строк в Visual Studio?

Чтобы быстро закомментировать или раскомментировать строку кода в HTML или CSS редакторе, можете использовать сочетание клавиш ctrl + / или cmd + / .

Как закомментировать сразу несколько строк?

Также CTRL + K хорошо работает в Notepad ++, чтобы комментировать. Если у вас были комментарии в длинном блоке, который вы комментируете, CTRL + Q раскомментирует ваши фактические комментарии, где CTRL + K просто добавьте еще один уровень // впереди. CTRL + SHIFT + K удаляет однострочный комментарий из выделения.

Как закомментировать несколько строк в Visual Studio Python?

В Visual Studio , используя инструменты Python для Visual Studio , блоки могут быть закомментированы Ctrl + K , Ctrl + C и раскомментированы Ctrl + K , Ctrl + U . Единственным механизмом для комментирования кода Python (понимаемого как код, игнорируемый интерпретатором) является # .

Как сделать комментарий в Visual Studio?

В Microsoft Visual Studio есть клевый и быстрый способ комментирования. Выделяем область и жмем Ctrl+K, а затем Ctrl+C. Обратное раскомментирование — Ctrl-K, а затем Ctrl-U. Вообще, советую поизучать хоткеи, например Ctrl+U, Ctrl+Shift+U — переводит выделенный текст в нижний/ВЕРХНИЙ регистр, тоже очень удобно.

Как закомментировать участок кода Python?

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

Как выделить текст в Visual Studio?

Выделить текущую строку: Ctrl + L.

Как закомментировать сразу несколько строк Python?

Так, например, чтобы закомментировать несколько строк Python кода, в PyCharm, следует их выделить и нажать комбинацию клавиш +.

Как закомментировать сразу несколько строк в С?

Как закомментировать сразу несколько строк в Notepad++?

  1. в Eclipse можно закомментировать сразу несколько строк, выделив их и выполнив CTRL + / : …
  2. выберите нужные строки и нажмите клавишу CTRL + Q . …
  3. и CTRL + K хорошо работает в Notepad++ с комментариями. …
  4. в Notepad++ я считаю, что ярлык CTRL + Q для комментирования кода.

Как закомментировать несколько строк JS?

Используйте горячие клавиши! В большинстве редакторов строку кода можно закомментировать, нажав комбинацию клавиш Ctrl+/ для однострочного комментария и что-то вроде Ctrl+Shift+/ – для многострочных комментариев (выделите кусок кода и нажмите комбинацию клавиш).

Как сделать многострочный комментарий в VS Code?

Для многострочного комментария так же есть .

Как быстро закомментировать код в Webstorm?

2) Ctrl + / / CMD + / (Comment/uncomment with line comment) — закомментировать участок кода с помощью двойного слеша.

Как сделать комментарий в VS Code?

Быстро добавить комментарий

Быстрее нажать в любом месте строки Ctrl + /, и строка закомментируется, если она ещё не. А если уже да, то комментарий исчезнет.

Как сделать комментарий в Visual Studio 2019?

Visual Studio Code

  1. F2 — переименовать символ (функцию, переменную и т. …
  2. Ctrl + Shift + O — перейти к символу;
  3. Ctrl + K Z — перейти в режим Дзен, в котором вас не отвлекают лишние детали;
  4. Ctrl + / — закомментировать/раскомментировать строку;
  5. Shift + Alt + A — закомментировать/раскомментировать блок кода;

Как быстро комментировать в Visual Studio Code?

Ctrl+K , а затем Ctrl+C комментирует выделенные строки с помощью # . Ctrl+K , а затем Ctrl+U убирает комментарий со строк. Если у Вас Mac OS, используйте Cmd вместо Ctrl .

Комментарий на несколько строк Visual Studio Code

Смотря различные гайды на ютубе,я видел как люди комментируют несколько строк одним разом при помощи символа # ,подскажите,что за комбинация клавиш позволяет это сделать?

Ctrl+K , а затем Ctrl+C комментирует выделенные строки с помощью # . Ctrl+K , а затем Ctrl+U убирает комментарий со строк. Если у Вас Mac OS, используйте Cmd вместо Ctrl .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками python visual-studio-code комментарии или задайте свой вопрос.

дизайн сайта / логотип © 2022 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2022.1.7.41110

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Как прокомментировать несколько строк в коде Visual Studio?

Я не могу найти способ, чтобы закомментировать и раскомментировать несколько строк кода Код Visual Studio.

можно ли комментировать и раскомментировать несколько строк в коде Visual Studio, используя некоторый ярлык? Если да, то как это сделать?

23 ответов

Shift + Alt + A

здесь вы можете найти все сочетания клавиш.

PS: Я предпочитаю Ctrl + Shift +/ для переключения комментариев блоков, потому что сочетания клавиш Ctrl + / является ярлыком для переключения комментариев строк, поэтому, естественно, легче запомнить. Для этого просто нажмите на значок настроек в левом нижнем углу экрана и нажмите «сочетания клавиш» и найдите » переключить блок. «. Затем нажмите и введите нужную комбинацию.

    выберите строки, которые вы хотите закомментировать/раскомментировать

выполнить команду editor.action.commentLine (клавиша по умолчанию в Windows: CTRL + / )

или

выполнить команду editor.action.addCommentLine (клавиша по умолчанию в Windows: ctrl+k ctrl+c ) соответственно editor.action.removeCommentLine (клавиша по умолчанию в Windows: ctrl+k ctrl+u )

сочетание клавиш для комментариев несколько в Windows является shift + alt + на .

в моем случае, Ubuntu, ярлык ctrl + shift + на .

вы можете увидеть все доступные привязки клавиш на официальном документация.

вот соответствующий бит для osx:

вам нужно будет сначала выбрать строки, которые вы хотите прокомментировать, а затем выполнить над ярлыком, т. е. ⌘/ на osx Ctrl/ на Windows.

как прокомментировать многострочную / одиночную строку в VS-коде:

MacOS:

Shift + опции + A :

Windows:

как переназначить / изменить эти ярлыки?

Windows: Файл > Настройки > Сочетания Клавиш.

MacOS: Код > Настройки > Сочетания Клавиш.

вы можете искать по списку как по привязкам клавиш (имена клавиш), так и по именам команд.

для моей раскладки клавиатуры это Ctrl + § для:

и Shift + Alt + A для:

CTRL + SHIFT + A для CSS multiline

  • Ubuntu 16
  • VSCode Версии 1.17.2

на MacOS комментарий из нескольких строк в коде Visual Studio с помощью сочетания клавиш:

опции + Shift + A

выбрать все строки, которые вы хотите комментарии

сочетания клавиш Ctrl + /

CTRL + SHIFT + A Для Red Hat, centos

  • выберите пункт
  • затем CTRL + SHIFT+A

для меня это было ctrl + ‘ (Я использую шведский макет для клавиатуры). Надеюсь, это кому-то поможет.

1.Выберите текст, нажмите Cntl + K, C для комментариев (Ctr+E+C ) 2.Наведите курсор на первую строку после разделителя / / и перед текстом кода. 3.Нажмите Alt + Shift и используйте клавиши со стрелками для выбора. . 4.После того, как выбор сделан, нажмите пробел, чтобы ввести один пробел.

visual studio 2017 мы делаем: выбор комментариев

нажмите Ctrl+K, чтобы получить ярлык. нажмите Ctrl+C для подтверждения http://visualstudioshortcuts.com/2017/

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

для комментариев в одной строке используйте

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

вы можете настроить сочетания клавиш, перейдя в меню» Инструменты «и выбрав»параметры». Затем выберите «клавиатура» в ветке «окружающая среда». Оттуда вы можете привязать редактирование.CommentSelection и редактировать.Команды UncommentSelection для любой клавиатуры короткие пути, которые вы хотели бы.

Как выделить несколько строк в VS Code?

Пресса Crtl + Shift + Alt + Arrow up/down чтобы выбрать несколько строк в Visual Studio Code. Обратите внимание, что выбранные строки будут находиться в одном столбце (если это возможно). Вы также можете отметить некоторые линии, а затем выполнить эту комбинацию, и у вас будут включены все выбранные линии.

Как закомментировать сразу несколько строк в VS Code?

Visual Studio Code

  1. F2 — переименовать символ (функцию, переменную и т. …
  2. Ctrl + Shift + O — перейти к символу;
  3. Ctrl + K Z — перейти в режим Дзен, в котором вас не отвлекают лишние детали;
  4. Ctrl + / — закомментировать/раскомментировать строку;
  5. Shift + Alt + A — закомментировать/раскомментировать блок кода;

Как выделить слово VS Code?

Выделение целых слов

  1. Windows, Ubuntu — Ctrl + Shift + стрелка вправо / влево
  2. Mac — Command + Shift + стрелка вправо / влево

Как разделить экран VS Code?

SHIFT + ALT + 0 для Linux. Предположительно то же самое работает и для Windows.

Как выделить строку в Visual Studio Code?

Выделить текущую строку: Ctrl + L.

Как выделить несколько строк в Pycharm?

Нажмите Shift + Alt и нажмите кнопку мыши LEFT в месте расположения курсора.

Как закомментировать сразу несколько строк?

Как закомментировать несколько строк одновременно в Notepad ++?

  1. Выберите нужные строки и нажмите CTRL + Q . Это будет включать и выключать комментарии. …
  2. Также CTRL + K хорошо работает в Notepad ++, чтобы комментировать. …
  3. В notepad ++ я считаю, что ярлык CTRL + Q для комментирования кода.

Как быстро закомментировать код?

Чтобы быстро закомментировать или раскомментировать строку кода в HTML или CSS редакторе, можете использовать сочетание клавиш ctrl + / или cmd + / .

Как закомментировать несколько строк в Visual Studio Python?

В Visual Studio , используя инструменты Python для Visual Studio , блоки могут быть закомментированы Ctrl + K , Ctrl + C и раскомментированы Ctrl + K , Ctrl + U . Единственным механизмом для комментирования кода Python (понимаемого как код, игнорируемый интерпретатором) является # .

Как делать комментарии в VS Code?

Обычно чтобы добавить комментарий, нужно перейти в начало строки и дописать туда два слеша. Это медленно. Быстрее нажать в любом месте строки Ctrl + /, и строка закомментируется, если она ещё не. А если уже да, то комментарий исчезнет.

Как быстро скопировать строку?

Используйте сочетания клавиш CTRL+C для копирования и CTRL+V для вставки данных (COMMAND+C и COMMAND+V на компьютере Mac).

Как дублировать строку в VS Code?

Есть разные способы.

  1. Нажатие комбинации клавиш Ctrl+C и комбинации клавиш Ctrl+В.
  2. Нажмите Shift + alt + downarrow, чтобы дублировать линию вниз
  3. Нажмите Shift + alt + uparrow, чтобы дублировать линию вверх

Как сделать 2 окна в Visual Studio Code?

Ctrl + Shift + N откроется новое окно, в то время как Ctrl + K затем отпустите клавиши и нажмите O откроет текущую вкладку в новом окне. Затем можно использовать команду Файл > Открыть папку, чтобы иметь два экземпляра кода Visual Studio с разными папками в каждом окне.

Как открыть 2 окна в Visual Studio?

Откройте проект visual studio. Чтобы получить еще один, щелкните правой кнопкой мыши (нажмите двумя пальцами) на значке visual studio docked. Нажмите кнопку «Новое окно», и теперь у вас есть два экземпляра

Как открыть сразу 2 проекта в Visual Studio?

Просто щелкните правой кнопкой мыши значок Visual Studio и выберите «Новое окно» на контекстной панели инструментов, которая появляется в нижней части Windows 8. Запустится новый экземпляр Visual Studio, а затем вы сможете открыть свой второй проект.

Похожие публикации:

  1. Как отключить уведомления в gmail
  2. Как отменить отправку письма в gmail
  3. Как очистить консоль в python
  4. Как перевести строку в двоичный код python

Комментарии в коде (Visual Basic)

В примерах кодов часто встречается символ начала комментария ( ‘ ). Этот символ указывает компилятору Visual Basic игнорировать следующий текст или комментарий. Комментарии — это краткие заметки, внесенные в код, чтобы сделать чтение кода более легким.

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

Комментарии могут располагаться в конце той же строки, где содержится оператор, или занимать отдельную строку. Оба способа представлены в следующем коде:

' This is a comment beginning at the left edge of the screen. text1.Text = "Hi!" ' This is an inline comment. 

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

' This comment is too long to fit on a single line, so we break ' it into two lines. Some comments might need three or more lines. 

Правила комментирования

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

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

Также рекомендуется принять во внимание следующие моменты.

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

Вы можете добавить или удалить символы комментариев для блока кода, выбрав одну или несколько строк кода и выбрав кнопки Комментарий () и Раскомментировать () на панели инструментов Изменить .

Кроме того, можно добавить в код комментарии, поставив в начале текста ключевое слово REM . ‘ Однако символ и кнопкиРаскомментировать / комментарии проще в использовании и требуют меньше места и памяти.

См. также раздел

  • Основные инстинкты— документирование кода с помощью xml-комментариев
  • Практическое руководство. Создание XML-документации
  • XML-теги для комментариев
  • Соглашения о структуре программы и коде
  • Оператор REM

Совместная работа с нами на GitHub

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

The .NET documentation is open source. Provide feedback here.

Обратная связь

Отправить и просмотреть отзыв по

Главное в .NET — Написание скриптов на C#

Марк Михейлис

С выходом Visual Studio 2015 Update 1 (далее для краткости Update 1) появился новый C# REPL (read-evaluate-print-loop), доступный как новое интерактивное окно в Visual Studio 2015 или как новый интерфейс командной строки (command-line interface, CLI), названный CSI. В дополнение к существующему языку C# в командной строке Update 1 также вводит новый скриптовый язык C#, традиционно сохраняемый в CSX-файл.

Прежде чем погружаться в детали новой поддержки написания скриптов на C#, важно понимать целевые сценарии. Поддержка скриптов на C# — это средство для тестирования ваших фрагментов кода на C# и .NET, не прикладывая усилия к созданию множества проектов модульного тестирования или консольных проектов. Она предоставляет облегченный вариант для быстрого кодирования вызова LINQ-метода агрегации в командной строке, проверки .NET API для распаковки ZIP-файлов или вызова REST API для прояснения того, что он возвращает или как он работает. Вы получаете простые средства для исследования и понимания какого-либо API без издержек появления еще одного CSPROJ-файла в вашем каталоге %TEMP%.

Интерфейс командной строки C# REPL (CSI.EXE)

Как и при изучении самого C#, лучший способ начать освоение интерфейса C# (CSI) REPL — запустить его и приступить к выполнению команд. Для запуска интерфейса, введите команду csi.exe из командной строки Visual Studio 2015 или используйте полный путь C:\Program Files (x86)\MSBuild\14.0\bin\csi.exe. Отсюда начнется выполнение выражений C# по аналогии с тем, что показано на рис. 1.

Рис. 1. Пример CSI REPL

C:\Program Files (x86)\Microsoft Visual Studio 14.0>csi Microsoft(R) Visual C# Interactive Compiler version 1.1.0.51014 Copyright (C) Microsoft Corporation. All rights reserved. Type "#help" for more information. > System.Console.WriteLine("Hello! My name is Inigo Montoya"); Hello! My name is Inigo Montoya > > ConsoleColor originalConsoleColor = Console.ForegroundColor; > try < . Console.ForegroundColor = ConsoleColor.Red; . Console.WriteLine("You killed my father. Prepare to die."); . >. finally . < . Console.ForegroundColor = originalConsoleColor; . >You killed my father. Prepare to die. > IEnumerable processes = Process.GetProcesses(); > using System.Collections.Generic; > processes.Where(process => process.ProcessName.StartsWith("c") ). . Select(process => process.ProcessName ).Distinct() DistinctIterator < "chrome", "csi", "cmd", "conhost", "csrss" >> processes.First(process => process.ProcessName == "csi" ).MainModule.FileName "C:\\Program Files (x86)\\MSBuild\\14.0\\bin\\csi.exe" > $"The current directory is < Environment.CurrentDirectory >." "The current directory is C:\\Program Files (x86)\\ Microsoft Visual Studio 14.0." > 

Первым делом отмечу очевидное — он похож на C#, хоть и на новый диалект C# (но без формальностей, которые ценятся в полностью производственной программе и не обязательных в сделанном на скорую руку прототипе). Поэтому, как и следовало ожидать, если вы хотите вызвать какой-нибудь статический метод, то можете написать полное имя метода и передать аргументы внутри скобок. Как и в C#, вы объявляете переменную, предваряя ее типом и (не обязательно) присваивая ей новое значение в момент объявления. И вновь, как и следовало ожидать, нормально работает любой допустимый синтаксис тела метода — блоки try/catch/finally, объявление переменных, лямбда-выражения и LINQ.

И даже в командной строке поддерживаются другие средства C# вроде строковых конструкций (чувствительность к регистру букв, строковые литералы и интерполяция строк). Поэтому, когда вы используете или выводите пути, для каждого обратного слеша нужно ставить escape-символ C# (\), как это делается двойными обратными слешами в пути запуска csi.exe. Интерполяция строк тоже работает, что демонстрирует пример строки «текущего каталога» на рис. 1.

Однако поддержка скриптов в C# позволяет делать гораздо больше, чем просто набирать выражения в командной строке. Вы можете объявлять собственные типы, встраивать метаданные типа через атрибуты и даже упрощать вывод, используя специфичные для скриптов на C# директивы. Рассмотрим пример с проверкой правописания на рис. 2.

Рис. 2. Скриптовый C#-класс Spell (Spell.csx)

#r ".\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll" #load "Mashape.csx" // задает значение для строки Mashape.Key using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Threading.Tasks; using Newtonsoft.Json; using Newtonsoft.Json.Linq; public class Spell < [JsonProperty("original")] public string Original < get; set; >[JsonProperty("suggestion")] public string Suggestion < get; set; >[JsonProperty(PropertyName ="corrections")] private JObject InternalCorrections < get; set; >public IEnumerable Corrections < get < if (!IsCorrect) < return InternalCorrections?[Original].Select( x =>x.ToString()) ?? Enumerable.Empty(); > else return Enumerable.Empty(); > > public bool IsCorrect < get < return Original == Suggestion; >> static public bool Check(string word, out IEnumerable corrections) < Task taskCorrections = CheckAsync(word); corrections = taskCorrections.Result.Corrections; return taskCorrections.Result.IsCorrect; > static public async Task CheckAsync(string word) < HttpWebRequest request = (HttpWebRequest)WebRequest.Create( $"https://montanaflynn-spellcheck.p.mashape.com/ check/?text=< word >"); request.Method = "POST"; request.ContentType = "application/json"; request.Headers = new WebHeaderCollection(); // Mashape.Key – строковый ключ, доступный // Mashape для montaflynn API request.Headers.Add("X-Mashape-Key", Mashape.Key); using (HttpWebResponse response = await request.GetResponseAsync() as HttpWebResponse) < if (response.StatusCode != HttpStatusCode.OK) throw new Exception(String.Format( "Server error (HTTP : ).", response.StatusCode, response.StatusDescription)); using(Stream stream = response.GetResponseStream()) using(StreamReader streamReader = new StreamReader(stream)) < string strsb = await streamReader.ReadToEndAsync(); Spell spell = Newtonsoft.Json.JsonConvert. DeserializeObject(strsb); // Предполагаем, что проверка правописания // была затребована только в первом слове return spell; > > > > 

По большей части это просто стандартное объявление C#-класса. Однако здесь есть несколько специфичных для скриптов на C# средств. Во-первых, директива #r служит для ссылки на внешнюю сборку. В данном случае это ссылка на Newtonsoft.Json.dll, которая помогает разбирать JSON-данные. Но заметьте, что эта директива предназначена для ссылок на файлы в файловой системе. Как таковая, она не требует лишних формальностей с escape-символами для обратных слешей.

Во-вторых, вы можете взять весь этот листинг и сохранить его как CSX-файл, а затем «импортировать» или «подставить» (inline) файл в окно C# REPL, используя #load Spell.csx. Директива #load позволяет включать дополнительные файлы скриптов так, будто все #load-файлы были включены в один и тот же «проект» или «компиляцию». Размещение кода в отдельном файле C#-скрипта обеспечивает своего рода рефакторинг файла и, что важнее, возможность хранить C#-скрипт.

Использование объявлений — еще одно языковое средство C#, включенное в скрипты C#; оно несколько раз используется в коде на рис. 2. Заметьте, что, как и в C#, область объявления using ограничена файлом. Поэтому, если вы вызвали #load Spell.csx из окна REPL, объявление using Newtonsoft.Json не сохранится за пределами Spell.csx. Иначе говоря, использование Newtonsoft.Json из Spell.csx не сохранилось бы в окне REPL без его повторного явного объявления в окне REPL (и наоборот). Также заметьте, что поддерживается и объявления using static из C# 6.0. Благодаря этому объявление using static System.Console исключает необходимость предварять любой из членов System.Console типом, разрешая выполнение таких REPL-команд, как WriteLine(«Hello! My name is Inigo Montoya»).

Другие конструкции, заслуживающие внимания в скриптах на C#, включают атрибуты, выражения using, объявление свойства и функции и поддержку async/await. Учитывая поддержку последнего функционала, await можно использовать даже в окне REPL:

(await Spell.CheckAsync("entrepreneur")).IsCorrect 

Ниже дан ряд дополнительных замечаний по интерфейсу C# REPL.

  • Запустить csi.exe из Windows PowerShell Integrated Scripting Environment (ISE) нельзя, так как эта программа требует прямого консольного ввода, что не поддерживается имитируемыми консольными окнами Windows PowerShell ISE. (По этой причине подумайте о ее добавлении в список неподдерживаемых консольных приложений $psUnsupportedConsoleApplications.)
  • Команды exit или quit для выхода из CSI-программы нет. Вместо этого используйте Ctrl+C для завершения программы.
  • Журнал команд (command history) сохраняется между сеансами работы с csi.exe, запускаемыми из одного и того же сеанса cmd.exe или PowerShell.exe. Например, если вы запускаете csi.exe, вызываете Console.WriteLine(«HelloWorld»), используете Ctrl+C для выхода, а затем снова запускаете csi.exe, нажатие стрелки вверх покажет предыдущую команду: Console.WriteLine(«HelloWorld»). Выход из окна cmd.exe с последующим перезапуском очистит журнал команд.
  • Csi.exe поддерживает REPL-команду #help, которая дает вывод, показанный на рис. 3.
  • Csi.exe поддерживает ряд параметров в командной строке, как представлено на рис. 4.

Рис. 3. Вывод REPL-команды #help

> #help Keyboard shortcuts: Enter If the current submission appears to be complete, evaluate it. Otherwise, insert a new line. Escape Clear the current submission. UpArrow Replace the current submission with a previous submission. DownArrow Replace the current submission with a subsequent submission (after having previously navigated backward). REPL commands: #help Display help on available commands and key bindings. 

Рис. 4. Параметры командной строки csi.exe

Для верстки: в этом листинге не обойтись без наезда на соседнюю колонку, иначе будет сильное искажение вывода

Microsoft (R) Visual C# Interactive Compiler version 1.1.0.51014 Copyright (C) Microsoft Corporation. All rights reserved. Usage: csi [option] . [script-file.csx] [script-argument] . Executes script-file.csx if specified, otherwise launches an interactive REPL (Read Eval Print Loop). Options: /help Display this usage message (alternative form: /?) /i Drop to REPL after executing the specified script /r: Reference metadata from the specified assembly file (alternative form: /reference) /r: Reference metadata from the specified assembly files (alternative form: /reference) /lib: List of directories where to look for libraries specified by #r directive (alternative forms: /libPath /libPaths) /u: Define global namespace using (alternative forms: /using, /usings, /import, /imports) @ Read response file for more options -- Indicates that the remaining arguments should not be treated as options 

Как отмечалось, csi.exe позволяет указывать файл «профиля» по умолчанию, который настраивает ваше окно команд.

  • Чтобы очистить консоль CSI, вызовите Console.Clear. (Подумайте насчет директивы using static System.Console для добавления поддержки вызова просто Clear.)
  • Если вы вводите команду, занимающую несколько строк, и обнаруживаете ошибку на одной из предыдущих строк, то можете использовать Ctrl+Z с последующим нажатием Enter для отмены и возврата к пустой строке приглашения без выполнения (заметьте, что в консоли появится ^Z).

Окно C# Interactive в Visual Studio

Как упоминалось, в Update 1 появилось и новое окно C# Interactive (рис. 5). Это окно запускается через View | Other Windows | C# Interactive и открывается как дополнительное стыкуемое окно. Как и окно csi.exe, это окно C# REPL, но с несколькими дополнительными средствами. Прежде всего оно включает цветовое выделение синтаксиса кода и поддержку IntelliSense. Аналогично компиляция выполняется в реальном времени по мере того, как вы редактируете код, поэтому синтаксические ошибки и другие огрехи автоматически подчеркиваются волнистой красной линией.

Объявление скриптовой функции C# вне класса, использующего окно C# Interactive в Visual Studio

Рис. 5. Объявление скриптовой функции C# вне класса, использующего окно C# Interactive в Visual Studio

Окно C# Interactive, конечно, сразу же ассоциируется с окнами Immediate и Command в Visual Studio. Хотя они перекрываются по своей функциональности (в конце концов, это REPL-окна, в которых вы выполняете .NET-выражения), они имеют существенно разное предназначение. Окно C# Immediate прямо связано с отладочным контекстом вашего приложения, тем самым позволяя вводить дополнительные выражения в контекст, изучать данные в сеансе отладки и даже манипулировать/обновлять данные и отладочный контекст. Аналогично окно Command предоставляет CLI для манипуляций над Visual Studio, включая выполнение различных меню, но не из самих меню, а из окна Command. (Например, выполнение команды View.C#Interactive открывает окно C# Interactive.) В противоположность этому окно C# Interactive позволяет выполнять C#, включая все средства, относящиеся к интерфейсу C# REPL, рассмотренному в предыдущем разделе. Однако окно C# Interactive не имеет доступа к отладочному контексту. Это полностью зависимый сеанс C# без описателей (handles) отладочного контекста или даже Visual Studio. Подобно csi.exe это среда, которая позволяет экспериментировать с фрагментами кода на C# и .NET для проверки вашего понимания без запуска еще одного консольного проекта или проекта модульного тестирования Visual Studio. Но вместо запуска в отдельной программе окно C# Interactive размещается в Visual Studio, где предположительно уже находится разработчик.

Ниже приведено несколько замечаний по окну C# Interactive.

  • Оно поддерживает ряд дополнительных REPL-команд, отсутствующих в csi.exe, в том числе:
    • #cls/#clear для очистки содержимого окна редактора;
    • #reset для восстановления среды выполнения до ее начального состояния с сохранением журнала команд.

    Табл. 1. Комбинации клавиш, действующие в окне C# Interactive

    Enter Если текущее выражение полное, оно оценивается. В ином случае вставляется новая строка
    Ctrl+Enter Оценивается текущее выражение
    Shift+Enter Вставка новой строки
    Esc Очистка текущего выражения
    Alt+стрелка вверх Замена текущего выражения предыдущим
    Alt+стрелка вниз Замена текущего выражения последующим (если ранее был переход назад)
    Ctrl+Alt+стрелка вверх Замена текущего выражения предыдущим, начинающимся с того же текста
    Ctrl+Alt+стрелка вниз Замена текущего выражения последующим, начинающимся с того же текста (если ранее был переход назад)
    Стрелка вверх В конце текущего выражения его замена предыдущим. В ином случае перемещение курсора на строку вверх
    Стрелка вниз В конце текущего выражения его замена последующим (если ранее был переход назад). В ином случае перемещение курсора на строку вниз
    Ctrl+K, Ctrl+Enter Вставка выделенного блока в конец интерактивного буфера; «каретка» остается в в конце ввода
    Ctrl+E, Ctrl+Enter Вставка и выполнение выделенного блока до любого незавершенного ввода в интерактивном буфере
    Ctrl+A При первом нажатии выделяет выражение, в котором находится курсор. При втором нажатии выделяет весь текст в окне

    Важно отметить, что Alt+стрелка вверх/вниз — это комбинации клавиш для вызова журнала команд. Microsoft выбрала эти комбинации вместо более простых «стрелка вверх/вниз», поскольку хотела, чтобы окно Interactive работало так же, как и стандартное окно кода в Visual Studio.

    • Поскольку окно C# Interactive размещается в Visual Studio, в нет тех же возможностей передачи ссылок, использования директив или импорта через командную строку, как в случае csi.exe. Вместо этого окно C# Interactive загружает свой контекст выполнения по умолчанию из C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\PrivateAssemblies\CSharpInteractive.rsp, который идентифицирует сборки для ссылок по умолчанию:
    # Этот файл содержит параметры командной строки, которые # C# REPL будет обрабатывать как часть каждой компиляции, # если только в команде reset не задан параметр /noconfig /r:System /r:System.Core /r:Microsoft.CSharp /r:System.Data /r:System.Data.DataSetExtensions /r:System.Xml /r:System.Xml.Linq SeedUsings.csx 

    Более того, файл CSharpInteractive.rsp ссылается на файл C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\PrivateAssemblies\SeedUsings.csx по умолчанию:

    using System; using System.Collections.Generic; using System.Linq; using System.Text; 

    Комбинация этих двух файлов является причиной того, что вы используете Console.WriteLine и Environment.CurrentDirectory вместо полных System.Console.WriteLine и System.Environment.CurrentDirectory соответственно. Кроме того, ссылки на сборки, такие как Microsoft.CSharp, позволяют использовать языковые средства вроде dynamic безо всяких дополнительных усилий. (Модификация этих файлов дает возможность изменять ваш «профиль» или «предпочтения» так, чтобы эти изменения сохранялись между сеансами.)

    Подробнее о синтаксисе скриптов на C#

    Один из моментов, которые следует учитывать в отношении синтаксиса C#-скриптов, заключается в том, что большая часть формальностей, важных в стандартном C#, становится соответственно не обязательной в C#-скрипте. Например, такие вещи, как тела методов не обязаны находиться в какой-либо функции, а функции C#-скрипта можно объявлять вне границ какого-либо класса. Скажем, вы могли бы определить NuGet-функцию Install, которая появляется непосредственно в REPL-окне, как показано на рис. 5. Кроме того, возможно, несколько неожиданно, C#-скрипты не поддерживают объявления пространств имен. Например, вы не можете обернуть класс Spell в пространство имен Grammar: namespace Grammar < class Spell <>>.

    Важно отметить, что вы можете объявлять одну и ту же конструкцию (переменную, класс, функцию и т. д.) снова и снова. Последнее объявление следует любому более раннему объявлению.

    Другой важный момент, о котором нужно знать, — поведение точки с запятой, завершающей команду. Операторы (например, присваивания переменных) требуют точки с запятой. Без нее REPL-окно будет по-прежнему предлагать дальнейший ввод (через точку), пока не будет введена точка с запятой. С другой стороны, выражения будут выполняться без точки с запятой. Следовательно, System.Diagnostics.Process.Start(«notepad») запустит Notepad даже без концевой точки с запятой. Более того, поскольку вызов метода Start возвращает процесс, в командной строке появится строковый вывод выражения: [System.Diagnostics.Process (Notepad)]. Но закрытие выражения точкой с запятой скроет этот вывод. Поэтому вызов Start с концевой точкой с запятой не даст никакого вывода, хотя Notepad все равно будет запущен. Конечно, Console.WriteLine(«It would take a miracle.»); будет по-прежнему выводить текст, даже без точки с запятой, поскольку вывод отображает сам метод.

    Выражения (expressions) и операторы (statements) иногда имеют тонкие отличия. Например, оператор string text = «There’s a shortage of perfect b….»; не даст никакого вывода, а text=»Stop that rhyming and I mean it» вернет присвоенную строку (поскольку присваивание возвращает присвоенное значение и в конце нет точки с запятой, которая подавила бы вывод).

    Директивы в C#-скриптах для ссылок на дополнительные сборки (#r) и импорт существующих C#-скриптов (#load) — великолепные новшества. К сожалению, на момент написания этой статьи NuGet-пакеты не поддерживались. Для ссылки на файл из NuGet требуется установить этот пакет в каталог, а затем сослаться на конкретную DLL через директиву #r. (В Microsoft меня уверили, что вскоре необходимая поддержка появится.)

    Заметьте, что на этот раз директивы ссылаются на конкретные файлы. Указать в директиве, например, какую-то переменную нельзя. Хотя этого и следовало ожидать, это исключает возможность динамической загрузки сборки. Скажем, вы могли бы динамически запускать nuget.exe install для извлечения сборки (вновь см. рис. 5). Однако тогда ваш CSX-файл было бы нельзя динамически связать с извлеченным NuGet-пакетом, так как нет никакого способа динамически передавать путь сборки в директиву #r.

    C# CLI

    Должен признаться, что у меня двоякое отношение к Windows PowerShell. Мне нравится удобство работы с Microsoft .NET Framework в командной строке и возможность передачи .NET-объектов по конвейеру, а не традиционного текста, как это делается во многих других CLI. Когда дело доходит до языка C#, я становлюсь пристрастен: обожаю его элегантность и мощь. (До сих пор я остаюсь под впечатлением от языковых расширений, которые сделали возможной работу с LINQ.) Поэтому идея сочетания свободы действий в Windows PowerShell .NET с элегантностью языка C# наводила на мысль, что C# REPL может быть заменой Windows PowerShell. После запуска csi.exe я сразу же опробовал команды вроде cd, dir, ls, pwd, cls, alias и им подобные. Достаточно сказать, что я был разочарован, так как ни одна из них не работала. После раздумий и обсуждения с группой C# я осознал, что замена Windows PowerShell не была в числе задач, на которых группа сосредоточилась в версии 1. Более того, это .NET Framework, а значит, она поддерживает расширяемость добавлением ваших собственных функций для предыдущих команд и даже обновлением реализации C#-скрипта в Roslyn. Я немедленно приступил к определению функций для таких команд. Получившаяся в итоге библиотека в своем начальном виде доступна для скачивания на GitHub по ссылке github.com/CSScriptEx.

    Для тех, кто ищет более функциональный C# CLI, который изначально поддерживает предыдущий список команд, присмотритесь к ScriptCS на scriptcs.net (или на GitHub по ссылке github.com/scriptcs). Он тоже использует Roslyn и включает поддержку псевдонимов, команд cd, clear, cwd, exit, help, install, reset, ссылок, пакетов скриптов, выражений using и var. Заметьте, что в случае ScriptCS префиксом команд сегодня является двоеточие (как в :reset), а не символ # (как в #reset). В качестве бонуса ScriptCS также добавляет поддержку CSX-файлов с цветовым выделением и IntelliSense в Visual Studio Code.

    Заключение

    По крайней мере пока целью интерфейса C# REPL не является замена Windows PowerShell или даже cmd.exe. Ожидание этого приведет к разочарованию. Вместо этого я предлагаю относиться к C#-скриптам и различным REPL CLI как к облегченным заменам Visual Studio | New Project: UnitTestProject105 или к аналогам на dotnetfiddle.net. Это способы, ориентированные на C# и .NET, должны углубить ваше понимание языка и .NET API. C# REPL предоставляет средства для кодирования коротких фрагментов или блоков программы, с которыми вы можете поэкспериментировать, пока они не будут готовы для вставки в более серьезные программы. Это позволяет вам писать более содержательные скрипты, чей синтаксис проверяется «на лету» в процессе написания кода (вылавливаются даже такие мелкие ошибки, как неправильный регистр букв), и вас не вынуждают запускать скрипт только для того, чтобы обнаружить, что вы где-то опечатались. Как только вы это поймете, поддержка скриптов на C# и ее интерактивные окна станут приятным инструментом, который вы искали с момента появления первой версии языка.

    Как бы ни были интересны C# REPL и поддержка скриптов на C# сами по себе, считайте, что они также являются плацдармом инфраструктуры расширения для ваших приложений — а-ля Visual Basic for Applications (VBA). Благодаря интерактивному окну и поддержке скриптов на C# вы можете вообразить мир (не столь уж и несбыточный), в котором вновь можно добавлять в приложения «макросы», но уже относящиеся к .NET, — без изобретения собственного языка, средства синтаксического анализа и редактора.

    Марк Михейлис (Mark Michaelis) — учредитель IntelliTect, где является главным техническим архитектором и тренером. Почти два десятилетия был Microsoft MVP и региональным директором Microsoft с 2007 года. Работал в нескольких группах рецензирования проектов программного обеспечения Microsoft, в том числе C#, Microsoft Azure, SharePoint и Visual Studio ALM. Выступает на конференциях разработчиков, автор множества книг, последняя из которых — «Essential C# 6.0 (5th Edition)» (itl.tc/EssentialCSharp). С ним можно связаться в Facebook (facebook.com/Mark.Michaelis), через его блог (IntelliTect.com/Mark), в Twitter (@markmichaelis) или по электронной почте mark@IntelliTect.com.

    Выражаю благодарность за рецензирование статьи экспертам Microsoft Кевину Босту (Kevin Bost) и Кейси Олинхуту (Kasey Uhlenhuth).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *