Vim NERDTree:仅显示 .txt 文件?

7
使用 NERDTree 插件,我想只查看 *.txt 文件。虽然有一个 NERDTreeIgnore 变量,但我想要类似于 NERDTreeWhitelistFilter 的东西。
有办法让我只看到白名单上的文件吗?
3个回答

5

我一直在研究这个问题,它很有趣。也许你可以尝试使用这个正则表达式来忽略文件?

编辑:我和我的同事交流过了。这是正确的正则表达式(我的原始表达式也会匹配文件名开头的“txt”)。

^(?!.*\.txt$).*

1
我认为这是正确的做法。忽略所有不以txt结尾的内容,换句话说。 - sidyll
没有起作用。我输入了 :let NERDTreeIgnore=^(?!.*\.txt$).*,但是它给出了以下错误:E15: Invalid expression: ^(?!.*\.txt$).* - Alexander Bird
http://stevereads.com/weblog/2007/03/26/vim-and-negative-lookaheadlookbehindlookaround/ 展示了如何使用vim查找回溯。当关注NERDTree时,我手动搜索 ^\(.*\.txt$\)\@!.* ,然后按下 n 键将跳过每一行——除了 txt 文件,这正是我想要的。但是,当我键入 :let NERDTreeIgnore=^\(.*\.txt$\)\@!.* 时,它会给出与前面评论相同的错误。所以我们已经用“vim语言”编写了正则表达式,但似乎无法将NERDTreeIgnore设置为该表达式(或其他任何内容),所以我肯定做错了些什么。 - Alexander Bird
啊啊啊!我终于把变量设置正确了,但它仍然不起作用。我输入了 :let NERDTreeIgnore=['^\(.*\.txt$\)\@!.*'] (并检查了三次以确保我输入正确),但刷新后什么也没有显示。但手动搜索该正则表达式是有效的(请参见上一篇帖子)。我输入了 :let NERDTreeIgnore=['resx'],它正确地忽略了所有 .resx 文件 :(. 这太难了。 - Alexander Bird
但是如何忽略除了以'.cpp'或'.h'结尾的任何文件。我尝试使用NERDTreeIgnore = ['^(..cpp\ | h $)\ @!.'],但它不起作用。我还希望这个正则表达式不要忽略目录。 - Aylwyn Lake

4
这是您想要的内容:
:let NERDTreeIgnore += ['\(\.txt\)\@<!$[[file]]']

$[[file]] 是什么意思?我在哪里可以获取相关信息?谢谢您的回复。 - Aylwyn Lake
@AylwynLake:请在你的vim中输入:help 'NERDTreeIgnore' - kev
是的,我已经查看了帮助文件。并且没有定义任何[file]。也许我的4.2.0版本不包含这个关键字? - Aylwyn Lake
1
@AylwynLake请查看https://github.com/scrooloose/nerdtree/blob/master/doc/NERD_tree.txt - kev
非常感谢。我从http://www.vim.org/scripts/script.php?script_id=1658下载了它,但那个版本没有提供这个功能。我的问题已经解决了。 - Aylwyn Lake

0

基于@kev的优秀回答,你也可以制作一个切换函数。


function NERDRefreshIfOpened()
    if g:NERDTree.IsOpen()
            :NERDTreeRefreshRoot
    endif
endfunction

function NERDTxtOnlyToggle()
    let regex='\(\.txt\)\@<!$[[file]]'
    if index(g:NERDTreeIgnore, regex) >= 0
        call filter(g:NERDTreeIgnore, {idx, val -> val != regex})
        call NERDRefreshIfOpened()
    else
        let g:NERDTreeIgnore += [regex]
        call NERDRefreshIfOpened()
    endif
endfunction

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接