Большие инструменты для нахождения и заменения в файлах?

Я переключаюсь от редактора Windows PHP-specific на VIM, на философии "использования один редактор для всего и изучаю это действительно хорошо".

Однако одна функция, которую я любил в своем редакторе PHP, была "находимая и заменяемая" и возможность. Я мог приблизиться к вещам два пути:

  • Просто найдите. Ищите все файлы в проекте для строки, посмотрите все случаи, перечисленные, и щелчок для дайвинга в тот файл в той строке.
  • Вслепую замените все случаи "нечто" с "панелью".

И конечно я мог использовать GUI для высказывания, какие типы файлов, посмотреть ли в подпапках, было ли это чувствительно к регистру и т.д.

Я пытаюсь приблизить эту способность теперь и пытаюсь соединить ее вместе с ударом, довольно утомительно. Выполнимый, но утомительный.

Кто-либо знает какие-либо большие инструменты для вещей как это для Linux и/или Windows? (Я действительно предпочел бы GUI, если это возможно.) Или сбой, что, сценарий удара, который делает задание хорошо? (Если бы это перечислило бы имена файлов и номера строки и выставочные фрагменты кода, которые были бы большими.)

10
задан a'r 2 March 2010 в 17:34
поделиться

14 ответов

В Vim встроен многофайловый поиск с помощью команды :vimgrep (или :grep для использования внешней программы grep - это единственный вариант до Vim 7).

:vimgrep будет искать в файлах regex и загружать список совпадений в буфер - вы можете перемещаться по списку результатов визуально в буфере или с помощью команд :cnext и :cprev. Он также поддерживает поиск по дереву каталогов с помощью подстановочного знака **. Например,

:vimgrep "^Foo.*Bar" **/*.txt

для поиска строк, начинающихся с Foo и содержащих Bar в любом .txt файле в текущем каталоге.

:vimgrep использует буфер 'quickfix' для хранения результатов. Существует также :lvimgrep, который использует локальный буфер, специфичный для используемого окна.

Vim не поддерживает многофайловую замену из коробки, но на vim.org есть плагины для этого.

7
ответ дан 3 December 2019 в 14:52
поделиться

Блокнот ++ позволяет мне искать и заменять во всей папке (и подпапках), с поддержкой регулярных выражений.

4
ответ дан 3 December 2019 в 14:52
поделиться

очень полезным инструментом поиска является ack . (Ubuntu называет его «ack-grep» в репозиториях и на страницах руководства.)

Краткая версия того, что он делает, представляет собой комбинацию find и grep и более того. сильнее и умнее, чем эта пара.

0
ответ дан 3 December 2019 в 14:52
поделиться

Некоторые разработчики, с которыми я сейчас работаю, клянутся Textpad. У него есть пользовательский интерфейс, а также он поддерживает использование regex'ов - все, что вы ищете, и даже больше.

0
ответ дан 3 December 2019 в 14:52
поделиться

Команда grep -rn "условия поиска" * будет искать указанные условия во всех файлах (включая файлы в подкаталогах) и возвращать совпадающие строки, включая имя файла и номер строки. Вооружившись этой информацией, легко перейти к определенному файлу/строке в VIM.

Как уже упоминалось, sed является чрезвычайно мощным инструментом для поиска и замены.

Вы можете запустить оба этих инструмента из VIM.

0
ответ дан 3 December 2019 в 14:52
поделиться

Notepad ++ поддерживает подсветку синтаксиса на многих языках и поддерживает поиск и замену во всех открытых файлах с регулярным выражением и базовой \ n \ r \ t поддержкой .

0
ответ дан 3 December 2019 в 14:52
поделиться

Я думаю, что для Windows трудно превзойти grepWin - графический интерфейс для мощного и гибкого инструмента grep для Windows. Он ищет и заменяет, знает о регулярных выражениях и тому подобном.

1
ответ дан 3 December 2019 в 14:52
поделиться

Я не знаю, есть ли у вас такая возможность, но если вы загрузите все свои файлы в vim с помощью команды vim *.php , то вы можете

:set hidden

:argdo %s/foo/bar/g => выполнит команду substitue во всех открытых буферах

:wall => запишет все открытые буферы

Или вместо загрузки всех файлов в vim попробуйте :help vimgrep и комбинацию : help argdo и :help argadd

1
ответ дан 3 December 2019 в 14:52
поделиться

посмотрите на sed ... мощный инструмент командной строки, который должен выполнить большую часть того, что вы ищете ... он поддерживает regex, так что найти/заменить будет довольно просто. (man sed)

0
ответ дан 3 December 2019 в 14:52
поделиться

Я не понимаю, почему вы не можете сделать это с помощью VIM.

Just Find

/Foo

Выделяет все экземпляры Foo в файле, и вы можете делать все, что хотите.

Слепо заменить

:% s/Foo/Bar/g

Очевидно, это только верхушка айсберга. У вас есть большая гибкость в области поиска и полная поддержка регулярных выражений для вашего термина. Он может работать не так, как ваш прежний редактор, но я думаю, что ваша первоначальная идея «использовать один редактор» верна.

5
ответ дан 3 December 2019 в 14:52
поделиться

Вы можете использовать perl в командной строке для замены текста в файлах.

perl -p -i".backup" -e "s/foo/bar/g" test.txt
2
ответ дан 3 December 2019 в 14:52
поделиться

Попробуйте sed. Например:

sed -i -e 's/foo/bar/g' myfile.txt
8
ответ дан 3 December 2019 в 14:52
поделиться

Есть ряд инструментов, которые вы можете использовать, чтобы упростить задачу. Во-первых, для поиска всех файлов в проекте из vim вы можете использовать : grep вот так:

:grep 'Function1' myproject/

По сути, это запускает grep и позволяет быстро переходить из / в места, где он был найден.

Ctags - это инструмент, который находит объявления в вашем коде и затем позволяет vim переходить к этим объявлениям. Для этого запустите ctags, затем наведите курсор на вызов функции и затем используйте Ctrl -] . Вот ссылка с дополнительной информацией о ctags:

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

1
ответ дан 3 December 2019 в 14:52
поделиться

Поскольку вы ищете инструмент с графическим интерфейсом, я обычно использую следующие два инструмента. Оба они обладают большой функциональностью, включая поиск по подстановочным кодам, regex, фильтр по типу файла и т.д. Оба они отображают хорошую полезную информацию о попадании в файлы, например, имя файла/строки.

  1. Visual Studio: быстрый, но мощный. Я использую его, если количество файлов огромно (скажем, десятки тысяч...)

  2. pspad: легкий. И хорошая особенность find/replace для pspad в том, что он организует совпадения в разных файлах в древовидной иерархии, что очень наглядно.

2
ответ дан 3 December 2019 в 14:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: