Vim - легко редактировать результат фильтра

Я хотел бы использовать что-то вроде vils для буферов vim.

Пример:

a
b
a
b

Найдите "a" (:g/a/)

Выход:

a
a

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

Как это сделать?

PS: Я мог бы использовать :%s/../../ или что-то в этом роде, но это было бы не так удобно, как могло бы быть. (Даже если выполнение в буфере CTRL + F будет работать.)

Ответ 1

Использовать Qfreplace http://github.com/thinca/vim-qfreplace

  • добавить некоторые в quickfix. ex: grep foo */
  • type: Qfreplace on quickfix
  • измените строки так, как вы хотите.
  • : ш

Ответ 2

Функция, о которой вы говорите, звучит как occure/narrow-to-region в emacs.

В vim вы можете ввести следующую команду:

:vimgrep pattern %

Затем введите :cw, чтобы открыть quickfix-список.

Вы можете использовать щелчок мыши или :cn/:cp, чтобы перейти к изменениям.

Ответ 3

Пока соответствующие линии охватывают один ряд последовательных строк, плагин NrrwRgn может работать для вас.

Ответ 4

Я обычно копирую строки в конец документа

:g/a/t$

Если вы хотите, вы можете установить отметку в "предыдущем" конце документа:

:$mark a

Итак, теперь вы можете редактировать часть 'a,$ вашего документа, как обычно, включая сохранение его в другом месте:

:'a,$d | new | put!

Также работает следующее: вы можете yank, добавляя к регистру a:

:g/a/yank A

Конечно, вы можете очистить регистр перед запуском:

:let @a=""

Ответ 5

g/../ можно комбинировать с командами типа

:g/^a/ s/a/a.txt/

чтобы изменить, например, каждый "a" на "a.txt". См. ': H: g'