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

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

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

找什么:狗

替换为:猫

过滤器:*.*

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

这可能吗?

【问题讨论】:

    标签: notepad++ filter replace


    【解决方案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 && 匹配
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多