Taglist не обновляется динамически - PullRequest
0 голосов
/ 11 октября 2019

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

Мой .vimrc файл имеет следующий код:

function UpdateTags()
    silent! execute (":!rm -rf tags cscope.files cscope.out")
    silent! execute (":!ctags -R . *.c *.h *.hpp *.cpp --tag-relative=yes ./ 2>/dev/null")
    silent! execute (":!cscope -b -R") | redraw!
    normal == :cs reset<CR><CR>
    normal == :TlistUpdate<CR>
endfunction

nnoremap <silent> <C-k> :call UpdateTags()<CR>

Я вижу, что теги и файл cscope.out обновлены. Однако я не могу решить эти несколько вещей:

  • Экран мерцает дважды (я перерисовал только один раз в функции)
  • Тег-лист не обновляется. Если я снова выполню команду :TlistUpdate вручную, то у меня появятся новые теги.

Работает следующий код:

function UpdateTags()
        call system ("rm -rf tags cscope.files cscope.out")
        call system ("ctags -R . *.c *.h *.hpp *.cpp --tag-relative=yes ./ 2>/dev/null")
        call system ("cscope -b -R")
        silent cscope reset
        TlistUpdate
endfunction

1 Ответ

1 голос
/ 15 октября 2019

sytem()

Обмен execute с system. Это имеет два преимущества:

  1. Экран не мигает и нуждается в перерисовке из-за того, как работает system
  2. Вы должны иметь возможность использовать silent вместо silent! - последний скрывает любые ошибки

Используйте команды Ex (двоеточие) в качестве команд

normal == как вы делаете вид, что пользователь выполнил == из обычного режима. (Вы можете избежать карт, используя normal!.)

Для запуска, например, :cscope reset или :TlistUpdate, вы просто запускаете их:

function! UpdateTags() abort
  " ...
  cscope reset
  TlistUpdate
  " ...
endfunction
...