Najprostszy sposób na uruchomienie Vima w trybie prywatnym

19

Chcę móc łatwo uruchomić Vima w trybie prywatnym. Zdefiniujmy tryb prywatny jako taki, który wykorzystuje ten zestaw poleceń:

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

Daj mi znać, jeśli możesz wymyślić jakieś dodatkowe polecenia odpowiednie dla trybu prywatnego.

Chodzi o to, że nie mogę wymyślić żadnego krótkiego i łatwego sposobu na rozpoczęcie Vima z tą konfiguracją.

Oto kilka pomysłów, które wpadłem na pomysł:

  1. Załaduj .vimrcprivate zamiast .vimrc

    Możesz po prostu umieścić wszystkie niezbędne polecenia w .vimrcprivate i uruchomić Vima w następujący sposób:

    vim -u .vimrcprivate
    
  2. Zdefiniuj i wywołaj Private()funkcję

    Kolejny pomysł dodaj taki kod do swojego .vimrc:

    function Private()
        " set of commands here
    endfunction
    

    i wtedy możesz uruchomić Vima w trybie prywatnym, takim jak ten:

     vim -c 'call Private()'
    
  3. Użyj zmiennej, aby uruchomić konfigurację swoich poleceń

    Jest dość podobny do drugiego rozwiązania. Poprostu dodaj

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

    do twojego .vimrc, a następnie uruchom Vima używając

    vim -c 'let privatemode=1'
    

    który nie jest ani mądry, ani krótki.

  4. Dodaj alias do pliku .bashrc (lub dowolnego innego pliku. * Rc używanego przez powłokę)

    Na przykład:

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

    co jest okropne. Nie podoba mi się

  5. Użyj zmiennej środowiskowej

    Po prostu uruchom VIM_PRIVATE=1 vimi dodaj

    if $VIM_PRIVATE
        " set of commands here
    endif
    

    do twojego .vimrc.

  6. Trochę magii (z komentarza Carpetsmoker w tym wątku )

    Carpetsmoker mówi w tym komentarzu, że

    Nie polecałbym używania osobnego pliku vimrc, z prostego powodu, że tak łatwo go zapomnieć. Coś takiego jak ten autocmd: au BufRead * if &cryptmethod != "" | setlocal nobackup noundofile ... | endifpowinien zrobić dla ciebie magię i nie można tego zapomnieć.

    Jednak nie mam pojęcia jak to działa magia jeszcze .


Masz jakiś pomysł?

Rozwiązaniem idealnym byłoby vim -privatealbo vim +Privatejednakże:

  • Jestem pewien, że nie możesz dodać własnych niestandardowych opcji wiersza poleceń, takich jak -private.
  • jeśli chodzi o +Privateto, nie mogłem go znaleźć w Internecie.
Mateusz Piotrowski
źródło
3
Może mógłbyś zdefiniować niestandardowe polecenie w swoim vimrc, na przykład tak: command! Private set history=0 nobackup secure ...a następnie wywołać je z powłoki za pomocą vim +'Private'. Jeśli chodzi o ostatnią komendę, o której wspomniałeś, podczas odczytywania bufora sprawdza się, czy wartość 'cryptmethod'opcji, czy 'cm'w przypadku krótkiej wersji, nie jest pusta. Ta opcja kontroluje metodę szyfrowania używaną do szyfrowania bufora, gdy jest on zapisywany do pliku za pomocą polecenia Ex :X. Jeśli opcja nie jest pusta, wówczas automatyczne polecenie konfiguruje różne opcje.
saginaw
5
Głosuję za vim -Nu .vimrcprivate.
romainl
3
A może kombinacja 4 i 1,2 lub 3? alias vimprivate='vim -u .vimrcprivate'itd.
Steve,
7
Inną metodą jest dowiązanie vima do innej nazwy, takiej jak vimp, a następnie przetestowanie v:progname == "vimp"i, jeśli to prawda, wykonanie ustawień trybu prywatnego. Zobaczyć :help v:progname.
garyjohn
@garyjohn. Twoje rozwiązanie jest naprawdę fajne! Działa jak urok :)
Mateusz Piotrowski,

Odpowiedzi:

10

Cóż, trochę spóźniony, ale w odpowiedzi na:

  1. Trochę magii (z komentarza Carpetsmoker w tym wątku)

Moją ogólną ideą było to, że zawsze chcesz uruchomić „tryb prywatny”, jeśli używasz zaszyfrowanego pliku, więc ta komenda automatyczna zrobi to za Ciebie:

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

Zasadniczo za każdym razem, gdy plik jest odczytywany z dysku, sprawdza, czy keyustawienie jest ustawione (w tym miejscu jest przechowywane hasło), a jeśli tak, to ustawia ustawienia. Zobacz :help autocommandogólny przegląd działania automatycznych poleceń.

Zaletą tego jest to, że nie można zapomnieć o użyciu.

Oczywiście wymaga to zaszyfrowania pliku. Jeśli tak nie jest, nic się nie dzieje. Ale nie wszystko zostało utracone, możemy użyć nazwy pliku, aby wskazać, że plik jest prywatny, na przykład:

au BufRead *.private setlocal ...

Oznaczałoby wszystkie pliki kończące się .privatejako takie.

Jeśli chcesz losowo otwierać pliki w trybie „prywatnym”, polecam użycie prostego aliasu powłoki, np .:

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

I ~/.vim/privatezawierałby:

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

Dlaczego nie -u? W ten sposób masz własne ustawienia i ustawienia „prywatne”. Możesz także połączyć te dwa z:

au BufRead * if &key!= "" | source ~/.vim/private | endif
Martin Tournoij
źródło
1

Zgodnie z dokumentacją Vima ( :help -c) może być maksymalnie 10 +{command}, -c {command}a -S {file}argumenty opcji łączone przy uruchamianiu Vima, a wykonują one _ po_ odczytaniu pierwszego pliku.

Ta --cmd {command}opcja umożliwia wykonanie dodatkowych 10 poleceń przed przetworzeniem dowolnego pliku vimrc, ale należy pamiętać, że vimrc może zastąpić wszelkie ustawienia.

Dlatego wolę ustawić opcje Vima wcześniej i unikać jakiejkolwiek potrzeby zmiennych środowiskowych lub logiki skryptowej. Ponadto wtyczki mogą robić podejrzane rzeczy, więc lepiej nie ładować żadnych.

Najbezpieczniejszą metodą wywoływania, jaką mogę wymyślić, jest użycie aliasów ~/.bashrcz prostym i konkretnym plikiem 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/")"
mvanle
źródło