Я использую emacs почти для всего, но когда я запускаю shell, M-x shell
а затем выхожу из emacs, история не сохраняется, я пытался (savehist-mode 1)
с этой целью, но, похоже, это не работает, есть ли способ сохранить историю Команды, используемые в Emacs и использовать их, когда я использую оболочку вне Emacs?
shell
emacs
ubuntu-12.04
poz2k4444
источник
источник
~/.bash_history
же, как и приbash
запуске в более обычном эмуляторе терминала; Я не уверен, почему вы бы видели другое поведение. Какую оболочку вы используете, и как она настроена с учетом истории?M-x shell
и когда я убиваю буфер, он не сохраняет историю, единственная попытка, которую я сделал, была поместить(savehist-mode 1)
в.emacs
файл, но все же я не могу смотрите команды, используемые в emacssavehist-mode
применяется по умолчанию только к вводу минибуфера и, следовательно, здесь не применимо (хотя в целом это может оказаться полезным). Скорее всего, ваша оболочка входа в систему естьbash
, и я часто обнаруживал, что по умолчаниюbash
не будет сохранять историю, пока процесс не завершится корректно, то есть при выходе из системы - что не произойдет, если вы уничтожите буфер оболочки с помощьюC-x k
или подобным образом; когда это происходит, процесс оболочки уничтожается, а не завершается самостоятельно. Если это то, что вы делаете прямо сейчас, попробуйте сделать этоlogout
илиexit
в своем буфере оболочки, прежде чем уничтожать буфер, и посмотрите, сохраняется ли история.ps -p $$
помощью командной строки; значение под «CMD» в выходных данных - это оболочка, которую вы используете. Скорее всего, так и будетbash
, но если это не так, добавьте комментарий, чтобы сказать, что это такое и кто-то может быть в состоянии помочь вам дальше оттуда - я использую толькоbash
себя, поэтому не могу помочь, если вы используете что-то еще.)Ответы:
savehist-mode
здесь не применимо; причина того, что у вас возникла эта проблема, заключается в том, что Bash по умолчанию записывает данные в файл истории только тогда, когда его буфер истории в памяти заполнен или находится на выходе, а последний - только если он выходит чисто - то есть Bash процесс, который убит, а не завершит работу, никогда не будет записывать последние команды в файл истории.Чтобы обойти эту проблему, убедитесь, что вы всегда аккуратно завершаете сеанс оболочки, выполняя
logout
илиexit
, или печатаяC-d
в приглашении, перед уничтожением буферов оболочки; это даст Bash возможность написать файл истории перед выходом.Также смотрите Bash FAQ по управлению файлами истории, чтобы узнать, как заставить Bash записывать каждую команду в историю, как только она выполняется; как только вы заработали эту работу, вам больше не нужно беспокоиться о выходе из своих оболочек, прежде чем вы убьете их буферы, но можете делать это
C-x k
с дикой энергией.источник