我正在从一个特定于Windows的PHP编辑器切换到VIM,其理念是“为所有内容使用一个编辑器,并且非常好地学习它。”
但是,我在PHP编辑器中喜欢的一个功能是它的“查找和替换”功能。我可以用两种方式处理事情:
当然,我可以使用GUI来说明哪些类型的文件,是否查看子文件夹,是否区分大小写等。
我现在正在尝试近似这种能力,并试图将它与bash拼凑起来是相当繁琐的。可行,但乏味。
对于Linux和/或Windows,有没有人知道这样的好工具? (如果可能的话,我真的更喜欢GUI。)或者失败了,一个能够很好地完成工作的bash脚本? (如果它列出文件名和行号并显示代码片段,那就太好了。)
答案 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个工具。它们都具有很强的功能,包括野猫匹配,正则表达式,文件类型过滤器等。它们都显示有关文件名/行等文件中命中的有用信息。
Visual Studio:速度快但功能强大。如果文件编号很大(例如,成千上万......)
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”。)
它所做的简短版本是find
和grep
的组合,它比那对更强大,更聪明。