¿Cómo puedo hacer que Vim ignore toda la configuración del usuario, como si estuviera recién instalada?

21

Para asegurar que el comportamiento no se vea afectado por mi configuración personal, quiero iniciar Vim de una manera que ignore todos mis archivos de configuración instalados por el usuario, como si Vim hubiera sido recién instalado por primera vez y el usuario lo hubiera ejecutado inmediatamente.

Esto se aborda en las preguntas frecuentes que sugieren que la respuesta es iniciar Vim con el siguiente comando:

vim -u NONE -U NONE -N -i NONE

Esto llega a la mayor parte del camino, pero la runtimepathopción aún contiene ~/.vimy, en particular, ~/.vim/after(por ejemplo, si posteriormente enciendo la detección del tipo de archivo y cambio el tipo de archivo, ~/.vim/after/syntax/the_relevant_filetype.vimse ejecutará el código ).

Puedo solucionar este problema específico invocando los siguientes comandos en el inicio *:

:set runtimepath-=~/.vim
:set runtimepath-=~/.vim/after

... pero no estoy seguro si:

  1. Esta es una solución sólida: ¿son esas las únicas rutas que pueden hacer que la configuración del usuario surta efecto? ¿Hay algo más en lo que no haya pensado?
  2. Hay una mejor manera de lograr el resultado deseado.

* Al utilizar --cmdo -u vimrcargumentos de concha, o simplemente tecleando manualmente.

EDITAR : Aquí hay un ejemplo específico del tipo de problema que estoy tratando de solucionar. (Aunque me gustaría que la solución solucione cualquier otro problema posible que aún no haya encontrado):

  1. Cree un archivo ~ / .vim / after / ftplugin / c.vim, que contenga el contenido:

    noremap i :echom "This is not default behaviour"<CR>
    

    Ahora tenemos alguna configuración instalada por el usuario que queremos ignorar. Probemos la solución sugerida por las preguntas frecuentes.

  2. Ejecute Vim con el comando:

    vim -u NONE -U NONE -N -i NONE
    
  3. Ingrese los comandos:

    :filetype plugin on
    :set ft=c
    i
    

Comportamiento deseado : Vim debe ingresar al modo Insertar. Esto es lo que haría si no existiera la configuración del usuario.

Comportamiento observado : Vim imprime "Este no es el comportamiento predeterminado"

Rico
fuente
En un sistema tipo Unix, ¿qué pasa si haces HOME=/dev/null vim -u NONE:?
muru
@muru Buena idea, y probablemente valga la pena agregarla como respuesta, pero no es perfecta . Obviamente, pierde la capacidad de, por ejemplo :cd ~, pero también la ubicación predeterminada del viminfoarchivo es $ HOME, lo que puede causar E138. Supongo que crear un nuevo directorio vacío y usarlo para $ HOME podría ser la mejor solución.
Rico
@muru Se me ocurrió que si está configurando $ HOME, ¿presumiblemente no necesita especificarlo -u NONE?
Rico
1
en cuyo caso /tmppodría ser mejor, fue mi primer pensamiento, pero luego elegí / dev / null como un agujero negro. ... o algo así HOME=$(mktemp -d) vim ....
muru
¿No leerá el sistema vimrc si no lo usa -u NONE? Depende del comportamiento que necesites, supongo.
muru

Respuestas:

16

A partir de Vim 8.0.1554 (desafortunadamente todavía no Neovim), puede usar vim --clean. Este método es recomendado por :help bugs.

:help --clean docs:

Similar a "-u DEFAULTS -U NONE -i NONE":
- se omiten las inicializaciones de archivos y variables de entorno
- 'runtimepath' y 'packpath' se configuran para excluir las entradas del directorio de inicio (no ocurre con -u DEFAULTS).
- el | defaults.vim | el script se carga, lo que implica 'no compatible': use los valores predeterminados de Vim
- no | gvimrc | la secuencia de comandos se carga
: no se lee ni escribe ningún archivo viminfo

jasonszhao
fuente
1
¡Agradable! Esto es mucho más simple que jugar con la $HOMEvariable. Goodjob Vim desarrolladores. Y gracias a ti por la respuesta!
Rico
1
--cleanahora también funciona con neovimmaster ( github.com/neovim/neovim/commit/… , que se incluirá en 0.4.0), pero no excluye el directorio de inicio.
Christian Clason
(sin embargo, ese parche está esperando ser portado)
Christian Clason
11

Una forma de eliminar archivos específicos del usuario sería utilizar un valor diferente de $HOME. Para permitir que no se lea ni escriba nada (como viminfo), puede usar /dev/null:

HOME=/dev/null vim -u NONE

Esto causará errores viminfo, por lo que, en su lugar, podría crear una carpeta temporal o usar una existente (como /tmp):

HOME=$(mktemp -d) vim -u NONE

Con tal $HOME, -u NONEpuede no ser necesario, dependiendo de lo que su administrador haya agregado a todo el sistema vimrc. Por ejemplo, en todos los sistemas de laboratorio I administrar, añadí un /etc/vim/vimrc.local(origen por defecto del Vim empaquetado /etc/vim/vimrc) que tiene nocompatible, syntax, etc., set, y filetype onasí.

muru
fuente
3
vim -i NINGUNO para evitar cargar viminfo
Christian Brabandt
1

No puedo responder mucho de eso, pero un punto que no veo mencionado, y estoy respondiendo una interpretación de lo que está en el título

¿Cómo puedo hacer que Vim ignore toda la configuración del usuario, como si estuviera recién instalada?

algunos han sugerido vim -u NONE ovim -u NORC

eso es, de alguna manera, un poco más básico que simplemente ningún archivo vimrc. Cuando escribo 'i', no dice 'insertar'. Es posible que desee que diga 'insertar'. Si comenzaste vim con tu archivo vimrc en blanco, entonces se mostrará insert

eso es porque vim carga primero una configuración predeterminada.

Puede apuntar vim a ese archivo predeterminado para obtener el efecto de que su archivo vimrc esté en blanco. Compruebe que tiene /etc/vim/vimrc, y que puede hacer vim -u /etc/vim/vimrc o en osx, el archivo predeterminado es/usr/share/vim/vicmrc

barlop
fuente
Creo que eso es exactamente lo que vim --clean hará por ti.
quemeraisc
@quemeraisc vim --cleanse cargará defaults.vim. Esta respuesta se refiere al sistema vimrc (Ver :help system-vimrc.), Que creo que no está cargado por vim --clean.
Rico
@barlap: Para evitar confusiones con defaults.vim (ver :help defaults.vim), podría ser mejor para cambiar la fraseología default configa system vimrcen esta respuesta. O incluso mejor, ¡discuta ambos en la respuesta!
Rico
0

De Vim-FAQ 2.5 :

2.5. Tengo un problema "xyz" (algunos) con Vim. ¿Cómo determino que es un problema con mi configuración o con Vim? / ¿He encontrado un error en Vim?

Primero, debe averiguar si el error está en los archivos de tiempo de ejecución reales o en cualquier complemento que se distribuya con Vim o si es un simple efecto secundario de cualquier opción de configuración de su .vimrc o .gvimrc. Entonces, primero, comience vim así:

vim -u NONE -U NONE -N -i NONE

esto inicia Vim en modo no compatible (-N), sin leer su archivo viminfo (-i NINGUNO), sin leer ningún archivo de configuración (-u NINGUNO para no leer el archivo .vimrc y -U NINGUNO para no leer un archivo .gvimrc) o Incluso plugin.

mMontu
fuente
1
A pesar de estar en las preguntas frecuentes, esto en realidad no funciona, por las razones mencionadas en la pregunta.
Rico el
@Rich De su comentario sobre la pregunta: ensure that none of the behaviour I'm seeing is caused by user config- entonces parece que está tratando de hacer exactamente lo que se explica en estas Preguntas frecuentes. He releído tu pregunta y aún no entiendo cuáles son las razones que mencionaste.
mMontu
De hecho, estoy tratando de hacer exactamente lo que se explica en las preguntas frecuentes. Pero la solución que da no funciona, debido a la runtimepathconfiguración.
Rico el
¿Qué tiene de malo exactamente el runtimepath? Parece ser el valor predeterminado para esta opción, como se explica en :help rtp. ¿Cómo afecta este valor a su prueba?
mMontu
@Rich Quiero decir, ¿ves alguna diferencia al comparar con una instalación nueva después de activar la detección de tipo de archivo?
mMontu