Notepad++ 文件过滤器

Posted

技术标签:

【中文标题】Notepad++ 文件过滤器【英文标题】:Notepad++ File Filters 【发布时间】:2011-01-12 09:12:45 【问题描述】:

我想知道是否可以在 Notepad++ 的“在文件中查找”功能的文件过滤器中列出排除项。

例如,以下将在所有文件中将 Dog 替换为 Cat。

找什么:狗

替换为:猫

过滤器:*.*

我想做的是将所有文件中的 Dog 替换为 Cat,除了 .sh 文件中的文件。

这可能吗?

【问题讨论】:

【参考方案1】:

Great answer 来自 littlegreen。 不幸的是 Notepad++ 做不到。

这个经过测试的示例可以解决问题(Python)。 replace 方法感谢Thomas Watnedal:

from tempfile import mkstemp
import glob
import os
import shutil

def replace(file, pattern, subst):
    """ from Thomas Watnedal's answer to SO question 39086 
        search-and-replace-a-line-in-a-file-in-python
    """
    fh, abs_path = mkstemp() # create temp file
    new_file = open(abs_path,'w')
    old_file = open(file)
    for line in old_file:
        new_file.write(line.replace(pattern, subst))
    new_file.close() # close temp file
    os.close(fh)
    old_file.close()
    os.remove(file) # remove original file
    shutil.move(abs_path, file) # move new file

def main():
    DIR = '/path/to/my/dir'

    path = os.path.join(DIR, "*")
    files = glob.glob(path)

    for f in files:
        if not f.endswith('.sh'):
            replace(f, 'dog', "cat")

if __name__ == '__main__':
    main()

【讨论】:

太酷了。然后您可以将脚本添加到 Nppexec 插件中的可执行文件列表中。真正的程序员不需要 GUI :-)【参考方案2】:

我认为 Notepad++ 中不存在“负选择器”之类的东西。

我快速浏览了5.6.6 source code,似乎文件选择机制归结为一个名为getMatchedFilenames()的函数,它递归地遍历某个目录下的所有文件,然后调用以下函数查看文件名是否与模式匹配:

bool Notepad_plus::matchInList(const TCHAR *fileName, const vector<generic_string> & patterns)

    for (size_t i = 0 ; i < patterns.size() ; i++)
    
        if (PathMatchSpec(fileName, patterns[i].c_str()))
            return true;
    
    return false;

据我所知,PathMatchSpec 不允许使用否定选择器。

但是可以输入a list of positive filters。如果您可以使该列表足够长以包含目录中除.sh 之外的所有扩展名,那么您也在那里。

祝你好运!

【讨论】:

使用 PathMatchSpec 排除文件匹配模式,如果模式以“-”开头,例如减号。这需要说两个布尔变量:匹配和排除。该方法不会从循环内返回。最终返回将被 !excluded && 匹配

以上是关于Notepad++ 文件过滤器的主要内容,如果未能解决你的问题,请参考以下文章

notepad++使用正则过滤出中文

notepad++使用正则过滤出中文

notepad++使用正则过滤出中文

Notepad++函数列表的Robot Framework解析

如何查找特定的数字长度,并使用 Notepad++ 删除/过滤其余部分?

Notepad++--过滤数据(正则表达式)