Автообновление NERDTree

1209
Jérôme

Я знаю, как обновить NERDTree вручную удар, Rкогда фокус находится в колонке NERDTree.

Я хотел бы, чтобы это было сделано автоматически.

Если событие необходимо, чтобы вызвать это, пусть оно будет «всякий раз, когда записывает файл».

Кто-то предлагает добавить это в vimrc

nmap <Leader>r :NERDTreeFocus<cr>R<c-w><c-p> 

чтобы сопоставить это с ключом.

Решение может быть сочетание этого и autocmd.

3
Ответ, на который вы ссылаетесь, не имеет положительных отзывов и фактически не работает, потому что синтаксис сопоставления неверен; `\ |` нужно отбросить. Ingo Karkat 7 лет назад 0
Разве я не должен был опубликовать это на http://vi.stackexchange.com/? Должен ли я попросить о миграции? (Я воздержался от публикации на SO, но не прошел весь путь туда ...) Jérôme 7 лет назад 0
У SU меньше вопросов по Vim, но здесь достаточно экспертов, чтобы решить большинство проблем. VI сейчас наиболее активен, за ним следует SO. Попробуйте VI в следующий раз, если только он не имеет отношения к Vim (например, проблема с терминалом или установкой). Ingo Karkat 7 лет назад 0
Исправлен вопрос @IngoKarkat с цитируемой строкой vimrc Jérôme 7 лет назад 0

1 ответ на вопрос

2
Ingo Karkat

Собрав все воедино, можно сделать что-то вроде этого:

autocmd BufWritePost * NERDTreeFocus | execute 'normal R' | wincmd p 

Вы можете добавить дополнительные события autocmd. Тем не менее, имейте в виду, что выше не обрабатывает случай, когда вы уже находитесь в окне NERDTree (но это может быть обработано с условным включением &filetype ==# 'nerdtree'). Затем это также будет работать на такие события, как CursorHold.

Благодарю. Так что это будет обновляться только при записи события, верно? То есть, только когда я `: w` в vim, а не если внешняя программа изменяет файлы. Это оно? Jérôme 7 лет назад 0
Потому что тогда я не понимаю, «когда вы уже находитесь в окне NERDTree». Я пишу файлы из окна редактирования файлов. Не уверен, что могу писать файлы из окна NERDTree. Может быть, это возможно, но не является частью моего рабочего процесса. Jérôme 7 лет назад 0
Autocmd, как написано, должен работать (хотя не проверял). Просто когда вы _добавляете_ другие события (например, `CursorHold`, чтобы обновить, когда Vim бездействует), он разваливается, и вам необходимо выполнить дополнительные проверки. Ingo Karkat 7 лет назад 0
Хорошо, только что проверил [документы] (http://vimdoc.sourceforge.net/htmldoc/autocmd.html). Таким образом, ваша команда работает только при записи файла (событие `BufWritePost`), что я всегда делаю из окна редактирования файла, а не из столбца NERDTree, так что это нормально. Нет такого события, чтобы обнаружить модификацию дерева файлов из другой программы, и `CursorHold` на самом деле этого не делает. Я в порядке с ограничением «только при записи в файл». Я привык писать файлы, чтобы Pylint все равно работал. Jérôme 7 лет назад 0
Недостатком этого, если я сделал это правильно, является то, что он открывает NERDTree, даже если он был закрыт перед операцией. Обычно я не открываю NERDTree при запуске vim, только вручную, в зависимости от моего использования. Jérôme 7 лет назад 0