A maneira mais simples de iniciar o Vim no modo privado


19

Quero poder iniciar facilmente o Vim em modo privado. Vamos definir um modo privado como aquele que utiliza este conjunto de comandos:

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

Deixe-me saber se você pode pensar em algum comando adicional adequado para o modo privado.

O ponto é que não consigo pensar em nenhuma maneira curta e fácil de iniciar o Vim com essa configuração.

Aqui estão algumas idéias que eu tenho:

  1. Carregue .vimrcprivate em vez de .vimrc

    Você pode simplesmente colocar todos os comandos necessários em .vimrcprivate e iniciar o Vim assim:

    vim -u .vimrcprivate
    
  2. Definir e chamar uma Private()função

    Outra idéia: adicione um código como este ao seu .vimrc:

    function Private()
        " set of commands here
    endfunction
    

    e então você poderá iniciar o Vim em um modo privado como este:

     vim -c 'call Private()'
    
  3. Use uma variável para acionar a configuração de seus comandos

    É bastante semelhante à segunda solução. Basta adicionar

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

    ao seu .vimrc e inicie o Vim usando

    vim -c 'let privatemode=1'
    

    o que não é inteligente nem curto.

  4. Adicione um alias ao seu .bashrc (ou a qualquer outro arquivo. * Rc que seu shell esteja usando)

    Por exemplo:

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

    o que é horrível. Eu não gosto disso

  5. Use uma variável ambiental

    Basta executar VIM_PRIVATE=1 vime adicionar

    if $VIM_PRIVATE
        " set of commands here
    endif
    

    para o seu .vimrc.

  6. Alguns magia (de um comentário por Carpetsmoker em esta discussão )

    Carpetsmoker diz neste comentário que

    Eu não recomendaria o uso de um arquivo vimrc separado, pelo simples motivo> de que é tão fácil esquecer. Algo como este autocmd: au BufRead * if &cryptmethod != "" | setlocal nobackup noundofile ... | endifdeve fazer a mágica para você e é impossível esquecer.

    No entanto, eu não tenho idéia de como essa mágica funciona ainda .


Você tem alguma ideia?

A solução perfeita seria vim -privateou, vim +Privateno entanto:

  • Tenho certeza que você não pode adicionar suas próprias opções de linha de comando personalizadas, como -private.
  • quando se trata, +Privatenão consegui encontrá-lo online.

3
Talvez você possa definir um comando personalizado dentro do seu vimrc, assim: command! Private set history=0 nobackup secure ...e depois chamá-lo a partir do shell com vim +'Private'. Em relação ao último comando automático que você mencionou, quando um buffer é lido, ele testa se o valor da 'cryptmethod'opção ou 'cm'da versão curta não está vazio. Esta opção controla o método de criptografia usado para criptografar o buffer quando ele é gravado em um arquivo com o comando Ex :X. Se a opção não estiver vazia, o comando automático configurará várias opções.
Saginaw

5
Eu voto a favor vim -Nu .vimrcprivate.
Romainl

3
Que tal uma combinação de 4 e 1,2 ou 3? alias vimprivate='vim -u .vimrcprivate'etc.
Steve

7
Outro método é vincular o vim a outro nome, como vimp, testar v:progname == "vimp"e, se verdadeiro, executar as configurações do modo privado. Veja :help v:progname.
precisa saber é

@garyjohn. Sua solução é muito boa! Funciona como um encanto :)
Mateusz Piotrowski

Respostas:


10

Bem, um pouco tardio, mas para responder a:

  1. Alguma mágica (de um comentário de Carpetsmoker neste tópico)

Minha ideia geral era que você sempre deseja iniciar o "modo privado" se estiver usando um arquivo criptografado, portanto, esse comando automático fará isso por você:

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

Basicamente, toda vez que um arquivo é lido do disco, ele verifica se a keyconfiguração está definida (é onde a senha está armazenada) e, se estiver, define as configurações. Veja :help autocommanduma visão geral sobre como os comandos automáticos funcionam.

A vantagem disso é que não se esqueça de usá-lo.

Obviamente, isso exige que o arquivo seja criptografado. Caso contrário, nada será feito. Mas nem tudo está perdido, podemos usar um nome de arquivo para indicar que um arquivo é privado, por exemplo:

au BufRead *.private setlocal ...

Marcaria todos os arquivos que terminam .privatecomo tal.

Se você deseja abrir arquivos aleatoriamente no modo "privado", recomendo o uso de um alias simples de shell, por exemplo:

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

E ~/.vim/privateconteria:

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

Por que não -u? Bem, desta maneira você tem suas próprias configurações e as configurações "particulares". Você também pode combinar os dois com:

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

1

De acordo com a documentação do Vim ( :help -c), só pode haver um máximo de 10 +{command}, -c {command}e -S {file}argumentos de opção combinados ao iniciar o Vim, e eles executam _após_ o primeiro arquivo é lido.

A --cmd {command}opção permite que 10 comandos adicionais sejam executados antes de processar qualquer arquivo vimrc, mas lembre-se de que qualquer configuração pode ser substituída pelo vimrc.

Portanto, prefiro definir as opções do Vim com antecedência e evitar qualquer necessidade de variável de ambiente ou lógica de script. Além disso, os plugins podem estar fazendo coisas desonestas, por isso é melhor não carregar nenhum.

O método de chamada mais seguro que consigo pensar é usar aliases em ~/.bashrcum arquivo vimrcprivate simples e direto ao ponto:

# Secure Vim
alias vimsec="vim -N -n -i NONE -u ~/.vimrcprivate"
alias gvimsec="g$(alias vimsec | sed -e "s/-u/-U/" -e "s/\(.*\)'\(.*\)'/\2/")"
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.