繁体   English   中英

光标下的 Vim 选项卡放置文件

[英]Vim tab drop file under cursor

我正在处理一个 c++ 项目并使用 vim 作为编辑器。

http://vim.wikia.com/wiki/Open_file_under_cursor我知道我可以使用<cw>gf (Ctrl-w gf) 在光标下打开或在新选项卡中选择,这非常好,除了 1 件事,多个可以打开相同文件的选项卡,而如果已经打开,我更喜欢跳转到它

:tab drop可以完成这项工作( http://vim.wikia.com/wiki/Edit_a_file_or_jump_to_it_if_already_open

但是如何将<cw>gf:tab drop结合起来?

Vim 在光标下打开文件提供了一些线索,但它仅适用于光标下,而不适用于选择(可视模式)。

我知道这是一个非常具体的问题,希望有人能提供帮助!

谢谢!

正如您从我的其他答案中发现的那样,模拟<Cw>gf命令很困难,并且有很多极端情况。

另一种获得你想要的方法仍然依赖于原始的<Cw>gf命令(无条件地)打开一个新选项卡,然后检查相同的缓冲区是否已经在另一个选项卡中打开,如果是,则关闭当前(新的)标签页,而是转到另一个。 这会导致一点点闪烁,但应该更加健壮。

nnoremap <C-w>gf <C-w>gf:call FavorExistingTabPage()<CR>

function! FavorExistingTabPage()
    let l:bufNr = bufnr('')
    for l:i in range(1, tabpagenr('$'))
        if l:i == tabpagenr()
            continue    " Skip current.
        endif
        let l:winIndex = index(tabpagebuflist(l:i), l:bufNr)
        if l:winIndex != -1
            " We found the buffer elsewhere.
            if l:i >= tabpagenr()
                let l:i -= 1 " Adapt to removal of tab page before the current.
            endif

            close!

            execute l:i . 'tabnext'
            execute (l:winIndex + 1) . 'wincmd w'
            break
        endif
    endfor
endfunction

注意:这里使用的是它可以找到的第一个标签页中的第一个窗口; 您可以调整算法以更喜欢“最近”的缓冲区而不是当前的缓冲区。

您要求:help 'switchbuf'功能,即usetab值:

 useopen If included, jump to the first open window that contains the specified buffer (if there is one). [...] usetab Like "useopen", but also consider windows in other tab pages.

不幸的是,该选项不适用于<CW>gf命令。 但是,您可以重新映射它以使用:tab drop

:nnoremap <silent> <C-w>gf :execute 'tab drop' fnameescape(expand('<cfile>'))<CR>

要处理不同的工作目录,必须添加当前文件的目录:

:nnoremap <silent> <C-w>gf :execute 'tab drop' fnameescape(expand('%:h') . '/' . expand('<cfile>'))<CR>

但是,绝对目录将不再起作用。 为了处理这些,我们可以先切换到当前目录:

:nnoremap <silent> <C-w>gf :execute 'cd' fnameescape(expand('%:h')) <Bar>  execute 'tab drop' fnameescape(expand('<cfile>'))<CR>

即使这样,我给出的仿真也不是 100% 相同的。 gf使用'path'选项来查找文件, <cfile>不使用。 您必须使用findfile()自己实现该查找。 一个更简单的替代方法是:help c_CTRL-R_CTRL-P ,但它需要路径扩展,并且对于常规文件失败,而gf可以处理两者。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM