如何在完成期间阻止vim扩展?

时间:2010-10-12 20:15:38

标签: vim tab-completion

我在使用vim的macbook上,为了简单起见,我打算让~/some_file.py~/some_other_file.py~/user.py打开。在Mac上,~展开为/Users/<username>。因此,如果我输入:b user然后按Tab键展开,则会浏览每个文件,而不是直接转到~/user.py

有什么方法可以阻止这种行为吗?

2 个答案:

答案 0 :(得分:0)

我无法在linux下重现你的问题(在我的vim完成列表中没有解决了波形符,因此:b home~/home.py之前给了我~/some_file.py,但是......

尝试输入:b user,然后按Shift + Tab键完成。在这种情况下,我的vim(如果重要的话,7.2.442)完成了最后一场比赛,这就是你想要的。

答案 1 :(得分:0)

由于似乎无法更改Vim内置缓冲区完成,我唯一可以建议的(除了打开这些文件已经在主目录中)是定义你自己的:b命令完成。它可能是这样的:

function! CustomBufferComplete(a, l, p)
    let buf_out = ''
    redir => buf_out
    silent buffers
    redir END

    let buf_list = map(split(buf_out, "\n"), 'substitute(v:val, ' .
    \               '''^.*"\%(\~[/\\]\)\?\([^"]\+\)".*$'', "\\1", "g")')
    return join(buf_list, "\n")
endfunction

command! -nargs=1 -complete=custom,CustomBufferComplete B b <args>

(请注意,它会在返回完成列表之前切断路径的~/部分。)