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

При контакте с единственным файлом я привык к:

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

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

38
задан Nathan Fellman 16 March 2010 в 19:46
поделиться

4 ответа

У меня есть следующие сопоставления (вдохновленные 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 вернет вас обратно. Вы также можете добавить его в список аргументов с помощью: argadd или создать новый список аргументов с помощью

: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

. Список аргументов также хорошо работает с макросами (см.: Help 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

ММмммммм VIM ПРИЯТНО! ТАК СЕКСУАЛЬНО! :)

10
ответ дан 27 November 2019 в 03:15
поделиться

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

:grep blah *

, а затем сделать

:cn

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

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

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

1
ответ дан 27 November 2019 в 03:15
поделиться

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

:bufdo command

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

:bufdo! %s/FIND/REPLACE/g

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

:bufdo! g/SQL/del

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

:bufdo! set fenc=utf-8

Вышесказанное можно экстраполировать на Windows (:windo), Tabs (:tabdo) и arguments (:argdo). Дополнительную информацию см. в справке по :bufdo.

49
ответ дан 27 November 2019 в 03:15
поделиться

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

:tab sp
:bufdo sp

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

0
ответ дан 27 November 2019 в 03:15
поделиться
Другие вопросы по тегам:

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