有没有办法让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,该配置文件将设置它使用不同的历史文件。