¿Cómo depuro mi archivo vimrc?

80

Tengo un problema en Vim, y creo que puede estar en mi vimrcarchivo (o me han dicho que podría ser mi vimrcarchivo).

¿Cómo verifico esto? Si es mi vimrcarchivo, ¿cómo sé dónde se encuentra exactamente el problema?

Martin Tournoij
fuente

Respuestas:

79

Lo primero que debe hacer es iniciar Vim con la configuración predeterminada:

vim -u NONE -U NONE -N

Esto -u NONEevita que Vim cargue su vimrc, -U NONEevita que Vim cargue su gvimrc y -Nle dice a Vim que use el modo no compatible (esto no es obligatorio, pero la mayoría de los usuarios de Vim no están acostumbrados al modo "compatible"). Tenga en cuenta que NONEse requiere que esté en mayúsculas.

En Windows, puede agregar estos indicadores creando un nuevo acceso directo 1 .

  • Si el problema persiste, entonces sabes que no es algo en tu vimrc.

  • Si el problema desaparece, ahora es causado por algo en su archivo vimrc.

¡No es mi vimrc!

¡Hurra! Ve y haz tu pregunta. ¡Asegúrese de mencionar que intentó iniciar Vim sin un archivo vimrc!

Entonces es mi vimrc, ¿y ahora qué?

Si aún no lo ha hecho, probablemente quiera guardar primero una copia de seguridad de su archivo vimrc.

Verifica los complementos

Lo siguiente que probablemente quiera hacer es deshabilitar todos los complementos primero; los complementos pueden alterar bastante en Vim. Si esto soluciona el problema, intente averiguar qué complemento vuelve a habilitarlos uno por uno. Después de descubrir qué complemento causa exactamente el problema, puede intentar solucionarlo leyendo la documentación de este complemento y / o haciendo una pregunta etiquetada con plugin-<name>.

Si es no un plugin, y usted no tiene ninguna idea de lo que está causando el problema, entonces es un procedimiento de ensayo y error. Comente una o más líneas en su vimrc, inicie Vim, verifique si ocurre el problema y repita este procedimiento hasta que el problema deje de ocurrir. La forma más rápida de hacer esto es:

  1. Comente (o elimine) aproximadamente la mitad de su archivo vimrc.
  2. Reinicie Vim o abra un nuevo Vim (recargar el vimrc no es lo suficientemente bueno, ya que la configuración no está desarmada).
  3. ¿Se ha ido el problema ahora? Vuelva a colocar la parte que retiró (mantener Vim abierto y usar deshacer es útil aquí) y repita el paso 1 en la parte que agregó nuevamente.
  4. ¿Sigue ocurriendo el problema? Ve al paso 1.

Al final, debe tener una sola opción o una combinación de algunas opciones que causen su problema. Puede obtener más información sobre cualquier opción en Vim utilizando:

:help 'option_name'

Las citas son importantes aquí, generalmente funciona sin ellas, pero a veces terminas en la página incorrecta si las omites.

Si todavía está confundido después de leer la página de ayuda, ya sabe dónde hacer una pregunta ;-)

Depuración de un solo complemento

Si desea aislar un solo complemento, tal vez para hacer una pregunta al respecto, desea cargar lo menos posible pero aún así cargar el complemento; puede hacerlo fácilmente con la función de paquetes de Vim. Esto requiere Vim 8 o una versión razonablemente reciente de Neovim.

  1. Crear un nuevo directorio vacío; Usaremos la ~/pluginruta en este ejemplo. Ahora coloque el complemento en el pack/plugins/start/$namedirectorio normal . Por ejemplo:

    git clone https://github.com/fatih/vim-go.git ~/plugin/pack/plugins/start/vim-go
    
  2. Cree un test-vimrcarchivo con los siguientes contenidos; esto asegurará que Vim cargará complementos desde el ~/plugindirectorio y no desde el ~/.vim directorio:

    set nocompatible
    set packpath=~/plugin,/usr/share/vim/vimfiles,/usr/share/vim/vim80,/usr/share/vim/vimfiles/after,~/plugin/after
    packloadall!
    
    syntax on
    filetype plugin indent on
    
  3. Comience Vim con:

    vim -U NONE -u ~/test-vimrc
    

    Ahora tiene un vimrc mínimo con solo este complemento.


Notas al pie

1 Por ejemplo: en 64 bits de Windows, el acceso directo sería algo como esto: "C:\Program Files (x86)\Vim\vim74\vim.exe" -u NONE -U NONE -N. Para crearlo, haga clic derecho en el Explorador de archivos donde desee el acceso directo, luego seleccione Nuevo -> Acceso directo y pegue el texto del acceso directo. Es posible que deba cambiar la ruta de Vim si su Vim está instalado en otra ubicación.

Martin Tournoij
fuente
77
Esta técnica se llama localización de fallas de búsqueda binaria .
tommcdo
2
Después de que descubras tu error, este sería un buen momento para comenzar a mantener tu .vimrc bajo control de versión :) Casi siempre será uno de los últimos cambios que hiciste que hizo que las cosas se comportaran de manera extraña.
escrafford
1
No necesitas -U NONEsi tienes -u NONE.
Antony
@ MartinTournoij Sugerí una edición para que sea más fácil de entender para un lector principiante. Espero que te guste. ¡Gracias!
jpaugh
1
Gracias @jpaugh; Creo que el orden tiene más sentido.
Martin Tournoij
31

Hay un -Dparámetro Vim especialmente para la depuración que irá al modo de depuración después de ejecutar el primer comando desde un script.

Por ejemplo, para ejecutar Vim en modo de depuración sin ningún complemento, ejecutar como:

vim --noplugin -D

Escriba n/ nextpara analizar la siguiente línea y siga presionando Enter.

Y conto qvolver a la viminterfaz.

Si está utilizando una versión GUI, coloque un guicomando en su vimrc para iniciar la depuración justo después de ese comando.

Presione Ctrl+ dpara ver la lista de comandos disponibles

Lee mas:

kenorb
fuente
1
Esto fue de gran ayuda para encontrar un error simple en el archivo .vimrc que estaba causando un mensaje de error. Vale la pena probar esto primero, ya que es rápido.
RichVel
1
@kenorb este comando es increíble, sálvame de ir a otro editor.
TheLazyChap
11

Como ya se mencionó, primero trate vim -u NONE -U NONE -Nde asegurarse de que su vainilla vim esté funcionando bien.

Luego inicie vim normalmente y verifique

:messages

desde dentro de vim después del problema, que mostrará todas las advertencias y errores.

Finalmente inicie vim con el siguiente comando

vim -V9logfile.log

que creará un archivo de registro llamado logfile.log, -V9es el nivel de registro e intenta reproducir su problema.

RSabet
fuente
11

Un consejo más: tan cavernícola como pueda parecer, me gusta agregar: "mensaje" de echom a mi .vimrc para ver qué se está ejecutando y qué no.

Por ejemplo

if executable('ag')
  :echom "AG FOUND"

  ...
endif

Esto me ayuda a ver rápidamente si se está ejecutando el bloque if, etc. El mensaje se imprimirá en la consola la próxima vez que inicie vim.

Edy Bourne
fuente
66
Y si usa echomotro comando interesante es :messagesconseguir que se repita el registro completo de los mensajes. A veces puede ser útil mirarlos después del inicio.
statox
Esto es casi lo que necesitaba, quiero ver cuál es el valor de cpoptions en un punto de mi vimrc, ¿cómo hago eco de la salida de ": set cpoptions"? ?
Mike Lippert
10

Una cosa que he encontrado ayuda es mantener una colección de variables que alternan partes de tu .vimrcpara que puedas deshabilitar o habilitar partes de ella sin tener que comentar nada. También tiene el efecto secundario agradable de obligarlo a pensar en la organización de su .vimrc.

" feature toggles in vimrc
let g:vimrc_feat_pathogen               = 1
let g:vimrc_feat_core_minimal           = 1
let g:vimrc_feat_matchit                = 1
let g:vimrc_feat_options                = 1
let g:vimrc_feat_colors_and_highlight   = 1
let g:vimrc_feat_key_rebinding_arpeggio = 1
let g:vimrc_feat_key_rebinding          = 1
let g:vimrc_feat_autocommand_group      = 1
let g:vimrc_feat_custom_definitions     = 1
let g:vimrc_feat_load_opam              = 1

Aquí hay un ejemplo de una sección protegida por un if:

if g:vimrc_feat_core_minimal
    set nocompatible
    filetype plugin indent on
    syntax on
endif
Gregory Nisbet
fuente
1

Mi tiempo de carga de vimrc fue muy lento, alrededor de 400 ms, y lo reduje a 20 ms solo eliminando esta línea:

silent !mkdir ~/.config/nvim/backups > /dev/null 2>&1

Asegúrese de no tener llamadas a comandos externos como ese.

Kristijan
fuente
1
Bienvenido al sitio! Este es un dato útil, pero es bastante más específico que la pregunta muy general. Podría agregarse mejor como respuesta a, por ejemplo, esta pregunta , o, si solo está buscando compartir conocimientos, ¿tal vez podría hacer y responder su propia pregunta?
Rico
0

Aquí hay un procedimiento muy simple para comenzar.

  1. comentar el contenido de todo su archivo .vimrc
  2. recarga tu .vimrc ejecutando :source %o:so $MYVIMRC
  3. descomentar una parte discreta del archivo (generalmente comenzando desde arriba)
  4. Repita los pasos 2 y 3 hasta que encuentre el error.
  5. Corrige el error.
Mike Wilding
fuente
1
Esta respuesta podría ser mucho mejor si la capitalizaras y puntuaras correctamente.
Recomiendo hacer esto con una búsqueda binaria.
D. Ben Knoble