2012-01-08 2 views
14

Я использую vim для программирования. В начале дня я открою файл и приступаю к распаду нескольких окон и открываю некоторые файлы в буферы, чтобы они были легко доступны. До недавнего времени это только что сработало.Почему раскол окна форсируется только для чтения?

На прошлой неделе или около того, однако, что-то изменилось; один из моих перезаписываемых буферов переключается на чтение, и я понятия не имею, почему. Вот последовательность команд:

  1. Открыть fileA.h
  2. vsplit ./
  3. открыт fileA.cpp
  4. Cw Cw, чтобы переключиться на окно, содержащее fileA.h
  5. зр ./

Для шагов 1-4 все окна доступны для редактирования. Когда я выполняю шаг 5, новое окно просмотра файлов является readonly (как и ожидалось), но теперь окно, в котором файл fileA.cpp помечен как readonly тоже. fileA.h все еще доступен для редактирования. Почему это происходит?

Чтобы запутать меня еще больше, если я не делаю шаг 4, проблем нет (т. Е. Я разбил окно, содержащее файлA.cpp вместо fileA.h). Кроме того, если я делаю «sp fileB.h» на шаге 5 вместо того, чтобы сначала разбивать на браузер файлов, проблем нет.

+2

какие плагины вы используете? В общем, попробуйте устранить препятствующие плагины. Я предполагаю, что вы используете что-то вроде NERDTree, и это мешает другим сопоставлениям плагина. – sehe

+0

Неужели это происходит с 'vim -u NONE'? Если нет, то, вероятно, это правильно. – ephemient

ответ

34

Похоже, это может быть ошибкой в ​​плагине netrw. Я тестировал несколько версий netrw с двумя сборками Vim 7.3 (MacPorts vim 7.3-353 и MacPorts MacVim «snapshot64» 7.3-390):

  • V140 (входит в MacPorts vim: 7.3-353)
    Протестировано только с помощью сборки MacPorts vim.
  • v141 (от vim.org/scripts netrw page)
  • v142 (от vim.org/scripts netrw страницы)
  • v143 (входит в MacPorts MacVim: 7.3-390)
    Испытано только с MacPorts MacVim строить.
  • v144b (пре-релиз от netrw author’s Vim page)

Вы можете проверить свою активную netrw версию с :let g:loaded_netrwPlugin.

V140 через v142 все было разумное поведение при воспроизведении вашего сценария:

  • Только netrw буфер (от sp .; правая сторона, верхнее окно) только для чтения.
    Буфер fileA.cpp в левом окне остается недоступным для чтения.

С v143 и v144b я был в состоянии воспроизвести свое поведение:

  • И netrw буфер (правая сторона, верхнее окно) и fileA.cpp буфер (левая сторона) становится доступен только для чтения.
  • Дополнительно (т.не сообщается OP, но, похоже, связано), окно fileA.cpp с левой стороны становится активным окном.
    Обычно правая сторона, верхнее окно (одно из sp .) должно быть активным.

Окно fileA.cpp было первоначально окном netrw (от vsp .). Я предполагаю, что кое-что в v143 и v144b немного переусердствует при первоначальном сбросе старого окна (вероятно, это не должно касаться этого окна вообще). sp fileB.h избегает проблемы, не вызывая netrw (т. Е. Проблема заключается не в разбиении окон, а на том, что netrw делает при создании буфера списка каталогов).


Если ваша проблема исходит от netrw (т.е. ваше поведение соответствует моему описанию, и внесения в каталог буферов есть текст Netrw Directory Listing и (например) (netrw v143) на второй линии, если вы не отключили netrw баннер) , то вы можете исправить это, установив более старую (?) версию netrw (т.е. v142).

netrw упакован как «архив vimball». Плагин vimball поставляется с Vim 7.0 и более поздними версиями. Вы просто создаете файл vimball, чтобы установить его в первый каталог в своем runtimepath (обычно ~/.vim).

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

Если вы используете pathogen изолировать плагины Vim (очень рекомендуется!), Вы можете установить его в каталог расслоении вместо:

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

Это часть анализа, +1 – sehe

+0

Удивительный ответ! Похоже, что у меня есть v143 netrw. Следуя вашим инструкциям, я понизился до 142, и теперь он работает. FYI, я видел поведение с захватом фокуса fileA.cpp. Я просто забыл записать эту деталь. – ryan0270

+0

Спасибо Крису за отличный ответ. Диагностическая помощь и подробное решение - очень полезны. –

Смежные вопросы