2012-01-08 8 views
14

Estoy usando vim para programar. Al comienzo del día, abriré un archivo y procederé a dividir un par de ventanas y abrir algunos archivos en los buffers para que estén disponibles. Hasta hace muy poco, esto acaba de funcionar.¿Por qué el forzado de división de ventanas es de solo lectura?

En la última semana o así, sin embargo, algo cambió; uno de mis buffers grabables se está cambiando a solo lectura y no tengo idea de por qué. Aquí está la secuencia de comandos:

  1. abierto fileA.h
  2. vsplit ./
  3. abierta fileA.cpp
  4. Cw Cw para cambiar a la ventana que contiene fileA.h
  5. sp ./

Para ver los pasos 1-4 todas las ventanas son editables. Cuando ejecuto el paso 5, la nueva ventana de exploración de archivos es de solo lectura (como se esperaba), pero ahora la ventana que contiene fileA.cpp también está marcada como readonly. fileA.h aún se puede editar. ¿Por qué está pasando esto?

para confundirme aún más, si no hago el paso 4 no hay problemas (es decir, he dividido la ventana sosteniendo fileA.cpp en lugar de fileA.h). Además, si hago 'sp fileB.h' en el paso 5 en lugar de dividirlo primero en un explorador de archivos, no hay problemas.

+2

¿cuáles son los plugins que está utilizando? En general, trate de eliminar plugins interferentes. Supongo que estás usando algo como NERDTree e interfiere con las asignaciones de otros plugins – sehe

+0

¿Todavía sucede con 'vim -u NONE'? Si no, @sehe probablemente tenga razón. – ephemient

Respuesta

34

Parece que esto podría ser un error en el plugin netrw. Probé con varias versiones de netrw con dos construye de Vim 7,3 (MacPorts vim 7,3-353, y MacPorts MacVim “snapshot64” 7,3-390):

  • V140 (incluido en los MacPorts vim: 7,3-353)
    Probado solo con la compilación de MacPorts vim.
  • V141 (del vim.org/scripts netrw page)
  • V142 (desde la página vim.org/scripts netrw)
  • v143 (incluido en MacPorts MacVim: 7,3-390)
    Probado sólo con el DarwinPorts MacVim construir.
  • v144b (pre-lanzamiento de la netrw author’s Vim page)

Puede comprobar la versión netrw activo con :let g:loaded_netrwPlugin.

V140 V142 a través de todo tenía un comportamiento razonable cuando se reproduce el escenario:

  • Sólo el buffer netrw (de sp .; lado derecho, ventana superior) es de sólo lectura.
    El buffer fileA.cpp en la ventana de la izquierda sigue siendo no sólo lectura.

Con v143 y v144b que era capaz de reproducir el comportamiento:

  • Tanto el buffer netrw (lado derecho, ventana superior) y el fileA.cpp memoria intermedia (lado izquierdo) serán de sólo lectura.
  • Adicionalmente (es decir,no informado por el OP, pero aparentemente relacionado), la ventana fileA.cpp en el lado izquierdo se convierte en la ventana activa.
    Normalmente, el lado derecho, la ventana superior (la del sp .) debe estar activa.

La ventana fileA.cpp era originalmente una ventana netrw (de vsp .). Mi suposición es que algo en v143 y v144b es un poco exagerado al restablecer la ventana anterior por alguna razón (probablemente no debería tocar esa ventana en absoluto). sp fileB.h evita el problema al no invocar netrw (es decir, el problema no es con la división de ventanas, sino con algo que hace netrw cuando crea el búfer de listado de directorios).


Si su problema proviene de netrw (es decir, su comportamiento coincide con la descripción de mi, y listado en el directorio tampones que el texto Netrw Directory Listing y (por ejemplo) (netrw v143) en la segunda línea, suponiendo que no haya desactivado la bandera netrw) , entonces es posible que pueda solucionarlo instalando una versión más antigua (?) de netrw (es decir, v142).

netrw está empaquetado como un "archivo vimball". El complemento vimball viene con Vim 7.0 y versiones posteriores. Usted solo obtiene un archivo vimball para instalarlo en el primer directorio en su runtimepath (generalmente ~/.vim).

:e /path/to/netrw.vba.gz 
:so % 
:q 

Si está utilizando pathogen para aislar los plugins Vim (muy recomendable!), Se puede instalar en un directorio de paquete en su lugar:

:e /path/to/netrw.vba.gz 
:UseVimball ~/.vim/bundle/netrw 
:q 
+2

Este es un esfuerzo de análisis, +1 – sehe

+0

Awesome response! Parece que tengo v143 de netrw. Siguiendo tus instrucciones, bajé a 142 y ahora está funcionando. FYI, vi el comportamiento con fileA.cpp acaparamiento de enfoque. Me olvidé de registrar ese detalle. – ryan0270

+0

Gracias Chris por tu excelente respuesta. Ayuda de diagnóstico y una solución detallada: muy útil. –

Cuestiones relacionadas