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



有没有办法让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会话文件中,那就太好了。

Bash默认情况下将其历史记录存储在~/.bash_history中。这可以通过HISTFILE环境变量进行更改。因此,如果你想在vim中启动bash时使用一个单独的历史文件,你必须为HISTFILE设置一个不同的值。您可以通过为bash创建一个特殊的配置文件来实现这一点,以便在从vim中运行时使用。因此,首先制作一个文件~/.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,该配置文件将设置它使用不同的历史文件。

最新更新