Visual Studio: исключите выделение из отмены/стека повторного выполнения

Это эквивалентно пути сценария:

%~dp0

Это использует пакетный синтаксис расширения параметра. Параметр 0 всегда является самим сценарием.

, Если Ваш сценарий хранится в C:\example\script.bat, то %~dp0 оценивает к C:\example\.

ss64.com имеет больше информации о синтаксисе расширения параметра. Вот соответствующая выборка:

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

[...]

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

[...]

% ~d1 Расширяются %1 до Буквы диска только - C:

[...]

% ~p1 Расширяется %1 до Пути только, например, \utils\, это включает запаздывание \, который может быть интерпретирован как символ ESC некоторыми командами.

[...]

модификаторы выше могут быть объединены:

% ~dp1 Разворачивает %1 до буквы диска и соединяет [только 1 119] каналом

[...]

, можно получить путь самого сценария пакетной обработки с %0, расширения параметра могут быть применены к этому так, % ~dp0 возвратит Диск и Путь к сценарию пакетной обработки, например, W:\scripts\

23
задан Thomas Levesque 20 December 2013 в 00:33
поделиться

3 ответа

С момента появления ES6 вы можете использовать синтаксис распространения в вызове функции:

 const args = [1,2,3]; fn (... аргументы); функция fn () {console.log (аргументы); } 

До ES6 вам нужно было использовать apply .

 var args = [1,2,3]; fn.apply (нуль, аргументы); функция fn () {console.log (аргументы); } 

Оба будут производить эквивалентный вызов функции:

fn(1,2,3);

Обратите внимание, что я использовал null в качестве первого аргумента примера apply , который установит this к глобальному объекту ( окно ) внутри fn или undefined в строгом режиме.

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

В ES6, если вы хотите получить доступ к переменному количеству аргументов в виде массива, вы также можете использовать синтаксис rest в списке параметров функции:

 ] function fn (... args) {args.forEach (arg => console.log (arg))} fn (1,2,3) 

До ES6, если вы хотели создать массив из вашего arguments , вы обычно использовали метод Array.prototype.slice .

 function fn () {var args = Array.prototype.slice.call (arguments); console.log (аргументы); } fn (1,2,3); 

Edit: В ответ на ваш комментарий, да, вы можете использовать метод shift и установить его возвращаемое значение в качестве контекста (ключевое слово this ) в вашей функции:

fn.apply(args.shift(), args);

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

Если вам по-прежнему нужно вызвать вашу функцию со всеми другими аргументами, вы можете:

fn.apply(args[0], args);

И если вы не хотите изменив контекст, вы можете извлечь первый аргумент внутри своей функции:

 function fn (firstArg, ... args) {console.log (args, firstArg); } fn (1, 2, 3, 4) 

В ES5 это было бы немного более подробно.

 function fn () {var args = Array.prototype.slice.call (arguments), firstArg = args .сдвиг(); console.log (аргументы, firstArg); } fn (1, 2, 3, 4);                  
1
ответ дан 29 November 2019 в 03:06
поделиться

Я не верю, что есть способ отключить это поведение.

В качестве альтернативы значки на панели инструментов «Отменить» и «Повторить» имеют раскрывающиеся списки истории, которые позволяют визуально увидеть сводку последних изменений, которые вы собирались отменить или повторить. Иногда это может помочь убедиться, что вы отменяете (или повторяете) то, что ожидаете.

Поскольку этого не всегда достаточно, чтобы точно знать, что это за изменения (история отмены отображает только сводку), решение I иногда для решения этой проблемы используется сочетание отмены (ctrl-z), повтора (ctrl-y) и повторной отмены. Первая отмена перемещается туда, где произошло изменение (и отменяет это изменение). Повтор отменяет отмену (которая по сути повторяет последнее сделанное изменение). И последняя отмена выполнит отмену снова, при этом окно будет прокручено до места, где я действительно могу видеть происходящую отмену и могу подтвердить, было ли это изменение, которое я ожидал отменить. Это не очень эффективно, но может быть очень эффективным, чтобы гарантировать, что код находится в ожидаемом состоянии.

2
ответ дан 29 November 2019 в 03:06
поделиться

Во-первых, кажется, что не все операции обрисовки записываются в стеке отмены / повтора.

  • Переключить расширение структуры (CTRL + M / CTRL + M) записано в стеке
  • Toggle All Outlining (CTRL + M / CTRL + L) записывается в стек
  • Свернуть до определений (CTRL + M / CTRL + O) НЕ записывается в стеке

Итак, насколько мне известно, невозможно избежать записи операций Toggle в стеке отмены / повтора в Visual Studio 2008.

Единственный вариант, который у вас есть, - включить / отключить выделение для каждого типа источника. Для C # выделение можно включить / отключить в Инструменты> Параметры> Текстовый редактор> C #> Дополнительно с помощью флажка «Переходить в режим выделения при открытии файлов» .

2
ответ дан 29 November 2019 в 03:06
поделиться