Notepad++ 记事本++;文件过滤器

Notepad++ 记事本++;文件过滤器,notepad++,filter,replace,Notepad++,Filter,Replace,我想知道是否可以在Notepad++的“在文件中查找”功能的文件过滤器中列出排除项 例如,以下内容将在所有文件中用Cat替换Dog 找到什么:狗 替换为:Cat 过滤器:** 我想做的是在除.sh文件之外的所有文件中用Cat替换Dog 这可能吗?我认为记事本++中不存在类似“负选择器”的东西 我快速查看了,似乎文件选择机制归结为一个名为getMatchedFilenames()的函数,该函数递归地运行在某个目录下的所有文件中,然后调用以下函数以查看文件名是否与模式匹配: bool Notepad

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

例如,以下内容将在所有文件中用Cat替换Dog

找到什么:狗

替换为:Cat

过滤器:**

我想做的是在除.sh文件之外的所有文件中用Cat替换Dog

这可能吗?

我认为记事本++中不存在类似“负选择器”的东西

我快速查看了,似乎文件选择机制归结为一个名为
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;
}
bool Notepad\u plus::matchInList(常量TCHAR*文件名、常量向量和模式)
{
对于(size_t i=0;i
据我所知,不允许使用否定选择器

但是可以进入。如果你能让这个列表足够长,包括目录中除
.sh
以外的所有扩展名,那么你也可以做到这一点

祝你好运

由littlegreen撰写。
不幸的是,记事本++不能做到这一点

这个经过测试的示例将实现这个技巧(Python)<代码>更换
方法由于:


太酷了。然后您可以将脚本添加到Nppexec插件中的可执行文件列表中。真正的程序员不需要GUI:-)例如,如果文件匹配模式以“-”开头,则使用PathMatchSpec排除该模式。这将需要两个布尔变量:匹配和排除。该方法将不会从循环中返回。最终的回报将是!排除和匹配(&M)
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()