在私有模式下启动Vim的最简单方法


19

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

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

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

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

这是我提出的一些想法:

  1. 加载.vimrcprivate而不是.vimrc

    您可以简单地将所有必要的命令放入.vimrcprivate并像这样启动Vim:

    vim -u .vimrcprivate
    
  2. 定义并调用Private()函数

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

    function Private()
        " set of commands here
    endfunction
    

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

     vim -c 'call Private()'
    
  3. 使用变量触发命令设置

    它与第二种解决方案非常相似。只需添加

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

    到.vimrc,然后使用以下命令启动Vim

    vim -c 'let privatemode=1'
    

    这既不聪明也不简短。

  4. 将别名添加到您的.bashrc(或您的外壳正在使用的任何其他。* rc文件中)

    例如:

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

    太可怕了 我不喜欢

  5. 使用环境变量

    只需运行VIM_PRIVATE=1 vim并添加

    if $VIM_PRIVATE
        " set of commands here
    endif
    

    到您的.vimrc。

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

    Carpetsmoker在此评论中

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

    但是我没有这个想法如何变魔术还没有


你有什么主意吗

完美的解决办法是vim -privatevim +Private然:

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

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

5
我投赞成票vim -Nu .vimrcprivate
romainl '16

3
4和1,2或3的组合怎么样?alias vimprivate='vim -u .vimrcprivate'
史蒂夫(Steve)

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

@garyjohn。您的解决方案真的很棒!作品就像魅力:)
Mateusz Piotrowski

Answers:


10

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

  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

1

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

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

因此,我更喜欢尽早设置Vim选项,并且避免了任何环境变量或脚本逻辑的需要。另外,插件可能正在做一些狡猾的事情,因此最好不要加载任何插件。

我能想到的最安全的调用方法是在~/.bashrc一个简单且指向重点的vimrcprivate文件中使用别名:

# Secure Vim
alias vimsec="vim -N -n -i NONE -u ~/.vimrcprivate"
alias gvimsec="g$(alias vimsec | sed -e "s/-u/-U/" -e "s/\(.*\)'\(.*\)'/\2/")"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.