Подтвердить что ты не робот

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

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

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

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

Является ли это неотъемлемой проблемой в Windows? Где-то где-то? Существуют ли другие консоли, у которых нет этой проблемы?

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

4b9b3361

Ответ 1

Два способа, я думаю.

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

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

Ответ 2

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

Ответ 3

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

PS > $MaximumHistoryCount

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

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

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

Ответ 7

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

Ответ 8

Если "внезапно" вся история исчезла, возможно, начнется новая 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-оболочка. Поэтому "выход" может помочь в этом случае!