Найпростіший спосіб запустити 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 -privateчи vim +Privateвсе-таки:

  • Я впевнений, що ви не можете додати власні параметри командного рядка, як-от -private.
  • коли мова йде про +Privateмене, я не зміг знайти його в Інтернеті.

3
Можливо, ви могли б визначити власну команду всередині вашого vimrc, наприклад:: command! Private set history=0 nobackup secure ..., а потім викликати її з оболонки за допомогою vim +'Private'. Стосовно останнього згаданого автокоманди, коли буфер читається, він перевіряє, чи значення 'cryptmethod'параметра або 'cm'для короткої версії не порожнє. Цей параметр керує методом шифрування, який використовується для шифрування буфера, коли він записується у файл із командою Ex :X. Якщо параметр не порожній, то автокоманда встановлює різні параметри.
saginaw

5
Я голосую за vim -Nu .vimrcprivate.
romainl

3
Як щодо комбінації 4 та 1,2 або 3? alias vimprivate='vim -u .vimrcprivate'і т. д.
Стів

7
Інший метод полягає в тому, щоб символізувати vim до іншого імені, наприклад vimp, а потім протестувати v:progname == "vimp"і, якщо це правда, виконати налаштування приватного режиму. Див :help v:progname.
garyjohn

@garyjohn. Ваше рішення справді приємне! Працює як шарм :)
Матеуш Піотровський

Відповіді:


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як такі.

Якщо ви хочете випадковим чином відкрити файли в режимі "приватного", я рекомендую використовувати простий псевдонім оболонки, наприклад:

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}опція дозволяє виконати додаткові 10 команд перед обробкою будь-якого файлу vimrc, але майте на увазі, що будь-які параметри можуть бути замінені 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/")"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.