Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio code 在VScode中,有没有办法在满足某些搜索条件的文件中制作特别版(查找并替换某些字符串)_Visual Studio Code_Ide_Development Environment - Fatal编程技术网

Visual studio code 在VScode中,有没有办法在满足某些搜索条件的文件中制作特别版(查找并替换某些字符串)

Visual studio code 在VScode中,有没有办法在满足某些搜索条件的文件中制作特别版(查找并替换某些字符串),visual-studio-code,ide,development-environment,Visual Studio Code,Ide,Development Environment,我几乎不是VisualStudio代码的高级用户。 我无法设法在已经满足我所需搜索条件的文件中制作特别版(例如:用文本“TEXT1 TEXT2”更改字符串“ABC”)。 我需要的使用示例:在包含字符串“-FI-”的所有文件中,将字符串“ABC”替换为字符串“TEXT1 TEXT2” 有什么方法/功能可以做到吗?我在Windows10上安装了VScode 1.37.1。我想要一些可以在VScode中运行的东西,在最坏的情况下可能需要一些linux的东西来帮助 我已经搜索过了,没有发现任何有用的东西

我几乎不是VisualStudio代码的高级用户。 我无法设法在已经满足我所需搜索条件的文件中制作特别版(例如:用文本“TEXT1 TEXT2”更改字符串“ABC”)。 我需要的使用示例:在包含字符串“-FI-”的所有文件中,将字符串“ABC”替换为字符串“TEXT1 TEXT2”

有什么方法/功能可以做到吗?我在Windows10上安装了VScode 1.37.1。我想要一些可以在VScode中运行的东西,在最坏的情况下可能需要一些linux的东西来帮助

我已经搜索过了,没有发现任何有用的东西。例如,我尝试了如何在搜索和编辑中进行搜索。我没有足够的知识来使用正则表达式


谢谢。

根据澄清意见,我将问题解释为:

  • 我如何在包含字符串“-Fl-”的文件中用“TEXT1 TEXT2”替换“ABC”的所有实例,从给定目录开始,递归地考虑其下的所有文件
我将使用Cygwin shell命令而不是VSCode来解决这个问题

首先,让我们创建一个文件,其中包含包含字符串“-Fl-”的所有文件的名称。在
bash
shell中,使用
cd
转到感兴趣的目录,然后运行:

  $ grep -l -r -- '-Fl-' . > files.txt
分解如下:

  • 在文件中搜索文本
  • -l
    开关打印文件名,而不是匹配行
  • -r
    开关在子目录中递归搜索
  • --
    开关告诉
    grep
    这是最后一个命令行选项,因此后面的单词应被视为参数(即要搜索的文本)。这是必要的,因为我们的搜索文本以
    -
    开头,因此将被视为一个选项
  • -Fl-
    是要搜索的文本(区分大小写;使用
    -i
    选项进行不区分大小写的搜索)
  • grep
    进行搜索的地方,意思是“当前目录”(加上所有文件和子目录,由于
    -r
    而递归)
  • >files.txt
    部分要求将结果写入
    files.txt
继续之前,请在编辑器中打开
files.txt
,或直接将其发送到终端,以验证其是否合理:

  $ cat files.txt
现在我们需要在这个文件列表中进行搜索和替换。仅使用stock shell命令并不容易做到这一点,因此我编写了自己的脚本来实现这一点:

将其另存为名为“跨文件替换”的文件。我通常将这些内容放入
$HOME/scripts
,也称为
~/scripts
,因此我假设您也这样做了(如果需要,请先创建该目录)

现在,返回包含
files.txt的目录并运行:

  perl ~/scripts/replace-across-files 'ABC' 'TEXT1 TEXT2' $(cat files.txt)
这将以交互方式提示您每次出现。使用
y
(或只需输入)分别接受每个文件,
y
接受当前文件中的所有文件,
以进行所有替换

如果您得到
perl:command not found
,则需要首先安装Cygwin

一个可能的问题是:如果任何文件名包含空格,那么这将不起作用,因为
$(cat files.txt)
在将内容放入命令行之前,会在空格边界处拆分
files.txt
。解决此问题的一种方法是使用:

分解如下:

  • cat files.txt
    files.txt
    的内容作为其输入提供给下一个命令
    xargs
  • xargs
    将其输入添加到给定的命令行并运行它
  • -d'\n'
    告诉
    xargs
    在换行符边界分割输入,而不是任何空格
  • -f
    告诉
    跨文件替换
    以非交互方式执行所有替换。这是必要的,因为由于
    xargs
    的工作方式,每次更换的提示都不起作用

当您说“在所有包含字符串'-FI-'的文件中”,您的意思是字符串出现在文件名或文件内容中吗?我的意思是出现在文件内容中。在这种情况下,VSCode本身无法做到这一点。你看过可用的吗?另外,您是否只对在VSCode内部工作的解决方案感兴趣,还是可以使用完全独立于VSCode的命令行?如果是这样,基于的解决方案是否可以接受,或者它必须只使用
cmd.exe
或Powershell吗?我没有看到扩展,是的,Cygwin的某些功能可以帮助您,我已经安装了它,但我不是Linux专家。谢谢你的回答,这正是我需要的。
  $ cat files.txt | xargs -d '\n' perl ~/scripts/replace-across-files -f 'ABC' 'TEXT1 TEXT2'