2012-06-11 21 views
10

Chciałbym użyć czegoś takiego jak vils dla buforów vim.Vim - łatwo edytuj wynik filtra

przykład:

a 
b 
a 
b 

szukaj "A" (:g/a/)

wyjściowe:

a 
a 

a następnie zmodyfikować wyjście, jak gdyby były normalne bufora. Kiedy skończę, powinien zmapować linię moich zmian wierszem do oryginalnego bufora.

Jak to zrobić?

PS: Prawdopodobnie mógłbym użyć :%s/../../ lub czegoś w tym stylu, ale nie byłoby to tak wygodne, jak mogłoby być. (Nawet jeśli zakończenie w CTRL + M bufor uda.)

+2

Chciałbym użyć tego do ukrycia komentarzy w plikach konfiguracyjnych. –

+0

Twoja najlepsza opcja to ukrywanie wierszy, w których nie ma szukanego ciągu. –

Odpowiedz

-1

g/../ można łączyć z poleceniami typu

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

się zmieniać na przykład co 'a' do „a.txt ". Zobacz ": h: g"

+1

Nie sądzę, że tego właśnie chce. Myślę, że chce ukryć niektóre linie, edytować pozostałe linie i podczas zapisywania zapisać całe pliki, tj. Z liniami, które są ukryte. – ThiefMaster

1

Dopóki pasujące linie obejmują pojedynczy zakres kolejnych linii, NrrwRgn plugin może pracować dla ciebie.

0

I zazwyczaj skopiować linie na końcu dokumentu

:g/a/t$ 

Jeśli chcesz, możesz ustawić znacznik na 'byłej' end-of-dokument:

:$mark a 

Tak , teraz możesz edytować część dokumentu tak, jak zwykle, włączając zapisanie jej w innym miejscu:

:'a,$d | new | put! 

następujące prace także: można szarpać, dołączając do rejestru a:

:g/a/yank A 

oczywiście, może chcesz wyczyścić zarejestrować przed rozpoczęciem:

:let @a="" 
2

funkcja mówisz brzmi jak occure/narrow-to-region w emacs.

w vim, można wpisać polecenie:

:vimgrep pattern % 

Następnie wpisz :cw otworzyć quickfix-list.

Możesz użyć przycisku myszy lub :cn/:cp, aby przejść do wprowadzania zmian.

+0

Hmm, to nie działa dla mnie ... Lista otwiera się, ale kiedy próbuję ją zmodyfikować, otrzymuję komunikat "E21: Nie mogę wprowadzać zmian," Modyfikowalne "jest wyłączone', a następnie, jeśli robię': set modifiable' aby to zmienić, zmiany nie są odzwierciedlane w oryginalnym pliku. – weronika