Есть ли плагин или script, чтобы открыть записи ctags на новой вкладке? Я хотел бы навести курсор на функцию, нажать ctrl +] и открыть запись на другой вкладке. Мне также хотелось бы, если бы я визуально выделил запись, чтобы ctrl +] продолжал работать и открывался на новой вкладке vim.
Vim: Открыть тег в новой вкладке
Ответ 1
Вы можете
C-w C-] C-w T
Чтобы достичь этого эффекта
Затем вы также можете отобразить следующее:
:nnoremap <silent><Leader><C-]> <C-w><C-]><C-w>T
Изменить: также, в зависимости от того, что вы действительно хотите, не забывайте, что вы можете открывать теги в предварительном просмотре (:ptag
), например. C-w }. Просто упомянуть об этом в случае...
Ответ 2
Вот два довольно ad-hoc-отображения (в случае, если ваши теги генерируются ctags
):
nnoremap <C-]> :tabnew %<CR>g<C-]>
vnoremap <C-]> <Esc>:tabnew %<CR>gvg<C-]>
Сначала мы открываем текущий буфер на новой вкладке; то мы пытаемся перейти к тегу под курсором (g<C-]>
, который равен :tjump
, перескакивает непосредственно в тег, если имеется только одно совпадение, или содержит список совпадений, если их много).
Плюсы:
Минусы:
- Если вы выйдете из списка совпадений, не выбирая их, вновь созданная вкладка останется открытой.
- то же самое происходит, если совпадений нет вообще
P.S. Не могли бы вы предоставить пример использования для отображения визуального режима?
P.P.S. Если вы создаете теги с cscope (что лучше, чем ctags
) и используйте vim сопоставления, замените приведенные выше сопоставления следующими словами:
nnoremap <C-]> :tabnew %<CR><C-]>
vnoremap <C-]> <Esc>tabnew %<CR>gv<C-]>
Ответ 3
Если кто-то все еще ищет решение. В этом решении, когда не найден тэг, больше не останется пустой вкладки.
function! w:GoToTag(tagWord)
let l:tagfile = &tags
:tabe
execute 'set tags=' . l:tagfile
execute ':silent tjump ' . a:tagWord
let l:tagFilename = expand('%:t')
if l:tagFilename == ''
:tabclose
:tabprevious
endif
endfunction
Ответ 4
Вы можете установить сочетание клавиш, 'g', а затем CONTROL-], в ~/.vimrc следующим образом:
nmap g<C-]> :execute 'tab tag '.expand('<cword>')<CR>
nmap means 'when in normal mode'
g<C-j> is the shortcut, 'g' followed by CTRL-]
execute is a means of executing a command passed as a string
tab tag means "open a new tab and run 'ta'"
expand is used to expansion of a vim item
<cword> means a word the same as used for '*'. See also <cWORD>
Вы можете проверить "tab ta" через: имя тега tab