温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - How to enforce vim specific shell history
vim

其他 - 如何执行特定于vim的shell历史记录

发布于 2020-04-12 12:24:49

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

查看更多

提问者
puk
被浏览
73
David Brown 2012-01-08 19:54

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加载指定的配置文件(它将在加载normal之后加载.bashrc)。因此,现在,当您运行命令时:sh,它将使用此配置文件运行bash,这会将其设置为使用其他历史记录文件。