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