Подтвердить что ты не робот

Vim, просматривающий все существующие буферы

При работе с одним файлом я использую:

/blah
do some work
n
do some work
n
do some work

Предположим теперь, что я хочу найти некоторый шаблон по всем буферам, загруженным в Vim, выполнить некоторую работу над ними и двигаться дальше. Какие команды я использую для этого рабочего потока?

4b9b3361

Ответ 1

У меня есть следующие сопоставления (вдохновленные Vimperator), которые облегчают переключение предыдущего/следующего буфера.

nmap <C-P> :bp<CR>
nmap <C-N> :bn<CR>

Это хорошо работает с 'n'. Когда вы закончите работу с вашим файлом, просто нажмите CTRL-n, прежде чем снова набрать n, и вы выполните поиск в следующем буфере. Повторите, пока не пройдете все буферы.


Другим способом работы со многими файлами является список аргументов.

Он содержит любые файлы, переданные в качестве параметров при запуске vim (например: vim someFile.txt someOtherFile.py). Файл в [скобках] - это текущий файл.

:args
[someFile.txt] someOtherFile.py

: n приведет вас к следующему файлу в списке и: N вернет вас. Вы также можете добавить в argslist: argadd или создать новый список args с помощью

:n some.py files.py you.py want.py to.py work.py with.py
or to open all *.py files recursively from some project.
:n ~/MyProjects/TimeMachine/**/*.py

Список args хорошо работает с макросами (см. справку q), если у вас есть аналогичные изменения в ваших файлах. Просто запишите свой макрос в первый файл, закончите с помощью: n, чтобы перейти к следующему файлу, и прекратите запись.

qq/searchForSomethingAndDoStuffOrWhatever:nq

Затем запустите свой макрос через все файлы (6 @q), посмотрите, чтобы все прошло хорошо, и закончите с: wall.


Это зависит от того, что вы хотите сделать. Если у вас просто одно изменение одинаково для многих файлов (и это только те, которые вы загрузили), мне также нравится команда: ba (: tabdo sp). Это очень быстро, и вы можете видеть, что происходит.

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

CTRL-w v :b someFile
:sp anotherFile
...
:windo :%s/foo/bar/g

Я действительно рекомендую FuzzyFinder, это облегчает вашу жизнь при открытии файлов.

http://www.vim.org/scripts/script.php?script_id=1984

MMmMmmmm VIM НРАВИТСЯ! ТАК СЕКСУАЛЬНО!:)

Ответ 2

Используйте команду bufdo.

:bufdo command

:bufdo command примерно эквивалентен итерации по каждому буфере и выполнению команды. Например, скажем, вы хотите найти и заменить все буферы:

:bufdo! %s/FIND/REPLACE/g

Или предположим, что мы хотим удалить все строки текста, которые соответствуют регулярному выражению "SQL" из всех буферов:

:bufdo! g/SQL/del

Или, может быть, мы хотим установить кодировку файла в UTF-8 на всех буферах:

:bufdo! set fenc=utf-8

Вышеприведенное может быть экстраполировано для Windows (:windo), Tabs (:tabdo) и аргументов (:argdo). См. Справку по: bufdo для получения дополнительной информации.

Ответ 3

Мы можем сделать это с помощью vimgrep и поиска в списке argslist. Но сначала позвольте заполнить наш argslist всеми нашими буферами:

:bufdo :args ## %

Теперь мы можем искать в нашем argslist

:vimgrep /blah/ ##

Где % == the current filepath и ## == the arglist.

Я рекомендую смотреть эти vimcasts, если вы хотите узнать больше: Заполнить arglist, Поиск нескольких файлов с помощью vimgrep

Ответ 4

Вот ваше Евангелие: https://github.com/jeetsukumaran/vim-buffersaurus

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

Ответ 5

Я не верю, что можно расширять 'n' функционально через файлы или буферы. Вы можете использовать

:grep blah *

И затем сделайте

:cn

Чтобы перейти к следующей строке с blah на ней. Это будет переключаться между файлами, но это не так просто. Это более громоздко, чтобы набирать двоеточие все время, и он приведет вас только к линии, а не к слову.

То, что я обычно делаю, это либо открыть файлы, которые я хочу найти в вкладках, а затем использовать "n" и "gt", чтобы перейти к следующей вкладке, когда я дойду до конца файла, или перечислить файлы в команде line, чтобы я мог перейти к следующему файлу с помощью:: wn, когда я закончил его редактирование.

Надеюсь, что это поможет!

Ответ 6

Я бы открыл все буферы на новой вкладке, используя следующие две команды:

:tab sp
:bufdo sp

Затем выполните поиск по каждому файлу один за другим и закройте его окно, когда закончите (используйте :q или :close). Используйте CTRL+W _, чтобы максимизировать каждое окно во время работы с ним. Когда вы закончите, и вы закроете последнее окно, закладка закроется, и вы будете отброшены назад, где бы вы ни были, прежде чем решите выполнить поиск.