Отличные инструменты для поиска и замены в файлах?
Я перехожу из редактора PHP, специфичного для Windows, к VIM, по философии "использовать один редактор для всего и изучать его очень хорошо".
Тем не менее, одной из функций, которые мне нравились в моем редакторе PHP, была возможность "найти и заменить". Я мог бы приблизиться к двум путям:
- Просто найдите. Найдите все файлы в проекте для строки, посмотрите все перечисленные вхождения и нажмите, чтобы погрузиться в этот файл в этой строке.
- Слегка заменить все вхождения "foo" в "bar".
И, конечно, я мог бы использовать графический интерфейс, чтобы сказать, какие типы файлов следует искать в подпапках, будь то чувствительный к регистру и т.д.
Я пытаюсь аппроксимировать эту способность сейчас, и попытка собрать ее вместе с bash довольно утомительна. Достойная, но утомительная.
Кто-нибудь знает какие-нибудь отличные инструменты для таких вещей, как Linux и/или Windows? (Я бы предпочел, если возможно, графический интерфейс.) Или, если это не так, bash script, который хорошо выполняет эту работу? (Если он будет перечислять имена файлов и номера строк и показывать фрагменты кода, это будет здорово.)
Ответы
Ответ 1
Vim имеет встроенный поиск нескольких файлов, используя команду :vimgrep
(или :grep
для использования внешней программы grep - это единственный вариант до Vim 7).
:vimgrep
будет искать файлы для регулярного выражения и загружать список совпадений в буфер - вы можете либо визуально просмотреть список результатов в буфере, либо с помощью команд :cnext
и :cprev
. Он также поддерживает поиск по дереву каталогов с помощью шаблона **. например
:vimgrep "^Foo.*Bar" **/*.txt
для поиска строк, начинающихся с Foo и содержащих Bar в любом .txt файле в текущем каталоге.
:vimgrep
использует буфер "quickfix" для хранения своих результатов. Существует также :lvimgrep
, который использует локальный буфер, специфичный для используемого вами окна.
Vim не поддерживает замену нескольких файлов из коробки, но есть плагины, которые тоже будут делать это на vim.org.
Ответ 2
Попробуйте sed. Например:
sed -i -e 's/foo/bar/g' myfile.txt
Ответ 3
Я не понимаю, почему вы не можете сделать это с помощью VIM.
Просто найдите
/Foo
Показывает все экземпляры Foo в файле, и вы можете делать то, что хотите.
Слепо заменить
:% s/Foo/Bar/g
Очевидно, это только верхушка айсберга. У вас много гибкости в области поиска и полной поддержки регулярных выражений для вашего термина. Он может работать не так, как ваш прежний редактор, но я думаю, что ваша оригинальная идея "использовать один редактор" является действительной.
Ответ 4
Блокнот ++ позволяет мне искать и заменять всю папку (и подпапки) с поддержкой регулярных выражений.
Ответ 5
Вы можете использовать perl в командной строке для замены текста в файлах.
perl -p -i".backup" -e "s/foo/bar/g" test.txt
Ответ 6
Поскольку вы ищете инструмент GUI, я обычно использую следующие два инструмента. Оба они имеют отличную функциональность, включая сопоставление wildcat, regex, filetype filter и т.д. Оба они отображают хорошую полезную информацию о попадании в такие файлы, как filename/lines.
-
Visual Studio: быстрый, но мощный. Я использую его, если номер файла огромен (скажем, десятки тысяч...)
-
pspad: легкий. И хорошая особенность find/replace для pspad заключается в том, что он будет организовывать хиты в разных файлах в иерархии деревьев, что очень ясно.
Ответ 7
Существует ряд инструментов, которые вы можете использовать, чтобы упростить работу. Во-первых, для поиска всех файлов в проекте из vim вы можете использовать :grep
так:
:grep 'Function1' myproject/
Это, по существу, запускает grep и позволяет вам быстро перейти из/в места, где он был найден.
Ctags - это инструмент, который находит объявления в вашем коде, а затем позволяет vim перейти к этим объявлениям. Для этого запустите ctags, а затем поместите курсор над вызовом функции, а затем используйте Ctrl-]
. Вот ссылка с еще одной информацией ctags:
http://www.davedevelopment.co.uk/2006/03/13/vim-ctags-and-php-5/
Ответ 8
Я не знаю, если это вариант для вас, но если вы загрузите все свои файлы в vim с помощью
vim *.php
чем вы можете
:set hidden
:argdo %s/foo/bar/g
= > выполнит команду substitue во всех открытых буферах
:wall
= > будет записывать все открытые буферы
Или вместо загрузки всех ваших файлов в vim попробуйте :help vimgrep
и cominbation :help argdo
и :help argadd
Ответ 9
Для Windows я считаю, что grepWin трудно побить - графический интерфейс для мощного и гибкого инструмента grep для Windows. Он ищет и заменяет, знает о регулярных выражениях, такого рода вещи.
Ответ 10
Посмотрите на sed... мощный инструмент командной строки, который должен выполнить большую часть того, что вы ищете... его поддерживает регулярное выражение, поэтому ваш поиск/замена довольно прост.
(мужчина)
Ответ 11
Notepad ++ поддерживает подсветку синтаксиса на многих языках и поддерживает поиск и замену во всех открытых файлах с помощью регулярное выражение и базовая поддержка\n\r\t.
Ответ 12
Команда grep -rn "search terms" *
будет искать указанные термины во всех файлах (в том числе в подкаталогах) и будет возвращать соответствующие строки, включая имя файла и номер строки. Вооружившись этой информацией, легко перейти к конкретному файлу/строке в VIM.
Как уже упоминалось ранее, sed
чрезвычайно эффективен для поиска и замены.
Вы также можете запускать оба этих инструмента изнутри VIM.
Ответ 13
Некоторые разработчики, с которыми я сейчас работаю, ругаются Textpad. Он имеет пользовательский интерфейс, а также поддерживает использование регулярных выражений - все, что вы ищете, и многое другое.
Ответ 14
Полезный инструмент поиска очень ack
. (Ubuntu ссылается на него как "ack-grep" в репозиториях и man-страницах.)
Короткий вариант того, что он делает, представляет собой комбинацию find
и grep
, более мощную и интеллектуальную, чем эта пара.