Самый простой способ запустить 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. Если опция не пустая, то автокоманда устанавливает различные опции.
Сагино

5
Я голосую за vim -Nu .vimrcprivate.
Ромен

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.