La forma más sencilla de iniciar Vim en modo privado

19

Quiero poder iniciar Vim fácilmente en un modo privado. Definamos un modo privado como uno que utiliza este conjunto de comandos:

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

Avíseme si puede pensar en algún comando adicional adecuado para el modo privado.

El punto es que no puedo pensar en ninguna forma corta y fácil de iniciar Vim con esta configuración.

Aquí hay algunas ideas que se me ocurrieron:

  1. Cargue .vimrcprivate en lugar de .vimrc

    Simplemente puede poner todos los comandos necesarios en .vimrcprivate e iniciar Vim de esta manera:

    vim -u .vimrcprivate
    
  2. Definir y llamar a una Private()función.

    Otra idea agrega un código como este a tu .vimrc:

    function Private()
        " set of commands here
    endfunction
    

    y luego puedes iniciar Vim en un modo privado como este:

     vim -c 'call Private()'
    
  3. Use una variable para activar la configuración de sus comandos

    Es bastante similar a la segunda solución. Solo agrega

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

    a su .vimrc y luego inicie Vim usando

    vim -c 'let privatemode=1'
    

    que no es inteligente ni corto.

  4. Agregue un alias a su .bashrc (o a cualquier otro archivo. * Rc que esté usando su shell)

    Por ejemplo:

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

    lo cual es horrible No me gusta

  5. Use una variable ambiental

    Solo corre VIM_PRIVATE=1 vimy agrega

    if $VIM_PRIVATE
        " set of commands here
    endif
    

    a tu .vimrc.

  6. Algo de magia (de un comentario de Carpetsmoker en este hilo )

    Carpetsmoker dice en este comentario que

    No recomendaría usar un archivo vimrc separado, por la simple razón de que es tan fácil de olvidar. Algo así como este autocmd: au BufRead * if &cryptmethod != "" | setlocal nobackup noundofile ... | endifdebería hacer la magia por ti, y es imposible de olvidar.

    Sin embargo, todavía no tengo idea de cómo funciona esta magia .


¿Tiene usted alguna idea?

La solución perfecta sería vim -privateo vim +Privatesin embargo:

  • Estoy bastante seguro de que no puede agregar sus propias opciones de línea de comandos personalizadas como -private.
  • cuando se trata de no +Privatepude encontrarlo en línea.
Mateusz Piotrowski
fuente
3
Tal vez podría definir un comando personalizado dentro de su vimrc, como este:, command! Private set history=0 nobackup secure ...y luego llamarlo desde el shell con vim +'Private'. Con respecto al último autocomando que mencionó, cuando se lee un búfer, prueba si el valor de la 'cryptmethod'opción, o 'cm'para la versión corta, no está vacío. Esta opción controla el método de cifrado utilizado para cifrar el búfer cuando se escribe en un archivo con el comando Ex :X. Si la opción no está vacía, el comando automático configura varias opciones.
saginaw
55
Yo voto por vim -Nu .vimrcprivate.
romainl
3
¿Qué tal una combinación de 4 y 1,2 o 3? alias vimprivate='vim -u .vimrcprivate'etc.
Steve
77
Otro método es vincular vim a otro nombre como vimp, luego probar v:progname == "vimp"y, si es verdadero, ejecutar la configuración de modo privado. Ver :help v:progname.
garyjohn
@garyjohn. ¡Tu solución es realmente buena! Funciona como un encanto :)
Mateusz Piotrowski

Respuestas:

10

Bueno, un poco tardío pero para responder a:

  1. Algo de magia (de un comentario de Carpetsmoker en este hilo)

Mi idea general era que siempre desea iniciar el "modo privado" si está utilizando un archivo cifrado, por lo que este comando automático lo hará por usted:

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

Básicamente, cada vez que se lee un archivo desde el disco, comprueba si la keyconfiguración está establecida (aquí es donde se almacena la frase de contraseña), y si es así, establece la configuración. Consulte :help autocommandpara obtener una descripción general sobre cómo funcionan los comandos automáticos.

La ventaja de esto es que no puede olvidarse de usarlo.

Por supuesto, requiere que el archivo esté encriptado. Si no es así, no se hace nada. Pero no todo está perdido, podemos usar un nombre de archivo para indicar que un archivo es privado, por ejemplo:

au BufRead *.private setlocal ...

Marcaría todos los archivos que terminan .privatecomo tal.

Si desea abrir archivos al azar en modo "privado", le recomendaría usar un alias de shell simple, por ejemplo:

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

Y ~/.vim/privatecontendría:

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

¿Por qué no -u? Bueno, de esta manera tiene su propia configuración y la configuración "privada". También puedes combinar los dos con:

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

De acuerdo con la documentación de Vim ( :help -c) solo puede haber un máximo de 10 +{command}, -c {command}y los -S {file}argumentos de opción combinados al iniciar Vim, y se ejecutan _después_ se lee el primer archivo.

La --cmd {command}opción permite ejecutar 10 comandos adicionales antes de procesar cualquier archivo vimrc, pero tenga en cuenta que cualquier configuración puede ser anulada por vimrc.

Por lo tanto, prefiero configurar las opciones de Vim temprano y evitar cualquier necesidad de variables de entorno o lógica de secuencias de comandos. Además, los complementos pueden estar haciendo cosas poco fiables, por lo que es mejor no cargar ninguno.

El método de invocación más seguro que se me ocurre es usar alias ~/.bashrccon un archivo vimrcprivate simple y directo:

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