Der einfachste Weg, um Vim im privaten Modus zu starten

19

Ich möchte Vim ganz einfach in einem privaten Modus starten können. Definieren wir einen privaten Modus als einen, der diesen Befehlssatz verwendet:

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

Lassen Sie mich wissen, ob Sie zusätzliche Befehle finden, die für den privaten Modus geeignet sind.

Der Punkt ist, dass ich mir keine kurze und einfache Möglichkeit vorstellen kann, Vim mit diesem Setup zu starten.

Hier sind einige Ideen, die ich mir ausgedacht habe:

  1. Laden Sie .vimrcprivate anstelle von .vimrc

    Sie können einfach alle erforderlichen Befehle in .vimrcprivate einfügen und Vim folgendermaßen starten:

    vim -u .vimrcprivate
    
  2. Eine Private()Funktion definieren und aufrufen

    Eine andere Idee ist, Ihrem .vimrc einen Code wie diesen hinzuzufügen:

    function Private()
        " set of commands here
    endfunction
    

    und dann können Sie Vim in einem privaten Modus wie folgt starten:

     vim -c 'call Private()'
    
  3. Verwenden Sie eine Variable, um die Einrichtung Ihrer Befehle auszulösen

    Es ist der zweiten Lösung ziemlich ähnlich. Einfach hinzufügen

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

    auf deine .vimrc und starte dann Vim mit

    vim -c 'let privatemode=1'
    

    Das ist weder schlau noch kurz.

  4. Fügen Sie Ihrer .bashrc-Datei (oder jeder anderen. * Rc-Datei, die Ihre Shell verwendet) einen Alias ​​hinzu.

    Beispielsweise:

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

    Das ist schrecklich. Es gefällt mir nicht

  5. Verwenden Sie eine Umgebungsvariable

    Einfach ausführen VIM_PRIVATE=1 vimund hinzufügen

    if $VIM_PRIVATE
        " set of commands here
    endif
    

    zu Ihrer .vimrc.

  6. Etwas Magie (aus einem Kommentar von Carpetsmoker in diesem Thread )

    Carpetsmoker sagt in diesem Kommentar, dass

    Ich würde nicht empfehlen, eine separate vimrc-Datei zu verwenden, da dies so leicht zu vergessen ist. So etwas wie dieses AutoCMD: Sollte au BufRead * if &cryptmethod != "" | setlocal nobackup noundofile ... | endifdie Magie für Sie tun, und es ist unmöglich zu vergessen.

    Allerdings habe ich keine Ahnung, wie diese Magie funktioniert noch .


Hast du eine Idee?

Die perfekte Lösung wäre vim -privateoder vim +Privateaber:

  • Ich bin mir ziemlich sicher, dass Sie keine benutzerdefinierten Befehlszeilenoptionen wie hinzufügen können -private.
  • Wenn es darum geht, konnte +Privateich es nicht online finden.
Mateusz Piotrowski
quelle
3
Vielleicht könnten Sie einen benutzerdefinierten Befehl in Ihrem vimrc wie folgt definieren: command! Private set history=0 nobackup secure ...und ihn dann über die Shell mit aufrufen vim +'Private'. In Bezug auf den letzten von Ihnen erwähnten Autobefehl wird beim Lesen eines Puffers geprüft, ob der Wert der 'cryptmethod'Option oder 'cm'für die Kurzversion nicht leer ist. Diese Option steuert die Verschlüsselungsmethode, mit der der Puffer verschlüsselt wird, wenn er mit dem Befehl Ex in eine Datei geschrieben wird :X. Wenn die Option nicht leer ist, richtet der Autobefehl verschiedene Optionen ein.
Saginaw
5
Ich stimme dafür vim -Nu .vimrcprivate.
Romainl
3
Wie wäre es mit einer Kombination aus 4 und 1,2 oder 3? alias vimprivate='vim -u .vimrcprivate'etc.
Steve
7
Eine andere Methode besteht darin, vim mit einem anderen Namen wie vimp zu verknüpfen, dann v:progname == "vimp"Ihre Einstellungen für den privaten Modus zu testen und, wenn dies wahr ist, auszuführen. Sehen :help v:progname.
Garyjohn
@garyjohn. Ihre Lösung ist wirklich nett! Funktioniert wie ein Zauber :)
Mateusz Piotrowski

Antworten:

10

Nun, ein bisschen verspätet, aber um zu antworten:

  1. Etwas Magie (aus einem Kommentar von Carpetsmoker in diesem Thread)

Meine allgemeine Idee war, dass Sie immer den "privaten Modus" starten möchten, wenn Sie eine verschlüsselte Datei verwenden. Dieser automatische Befehl erledigt dies für Sie:

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

Grundsätzlich wird jedes Mal, wenn eine Datei von der Festplatte gelesen wird, überprüft, ob die keyEinstellung festgelegt ist (hier wird Ihre Passphrase gespeichert), und wenn dies der Fall ist, werden Ihre Einstellungen festgelegt. Siehe :help autocommandfür einen allgemeinen Überblick darüber , wie automatische Befehle funktionieren.

Der Vorteil dabei ist, dass man nicht vergessen kann, es zu benutzen.

Natürlich muss die Datei verschlüsselt sein. Ist dies nicht der Fall, wird nichts unternommen. Aber nicht alles ist verloren, wir können einen Dateinamen verwenden, um anzuzeigen, dass eine Datei privat ist, zum Beispiel:

au BufRead *.private setlocal ...

Würde alle Dateien, die mit "" enden, .privateals solche markieren .

Wenn Sie Dateien zufällig im "privaten" Modus öffnen möchten, würde ich die Verwendung eines einfachen Shell-Alias ​​empfehlen, z.

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

Und ~/.vim/privatewürde enthalten:

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

Warum nicht -u? Nun, auf diese Weise haben Sie Ihre eigenen Einstellungen und die "privaten" Einstellungen. Sie können die beiden auch kombinieren mit:

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

Nach Vim - Dokumentation ( :help -c) kann es nur maximal 10 sein +{command}, -c {command}und -S {file}Option Argumente kombiniert werden, wenn Vim starten, und sie ausführen _after_ die erste Datei gelesen wird.

Mit dieser --cmd {command}Option können weitere 10 Befehle ausgeführt werden, bevor eine vimrc-Datei verarbeitet wird. Beachten Sie jedoch, dass alle Einstellungen von vimrc überschrieben werden können.

Daher ziehe ich es vor, die Vim-Optionen frühzeitig festzulegen und Umgebungsvariablen oder Skriptlogik zu vermeiden. Plugins können auch verdorbene Dinge tun, daher ist es besser, keine zu laden.

Die sicherste Aufrufmethode, die ich mir ~/.bashrcvorstellen kann, ist die Verwendung von Aliasen in einer einfachen und genauen vimrcprivate-Datei:

# 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
quelle