Почему разбиение окна вызывает только чтение? - PullRequest
14 голосов
/ 09 января 2012

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

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

  1. Открыть файл A.h
  2. всплит ./
  3. открыть файл A.cpp
  4. C-w C-w, чтобы переключиться в окно, содержащее файл A.h
  5. sp ./

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

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

1 Ответ

34 голосов
/ 09 января 2012

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

  • v140 (входит в MacPortsvim: 7.3-353)
    Проверено только с vim build MacPorts.
  • v141 (со страницы vim.org/scripts netrw )
  • v142 (сvim.org/scripts netrw page)
  • v143 (входит в MacPorts MacVim: 7.3-390)
    Протестировано только в сборке MacPorts MacVim.
  • v144b (предварительная версия из страница Vim автора netrw )

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

v140 - v142, все имели разумное поведение при воспроизведении вашего сценария:

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

С v143 и v144b я смог воспроизвести ваше поведение:

  • Оба буфера netrw (справа side, верхнее окно) и буфер 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...