Le moyen le plus simple de démarrer Vim en mode privé

19

Je veux pouvoir démarrer facilement Vim en mode privé. Définissons un mode privé comme celui qui utilise cet ensemble de commandes:

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

Faites-moi savoir si vous pouvez penser à des commandes supplémentaires adaptées au mode privé.

Le fait est que je ne peux pas penser à un moyen court et facile de démarrer Vim avec cette configuration.

Voici quelques idées que j'ai trouvées:

  1. Chargez .vimrcprivate au lieu de .vimrc

    Vous pouvez simplement mettre toutes les commandes nécessaires dans .vimrcprivate et démarrer Vim comme ceci:

    vim -u .vimrcprivate
    
  2. Définir et appeler une Private()fonction

    Une autre idée consiste à ajouter un code comme celui-ci à votre .vimrc:

    function Private()
        " set of commands here
    endfunction
    

    puis vous pouvez démarrer Vim dans un mode privé comme celui-ci:

     vim -c 'call Private()'
    
  3. Utilisez une variable pour déclencher la configuration de vos commandes

    Elle est assez similaire à la deuxième solution. Ajoutez simplement

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

    sur votre .vimrc, puis démarrez Vim en utilisant

    vim -c 'let privatemode=1'
    

    qui n'est ni intelligent ni court.

  4. Ajoutez un alias à votre .bashrc (ou à tout autre fichier. * Rc que votre shell utilise)

    Par exemple:

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

    ce qui est horrible. Je n'aime pas ça.

  5. Utilisez une variable d'environnement

    Il suffit d'exécuter VIM_PRIVATE=1 vimet d'ajouter

    if $VIM_PRIVATE
        " set of commands here
    endif
    

    à votre .vimrc.

  6. Un peu de magie (d'après un commentaire de Carpetsmoker dans ce fil )

    Carpetsmoker dit dans ce commentaire que

    Je ne recommanderais pas d'utiliser un fichier vimrc séparé, pour la simple raison> qu'il est si facile d'oublier. Quelque chose comme cet autocmd: au BufRead * if &cryptmethod != "" | setlocal nobackup noundofile ... | endifdevrait faire la magie pour vous, et il est impossible d'oublier.

    Cependant , j'ai aucune idée comment cette magie fonctionne encore .


Tu as une idée?

La solution parfaite serait vim -privateou vim +Privatecependant:

  • Je suis sûr que vous ne pouvez pas ajouter vos propres options de ligne de commande personnalisées comme -private.
  • en ce qui concerne +Privateje n'ai pas pu le trouver en ligne.
Mateusz Piotrowski
la source
3
Vous pourriez peut-être définir une commande personnalisée dans votre vimrc, comme ceci:, command! Private set history=0 nobackup secure ...puis l'appeler à partir du shell avec vim +'Private'. Concernant la dernière autocommande que vous avez mentionnée, quand un buffer est lu, il teste si la valeur de l' 'cryptmethod'option, ou 'cm'pour la version courte, n'est pas vide. Cette option contrôle la méthode de chiffrement utilisée pour chiffrer le tampon lorsqu'il est écrit dans un fichier avec la commande Ex :X. Si l'option n'est pas vide, la commande automatique définit différentes options.
saginaw
5
Je vote pour vim -Nu .vimrcprivate.
romainl
3
Que diriez-vous d'une combinaison de 4 et 1,2 ou 3? alias vimprivate='vim -u .vimrcprivate'etc.
Steve
7
Une autre méthode consiste à lier symboliquement vim à un autre nom tel que vimp, puis à tester v:progname == "vimp"et, si cela est vrai, à exécuter vos paramètres en mode privé. Tu vois :help v:progname.
garyjohn
@garyjohn. Votre solution est vraiment sympa! Fonctionne comme un charme :)
Mateusz Piotrowski

Réponses:

10

Eh bien, un peu tard mais pour répondre à:

  1. Un peu de magie (d'après un commentaire de Carpetsmoker dans ce fil)

Mon idée générale était que vous vouliez toujours démarrer le "mode privé" si vous utilisez un fichier crypté, donc cette autocommande le fera pour vous:

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

Fondamentalement, chaque fois qu'un fichier est lu sur le disque, il vérifie si le keyparamètre est défini (c'est là que votre mot de passe est stocké), et s'il l'est, il vous définit les paramètres. Voir :help autocommandpour un aperçu général du fonctionnement des autocommandes.

L'avantage est que vous ne pouvez pas oublier de l'utiliser.

Bien sûr, cela nécessite que le fichier soit crypté. Si ce n'est pas le cas, rien n'est fait. Mais tout n'est pas perdu, nous pouvons utiliser un nom de fichier pour indiquer qu'un fichier est privé, par exemple:

au BufRead *.private setlocal ...

Marquerait tous les fichiers se terminant .privatecomme tels.

Si vous souhaitez ouvrir des fichiers de manière aléatoire en mode "privé", je vous recommande d'utiliser un simple alias de shell, par exemple:

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

Et ~/.vim/privatecontiendrait:

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

Pourquoi ne pas -u? Eh bien, de cette façon, vous avez vos propres paramètres et les paramètres "privés". Vous pouvez également combiner les deux avec:

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

Selon la documentation de Vim ( :help -c), il ne peut y avoir qu'un maximum de 10 +{command}, -c {command}et des -S {file}arguments d'option combinés au démarrage de Vim, et ils exécutent _après_ le premier fichier est lu.

L' --cmd {command}option permet d'exécuter 10 commandes supplémentaires avant de traiter tout fichier vimrc, mais gardez à l'esprit que tous les paramètres peuvent être remplacés par vimrc.

Par conséquent, je préfère définir les options Vim tôt et éviter tout besoin de variable d'environnement ou de logique de script. En outre, les plugins peuvent faire des choses louches, il est donc préférable de ne pas en charger.

La méthode d'invocation la plus sûre à laquelle je peux penser est d'utiliser des alias ~/.bashrcavec un fichier vimrcprivate simple et précis:

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