Почему консоли Windows теряют историю командной строки (стрелка вверх) через некоторое время? - PullRequest
23 голосов
/ 07 августа 2009

Это кажется случайным: после некоторого времени / использования любой консоли, которую я использую в Windows Vista, я теряю возможность использовать историю командной строки (или буфер команд, если вы предпочитаете ...), и нажимаете Стрелка вверх или вниз больше ничего не делает, т. е. в истории доступно в основном 0 предметов.

Я видел такое поведение в Cygwin, CMD и PowerShell.

Иногда такое поведение применяется к процессам, запущенным внутри консоли - Python, клиент MySQL и т. Д.

Это внутренняя проблема в Windows? Установка где-то? Есть ли другие консоли, у которых нет этой проблемы?

ps - если вы считаете, что это не связано с программированием, см. Другие вопросы, касающиеся инструментов программирования, например, почти что-либо с тегом «затмение», которое касается того, как использовать IDE вместо программирования для нее.

Ответы [ 8 ]

17 голосов
/ 07 июня 2012

Думаю, два пути.

1) Far Manager - хороший выбор для оболочки. Даже если вам не нужна вся эта мощь (управление файлами / архивами, редактор, огромное количество плагинов, макросы), вы можете использовать его в качестве оболочки / исполнителя для cmd, tcc, sh или любой другой программы, оболочки или командного процессора. .

Например

  • взять 3 файла с дистрибутива (Far2 или Far3): far.exe, fareng.lng и (необязательно) fareng.hlp
  • запустите "far.exe / w", нажмите Ctrl + B Ctrl + O
  • введите в командной строке любую команду: dir, set, notepad, putty и т. Д. ...

История будет сохраняться между сессиями, вы можете получить к ней доступ с помощью Alt + F8 (нажмите Ctrl + Alt + F , чтобы переключить историю в режим фильтра).

Far 2.0 хранит историю (и настройки) в реестре.

Far 3.0 хранит историю в базе данных SQLite и может быть переносимым.

Кроме того, Far может автоматически завершать команды из истории или файлов / путей с диска. И есть плагин (YAC), который может автоматически заполнять псевдонимы и так далее ...

2) Я нашел недавно интересный проект: Clink - Перенос мощного командного редактора Bash в Microsoft Windows 'cmd.exe

  • Мощное Bash-подобное редактирование строк из библиотеки Readline GNU. Подробнее о сочетаниях клавиш Readline.
  • Превосходное завершение пути ( TAB ).
  • Вставить из буфера обмена ( Ctrl-V ).
  • Поддержка завершения исполняемых файлов / команд и переменных среды.
  • Отменить / Повторить ( Ctrl -_ или Ctrl-X , Ctrl-U )
  • Улучшена история командной строки.
    • Сохраняется в сеансах.
    • Доступно для поиска ( Ctrl-R и Ctrl-S ).
    • Расширение истории (например, !!,! И! $).
  • Завершение сценариев с использованием Lua.

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

5 голосов
/ 07 августа 2009

Максимальный размер буфера истории в «окне DOS» окна - верхний левый значок, щелкните правой кнопкой мыши, выберите свойства, и вы увидите, что в истории команд по умолчанию размер буфера равен 50.

4 голосов
/ 23 июля 2013

Проверьте вашу клавишу Scroll Lock . DOH! Я случайно ударил себя так, что стрелки вверх и вниз просто прокрутили окно.

4 голосов
/ 07 августа 2009

В PowerShell вы можете контролировать максимальный размер истории с помощью автоматической переменной MaximumHistoryCount (по умолчанию 64)

PS> $ MaximumHistoryCount

3 голосов
/ 18 марта 2014

Я сталкивался с этой проблемой в течение многих лет. В основном с python используется из командной строки в оболочке bash. После некоторых экспериментов сегодня, когда это повторилось в 1000-й раз (более или менее), я смог исправить проблему, установив для параметра «История команд» для оболочки размер буфера 999 и Число буферов 999 (я выбрал самый большой возможная настройка для каждого, возможно, любая настройка работала бы иначе, чем я был ранее (50/50). Для доступа к истории команд щелкните правой кнопкой мыши в верхнем левом углу окна оболочки, выберите «Свойства», затем вкладку «Параметры». Я не уверен, что эти настройки влияют на производительность оболочки, но пока что ничто иное не влияет, и история командной строки снова работает для меня в той же оболочке, в которой он ранее не работал. Я понимаю, что этот ответ похож на ответ Стива Гилхэма, но, возможно, дает немного больше информации.

По общему признанию, мой ответ включает 1 эксперимент, который работал.

1 голос
/ 19 июля 2012

Вся история в консоли предоставляется Doskey . Он также всегда доступен для всех символьных интерактивных программ (таких как отладчики программ или программы передачи файлов) и поддерживает буфер истории команд и макросы для каждой запускаемой программы.

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

Я предлагаю всем, у кого возникла эта проблема, попробовать опции команды Doskey и посмотреть, сможет ли он исправить ее.

0 голосов
/ 02 мая 2016

Если "внезапно" вся история ушла, может быть, запускается новая cmd-оболочка? Тест:

C:\Users\Guest\>doskey /history
 …long history…
C:\Users\Guest\>cmd
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.
C:\Users\Guest\>doskey /history
 …no history…
C:\Users\Guest\>exit
C:\Users\Guest\>doskey /history
 …old long history…

Конечно, в этом примере вы увидите новый cmd-Start, но если вы попробуете это:

doskey /history
  …history list…
cmd echo /k
doskey /history
  …no list !

Вы не видите

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

Но новая CMD-Shell была запущена. Так что «выход» может помочь в этом случае!

0 голосов
/ 22 декабря 2013

Я никогда не сталкивался с этим, но мне интересно, может ли быть вызвано нажатие комбинации клавиш ALT+F7, которая очищает историю команд согласно DOSKEY /?.

...