如何强制执行vim特定的shell历史记录

时间:2012-01-08 09:38:33

标签: vim

是否有任何方法可以使shell历史记录仅特定于某个vim实例。例如,在vim shell(:sh)和另一个终端

中观察这些事件序列
   Vim (:sh)                  |    Terminal
------------------------------------------------
1  pdflatex foo.tex           |
2                             |   echo hello
3                             |   echo world  

终端和Vim的命令历史记录是

1  pdflatex foo.tex
2  echo hello
3  echo world  

有什么方法可以让vim的命令历史记录

1  pdflatex foo.tex

,终端

1  echo hello
2  echo world  

我问,因为我只想按向上箭头执行pdflatex foo.tex,我也不想通过其他所有命令。此外,如果这个vim特定历史记录可以保存在vim会话文件中,那就太好了。

1 个答案:

答案 0 :(得分:2)

默认情况下,Bash会将其历史记录存储在~/.bash_history中。这可以使用HISTFILE环境变量进行更改。因此,如果您想在vim中启动bash时使用单独的历史记录文件,则必须为HISTFILE设置不同的值。您可以通过为从vim中运行时使用的bash创建一个特殊的配置文件来完成此操作。所以首先使用这一行创建一个文件~/.vimbashrc

export HISTFILE=~/.vim_bash_history

这将告诉bash使用~/vim_bash_history作为您的历史记录文件。如果您想要从vim启动的shell的任何其他特定设置,您还可以添加更多。然后在.vimrc添加行

set shell=/bin/bash\ --init-file\ ~/.vimbashrc

vim中的shell设置告诉它在使用:!命令和:shell命令时要执行的命令。 --init-file标志告诉bash加载指定的配置文件(它将在加载普通.bashrc后加载)。所以现在当你运行命令:sh时,它将使用这个配置文件运行bash,这将把它设置为使用不同的历史文件。