2012-07-24 40 views
0

假设我在/tmp中,并且我在vim中打开了两个文件:test.txttmpfile.txt。现在我想删除tmpfile.txt缓冲区。我输入:bd tmTAB。我想要的行为是自动完成tmpfile.txt;我得到的行为是tmpfile.txt/tmp/test.log的列表,因为它在目录名称和文件名称上自动完成。我如何让vim像我想要的那样行事?Vim忽略文件完成中的路径名

+0

使用更独特的模式,如':bd fi '。 – romainl 2012-07-24 17:39:35

+0

我认为':bd ./tm '应该可以工作。 – Romeo 2012-07-24 19:09:26

+0

@Romeo,不起作用。如果你看看:help:bd它将bufname作为参数,而不是fname作为:badd – 2012-07-24 19:20:19

回答

1

使用^tm,而不是匹配的文件名的开头。 (你必须在/ tmp中才能正常工作,因此相对路径只是文件名。)

+0

这并没有真正回答“我如何让vim像我想要的那样”,但我会将其标记为接受的,因为我猜这是我将要得到的最好的结果。 – Dan 2012-07-31 02:05:34

+1

@Dan:你可以试试问“如何编写一个vim插件来改变内置命令的完成?”请参阅':help:command'和':help:command-completion'。从本质上讲,你想要定义你自己的完成功能,只包括在文件名的'%:t'上操作。 – idbrii 2012-07-31 02:48:46

+0

够公平的。谢谢你的提示。 – Dan 2012-07-31 18:34:20

1

这是不可能的,列表来自缓冲区列表上的内容,而不是来自本地路径,您可以在任何地方(:pwd),这并不重要,当您按Tab键结果来自在内存列表中,这就是为什么/ tmp出现,因为如果你在/ tmp上,/ tmp不应该再次出现。

,如果你看一下:帮助:BD需要bufname为PARAM,而不是FNAME:BADD