Проблема в том, что эта история известна только оболочке bash, которая запустила vim. Когда вы делаете :!history
изнутри vim, вы запускаете новую оболочку bash с собственной историей, которая пуста, поэтому вы просто видите экран, который выглядел при запуске vim: он выводит все строки в его история, которая представляет собой нулевой итог. На самом деле это упрощение, но в любом случае вы не можете получить историю команд, которые вы набрали непосредственно перед запуском vim таким образом.
Если вы хотите получить эти строки истории, не выходя из vim, вы можете приостановить vim, нажав CTRL-Z
, а затем записать историю в файл, используя history >history.tmp
. Затем введите fg 1
для возобновления vim: это скажет bash перевести фокус обратно на «задание № 1», которое обычно будет vim. Номер задания отображается после нажатия клавиши CTRL-Z:
[1]+ Stopped vim
так что если в скобках есть число, отличное от 1, то вместо этого следует сделать fg
. Затем (надеюсь, вы это знаете), когда вы вернетесь в vim, просто :tabedit history.tmp
, например, чтобы открыть сохраненную историю в новой вкладке.
У вас также будут временные метки в этом выводе, но, поскольку вы используете vim, вы можете легко отфильтровать их с помощью команды :substitute
. В качестве альтернативы вы можете вырезать их, используя HISTTIMESTAMP='' history
вместо history
при записи в файл; это все еще выведет индекс каждой записи. Я полагаю, что вы можете отфильтровать это и по пути в файл, пропустив его через sed
или cut
или одного из членов их команды. Но это действительно легко сделать из vim (при условии, что вы знаете основы регулярных выражений; если нет, начните с :help :substitute
или, возможно, поищите учебник по регулярным выражениям).
Обратите внимание, что если вы читаете в строках ~ / .bash_history, вы получаете историю только из оболочек bash, которые завершили завершение , т.е. вы набрали exit
и окно терминала закрылось. Таким образом, никаких команд, введенных вами непосредственно перед запуском vim, там не будет. Вы можете изменить способ, которым это работает, но затем вы получите команды из разных сессий, все перемешанные в истории.