Одна из вещей, которая сводит меня с ума в командной строке под MS-Windows - это порядок, в котором оболочка Windows (как стандартная, так и PowerShell) извлекает команды из истории при использовании клавиш со стрелками вверх и вниз.
Стандартный способ, который мне понравился, как это делается практически во всех других оболочках мира, заключается в том, что последняя команда помещается в стек истории, а затем нажатие вверх возвращает последнюю команду, которую я выполнил, «вверх». снова получит тот, что был до этого, и так далее. Если вы выбираете команду из истории и отправляете ее снова, команда копируется в верхнюю часть стека, и если вы нажимаете вверх в следующем приглашении, вы можете увидеть эту последнюю команду, а затем команду, предшествующую последней. Если после просмотра истории вы нажмете «вниз» после самой последней команды в стеке истории, вы вернетесь к пустому приглашению (или к тому, что у вас было до того, как вы начали просматривать историю).
В оболочке Windows это работает странно иначе: если у вас есть 3 команды в истории - например, давайте назовем их «A», «B» и «C» - и вы используете клавишу со стрелкой вверх, чтобы выбрать команду «B» и выполнить снова, а затем снова используйте клавишу со стрелкой вверх в следующем приглашении, оболочка отобразит «B». Но это не последняя команда, которую вы выполнили (хотя «B» действительно была снова скопирована в стек истории), так как если вы снова нажмете «вверх», вам будет показано «A», а не «C». Если вы перейдете вниз (к более поздним записям), вы снова увидите «B», затем «C», затем снова «B», что было последней введенной командой - но вы также не можете идти дальше: пути назад нет в пустое приглашение, кроме удаления всего, что у вас есть в строке или нажатия CTRL-C.
Мой вопрос - есть ли настройки, которые можно установить, чтобы изменить это поведение?
Я знаю о возможности просто получить bash или что-то в этом роде и использовать его в Windows, но из-за внешних ограничений (например, для этого мне нужно написать свои скрипты), я должен работать в PowerShell или другой Windows оболочка, которая может вызывать скрипты PowerShell.
Ответы:
Существует другой способ управления стеком истории, это не то, что вы хотели, но это другой вариант, который вы должны проверить.
В Свойствах (или По умолчанию), когда вы щелкаете правой кнопкой мыши в верхнем левом углу, есть опция «Отменить старые дубликаты», отметьте ее, и стек изменит свое поведение.
в вашем примере выполнения
"A", "B", "C"
, а затем дважды, чтобы выполнить"B"
, стек будет выглядеть:"B","C","A" (first up will be "B")
источник
Также не забывайте
F7
, Это всплываетDOS
-стиль меню, показывающий историю команд (ESC, чтобы она исчезла). «Последняя» команда, введенная или выбранная с помощью стрелки вверх, будет показана, поэтому вы сразу увидите, где находитесь в контексте стрелки вверх / вниз.Видимо это от того, что называется DOSKEY , плохо документированная утилита. Например, помимо «вверх», «вниз» и затем ввода для выполнения команды, я обнаружил, что клавиша со стрелкой вправо или влево поместит ее в подсказку без выполнения (так что вы можете редактировать ее). PgUp / PgDn / Home / End будет перемещаться по списку очевидным способом, и я только что обнаружил (нигде не видел его документированного), что если вы нажмете первую букву команды, она будет переключаться между командами, начинающимися с этой буквы ( поэтому введите команду, как
ze fun start now!
легко перейти к этому моменту истории, нажавz
вF7
).Возможно, хотя, если предвидеть оживление большей части истории, может лучше
чем перенести стропы и стрелки и скопировать / вставить из указанной записи (или пусть твои миньоны превращают это в сценарий).
Есть пара других хитрости командной строки в статье Джоэла Спольски, вероятно, не широко известны. Я не знал о расширении по шаблону, поэтому вы можете использовать завершение табуляции, набирая последние символы имени или середину.
Я нахожу окно странным, странным, но считаю его тупиком и изучаю такие мелочи только тогда, когда кажется, что это уменьшит мое взаимодействие с ним. Если бы у меня была возможность, я считаю, что лучше установить Cygwin, чтобы получить более выразительную оболочку и менее раздражающую среду, а также навыки и сценарии, которые вы сможете использовать в других местах.
источник
doskey
Команда не работает для меня, вероятно, потому что я использую PowerShell, а не cmd.exe (см. OP). 3. Ссылка, которую вы предоставили, предназначена не для Джоэла Спольски, а для его соучастника Джеффа Этвуда. Все еще удивительный чувак, и информация полезна, даже если она относится только к cmd.exe - так что еще раз спасибо. 4. Наконец, в отношении cygwin, см. Последний параграф OP. \ n \ n Похоже, у меня нет другой альтернативы, кроме как катить собственную консоль.