7

Одна из вещей, которая сводит меня с ума в командной строке под MS-Windows, - это порядок, в котором оболочка Windows (как стандартная, так и PowerShell) извлекает команды из истории при использовании клавиш со стрелками вверх и вниз.

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

В оболочке Windows это работает странно иначе: если у вас есть 3 команды в истории - например, давайте назовем их "A", "B" и "C" - и вы используете клавишу со стрелкой вверх, чтобы выбрать команду "B" и выполнить снова, а затем снова используйте клавишу со стрелкой вверх в следующем приглашении, оболочка отобразит "B". Но это не последняя команда, которую вы выполнили (хотя "B" действительно была снова скопирована в стек истории), так как если вы снова нажмете "вверх", вам будет показано "A", а не "C". Если вы перейдете вниз (к более поздним записям), вы снова увидите "B", затем "C", затем снова "B", что было последней введенной командой - но вы также не можете идти дальше: пути назад нет в пустое приглашение, кроме удаления того, что у вас есть в строке или нажатия клавиши CTRL-C.

Мой вопрос - есть ли настройки, которые можно установить, чтобы изменить это поведение?

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

2 ответа2

5

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

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

в вашем примере выполняя "A", "B", "C" . а затем дважды до выполнения "B" , стек будет выглядеть:"B","C","A" (first up will be "B")

3

Также не забывайте F7 . Это вызывает меню стиля DOS показывающее историю команд (ESC, чтобы убрать ее). «Последняя» команда, введенная или выбранная с помощью стрелки вверх, будет показана, поэтому вы сразу увидите, где находитесь в контексте стрелки вверх / вниз.

По-видимому, это что-то под названием DOSKEY, плохо документированная утилита. Например, помимо «вверх», «вниз», а затем ввода для выполнения команды, я обнаружил, что клавиша со стрелкой вправо или влево поместит ее в запрос без выполнения (так что вы можете редактировать ее). PgUp/PgDn/Home/End будет перемещаться по списку очевидным образом, и я только что обнаружил (нигде не видел его документированного), что если вы нажмете первую букву команды, она будет циклически проходить через команды, начинающиеся с этой буквы ( так что введите команду, как ze fun start now! легко перейти к этому моменту истории, нажав z в F7).

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

doskey /history > editme.bat

чем перенести стропы и стрелы, и скопировать / вставить из указанной записи (или пусть твои миньоны превратили ее в сценарий).

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .