我希望能够以私有模式轻松启动Vim。让我们将私有模式定义为利用这组命令的私有模式:

set history=0
set nobackup
set nomodeline
set noshelltemp
set noswapfile
set noundofile
set nowritebackup
set secure
set viminfo=""


让我知道您是否可以想到其他适合私有模式的命令。

关键是我无法想到使用此设置来启动Vim的任何简便方法。

我想出了一些想法:



加载.vimrcprivate而不是.vimrc

您只需将所有必要的命令放入.vimrcprivate并像这样启动Vim:

vim -u .vimrcprivate



定义并调用Private()函数

另一个想法是将这样的代码添加到您的.vimrc中:

function Private()
    " set of commands here
endfunction


,然后就可以在私有模式下启动Vim了:

 vim -c 'call Private()'



使用变量来触发设置您的命令

与第二种解决方案非常相似。
只需将

if exists('privatemode')
    " set of commands here
endif


添加到.vimrc中,然后启动Vim使用

vim -c 'let privatemode=1'


,它既不聪明也不简短。


为您的.bashrc(或您的shell使用的任何其他。* rc文件)添加别名。 >
例如:

alias vimprivate="vim +\"set history=0\" +\"set nobackup\" +\"set nomodeline\"\
    +\"set noshelltemp\" +\"set noswapfile\" +\"set noundofile\"\ 
    +\"set nowritebackup\" +\"set secure\" +\"set viminfo=\"\"\""


太糟糕了。我不喜欢。


使用环境变量

只需运行VIM_PRIVATE=1 vim并添加

if $VIM_PRIVATE
    " set of commands here
endif

< br到您的.vimrc。


一些魔术(摘自Carpetsmoker在此主题中的评论)

Carpetsmoker在此评论中说,


我不建议使用单独的vimrc文件,原因很简单>容易忘记。像autocmd这样的东西:au BufRead * if &cryptmethod != "" | setlocal nobackup noundofile ... | endif应该为您做魔术,这是不可能忘记的。


但是我还不知道这种魔术是如何工作的。



你有什么主意吗?

完美的解决方案是vim -privatevim +Private,但是:


我非常确定您不能添加自己的自定义命令行选项,例如-private
当涉及到+Private时,我无法在线找到它。


评论

也许您可以在vimrc中定义一个自定义命令,例如:command!私有设置历史记录= 0 nobackup secure ...,然后使用vim +'Private'从shell调用它。关于您提到的最后一个自动命令,当读取缓冲区时,它将测试'cryptmethod'选项或简短版本的'cm'的值是否为非空。当使用Ex命令:X将缓冲区写入文件时,此选项控制用于加密缓冲区的加密方法。如果该选项不为空,则自动命令将设置各种选项。

我投票给vim -Nu .vimrcprivate。

4和1,2或3的组合怎么样?别名vimprivate ='vim -u .vimrcprivate'等。

另一种方法是将vim符号链接到另一个名称,例如vimp,然后测试v:progname ==“ vimp”,如果为true,则执行私有模式设置。参见:help v:progname。

@garyjohn。您的解决方案真的很棒!像魅力一样工作:)

#1 楼

好吧,有点迟了,但要回应:



一些魔术(摘自Carpetsmoker在此主题中的评论)



我的一般想法是,如果您使用的是加密文件,则始终要启动“私有模式”,因此此自动命令将为您做到这一点:

au BufRead * if &key!= ""
    \ | setlocal history=0 nobackup nomodeline noshelltemp noswapfile noundofile nowritebackup secure viminfo=""
    \ | endif


基本上,每次从磁盘读取文件时,它都会检查是否设置了key设置(这是存储密码的位置),如果是,它会设置您的设置。有关自动命令的工作原理的一般概述,请参见:help autocommand

它的优点是不能忘记使用它。

当然,它要求文件是加密。如果不是,则什么也不做。但并非所有内容都会丢失,我们可以使用文件名表示文件是私有文件,例如:

au BufRead *.private setlocal ...


将所有以.private结尾的文件标记为这样。

如果要以“私有”模式随机打开文件,则建议使用简单的shell别名,例如:

alias vimprivate='vim -c "source ~/.vim/private"


~/.vim/private会包含:

setlocal history=0 nobackup nomodeline noshelltemp noswapfile noundofile nowritebackup secure viminfo=""


为什么不-u?好吧,这样您就可以拥有自己的设置和“专用”设置。您还可以将两者结合使用:

au BufRead * if &key!= "" | source ~/.vim/private | endif


#2 楼

根据Vim文档(:help -c),在启动Vim时,最多只能组合10个+{command}-c {command}-S {file}选项参数,并且它们执行_after_读取第一个文件。

--cmd {command}选项允许在处理任何vimrc文件之前要执行的另外10条命令,但请记住,任何设置都可以被vimrc覆盖。

因此,我更喜欢尽早设置Vim选项,避免了对环境变量或脚本逻辑。另外,插件可能正在做一些令人毛骨悚然的事情,因此最好不要加载任何东西。 :

# Secure Vim
alias vimsec="vim -N -n -i NONE -u ~/.vimrcprivate"
alias gvimsec="g$(alias vimsec | sed -e "s/-u/-U/" -e "s/\(.*\)'\(.*\)'//")"