如何在“私人模式”下启动vim

ltskdhd1  于 2023-04-12  发布在  其他
关注(0)|答案(2)|浏览(119)

现代浏览器有一个叫做“隐私模式”或“隐身模式”的功能。我正在尝试用vim做同样的事情,即以不留下任何活动痕迹的方式运行它。这样我就可以使用vim打开一个包含存储在加密卷中的敏感信息的文件,而不必担心任何信息会泄露。
以下是我到目前为止所做的:

alias vim_private="vim -i NONE --cmd 'set noswapfile' --cmd 'set nobackup'"

我在我的. bashrc.理由中提到了这一点:

  • -i NONE,以便不会通过.viminfo泄漏文件名或寄存器内容
  • --cmd 'set noswapfile'用于防止创建交换文件
  • --cmd 'set nobackup'(无备份文件)

还有什么我遗漏的吗?vim还有其他泄露信息的方式吗?

lxkprmvk

lxkprmvk1#

您的设置看起来很好。我不确定当您以vi的形式调用Vim时是否会加载插件,但一些插件(例如提供MRU功能的插件)也会存储信息(通常在~/.vim...文件中)。可以通过--noplugin避免加载它们。
此外,对于偏执狂,$VIMINIT:set exrc:set modeline可能导致执行Vimscript代码;这可以(重新)启用隐私相关选项。

qxgroojn

qxgroojn2#

OP提供的别名将不起作用,这取决于你在vimrc文件中的命令。这是因为--cmd在你的vimrc文件加载之前运行命令,所以你的vimrc文件可能会覆盖这些值。相反,你可以使用-c,它是相同的,除了在你的vimrc文件加载之后执行。
由于在你的vimrc中有很多选项可能会泄漏数据,所以最好使用不同的方法。

使用vim,默认vimrc文件

就像上面建议的那样,另一种方法是使用别名来加载带有默认rc文件的vim:

HISTCONTROL=ignoredups:ignorespace # don't store commands that start with space to the history file
alias pvim_default=' vim -u DEFAULTS -U DEFAULTS -i NONE -n -c "set nomodeline"'

我们可以将bash变量HISTCONTROL设置为ignorespace选项,这样任何以空格为前缀的命令都不会保存到bash历史文件中。在zsh中,使用setopt HIST_IGNORE_SPACE

使用您自己的vimrc文件加载vim

如果你仍然想加载你的vimrc,一个更灵活的选择是传递一个自定义变量g:PrivateMode到vim,你可以使用它来配置你的vimrc文件。

HISTCONTROL=ignoredups:ignorespace # don't store commands that start with space to the history file
alias pvim=' vim --noplugin --cmd "let g:PrivateMode=1"'

然后在你的vimrc使用

" Don't use private mode if g:PrivateMode is not set from the command line
" Put near start of vimrc file
if !exists("g:PrivateMode")
    g:PrivateMode = 0
endif

" Put this near the end of your vimrc file so values don't get overwritten by accident
if g:PrivateMode
    set nobackup
    set noundofile
    set noswapfile
    set viminfofile=NONE
    set viminfo=
    set nomodeline
    set noexrc " dont load .vimrc, .exrc, .gvimrc found in the current directory
    set clipboard^=exclude: " make sure vim isn't saving to system clipboard
else
    " setup for non-private mode
endif

你需要检查一下vimrc文件,看看是否有任何命令、插件等最终可能泄漏数据并在私有模式下禁用它们。

相关问题