在文件中查找和替换的好工具?

时间:2010-03-02 17:10:36

标签: windows linux bash vim replace

我正在从一个特定于Windows的PHP编辑器切换到VIM,其理念是“为所有内容使用一个编辑器,并且非常好地学习它。”

但是,我在PHP编辑器中喜欢的一个功能是它的“查找和替换”功能。我可以用两种方式处理事情:

  • 找到。搜索项目中的所有文件以查找字符串,查看列出的所有事件,然后单击以在该行中潜入该文件。
  • 用“bar”盲目替换所有出现的“foo”。

当然,我可以使用GUI来说明哪些类型的文件,是否查看子文件夹,是否区分大小写等。

我现在正在尝试近似这种能力,并试图将它与bash拼凑起来是相当繁琐的。可行,但乏味。

对于Linux和/或Windows,有没有人知道这样的好工具? (如果可能的话,我真的更喜欢GUI。)或者失败了,一个能够很好地完成工作的bash脚本? (如果它列出文件名和行号并显示代码片段,那就太好了。)

14 个答案:

答案 0 :(得分:8)

尝试sed。例如:

sed -i -e 's/foo/bar/g' myfile.txt

答案 1 :(得分:7)

Vim使用命令:vimgrep内置多文件搜索(或:grep使用外部grep程序 - 这是Vim 7之前的唯一选项。)

:vimgrep将在文件中搜索正则表达式并将匹配列表加载到缓冲区中 - 然后您可以在缓冲区中以可视方式导航结果列表,或者使用:cnext和{{1命令。它还支持使用**通配符搜索目录树。例如

:cprev

在当前目录下的任何.txt文件中搜索以Foo开头并包含Bar的行。

:vimgrep "^Foo.*Bar" **/*.txt 使用'quickfix'缓冲区来存储其结果。还有:vimgrep使用特定于您正在使用的窗口的本地缓冲区。

Vim不支持开箱即用的多文件替换,但有些插件也会在vim.org上执行此操作。

答案 2 :(得分:5)

我不明白为什么你不能用VIM做到这一点。

Just Find

/Foo

突出显示文件中所有Foo的实例,你可以做你想做的事。

盲目替换

:% s/Foo/Bar/g

显然这只是冰山一角。您可以在搜索范围内获得很大的灵活性,并为您的学期提供完整的正则表达式支持。它可能与您以前的编辑器完全不同,但我认为您原来的“使用一个编辑器”的想法是有效的。

答案 3 :(得分:4)

Notepad++允许我使用正则表达式支持在整个文件夹(和子文件夹)中进行搜索和替换。

答案 4 :(得分:2)

您可以在命令提示符下使用perl替换文件中的文本。

perl -p -i".backup" -e "s/foo/bar/g" test.txt

答案 5 :(得分:2)

由于您正在寻找GUI工具,我通常使用以下2个工具。它们都具有很强的功能,包括野猫匹配,正则表达式,文件类型过滤器等。它们都显示有关文件名/行等文件中命中的有用信息。

  1. Visual Studio:速度快但功能强大。如果文件编号很大(例如,成千上万......)

  2. ,我会使用它
  3. pspad:轻量级。关于pspad的查找/替换的一个很好的特性是,它将在树层次结构中组织不同文件中的命中,这是非常清楚的。

答案 6 :(得分:1)

您可以使用许多工具来简化操作。首先,要从vim搜索项目中的所有文件,您可以使用:grep,如下所示:

:grep 'Function1' myproject/

这实际上运行了一个grep,可以让你快速从/找到它的位置。

Ctags是一个工具,可以在代码中查找声明,然后允许vim跳转到这些声明。为此,请运行ctags,然后将光标放在函数调用上,然后使用Ctrl-]。这是一个包含更多ctags信息的链接:

http://www.davedevelopment.co.uk/2006/03/13/vim-ctags-and-php-5/

答案 7 :(得分:1)

我不知道它是否适合您,但如果您将所有文件加载到vim中 vim *.php 比你可以

:set hidden

:argdo %s/foo/bar/g =>将在所有打开的缓冲区中执行substitue命令

:wall =>将写入所有打开的缓冲区

或者不是将所有文件加载到vim尝试:help vimgrep以及加入:help argdo:help argadd

答案 8 :(得分:1)

对于Windows,我认为grepWin 很难被击败 - 一个用于Windows的功能强大且灵活的grep工具的GUI。它搜索并替换,了解正则表达式,这类东西。

答案 9 :(得分:0)

了解sed ...功能强大的命令行工具,它可以完成您正在寻找的大部分内容......它支持正则表达式,因此您的查找/替换非常简单。 (man sed)

答案 10 :(得分:0)

Notepad ++支持多种语言的语法高亮显示,支持使用regex and basic \n \r \t support查找和替换所有打开的文件。

答案 11 :(得分:0)

命令grep -rn "search terms" *将在所有文件(包括子目录中的文件)中搜索指定的术语,并返回包括文件名和行号在内的匹配行。有了这些信息,很容易跳转到VIM中的特定文件/行。

如前所述,sed对查找和替换非常有用。

您也可以在VIM内部运行这两个工具。

答案 12 :(得分:0)

我目前工作的一些开发人员发誓Textpad。它有一个用户界面,并且还支持使用正则表达式 - 您正在寻找的所有内容。

答案 13 :(得分:0)

非常 有用的搜索工具是ack。 (Ubuntu在存储库和手册页中将其称为“ack-grep”。)

它所做的简短版本是findgrep的组合,它比那对更强大,更聪明。