Vim'de eşleşen tüm (olmayan) satırları gizle


87

Tüm eşleşen satırları vi veya Vim'de göstermek / gizlemek mümkün müdür? Vurgulamayın, yalnızca bu satırları gösterin.

Örneğin, kelimesini içeren bir metne sahibim ERROR. Yalnızca içeren satırları ERRORve içermeyen satırları nasıl göstermesini sağlarım ERROR?

Tüm eşleşen satırları silmeden ve sonra onu geri almadan bir çözüm var mı ?


Yanıtlar:


109

:globalKomut hakkında bilginiz var mı? Bu istediğini yapıyor mu?

:g/ERROR

ve tam tersi için:

:g!/Error

Veya eşdeğer olarak:

:v/Error

19
Bu pek iyi değil. En alta kaydırdığınızda, komut biter ve her şey tekrar görünür. Bu içerikleri gerçekten saklamıyor.
Kan Li

@KanLi g<tekrar görmek için ya @:da çalıştırıp komut vermediyseniz .
D. Ben Knoble

53

Senin kullanım durumuna bağlı olarak başka bir yaklaşım kullanarak olacağını vimgrep ve onun sonuçlarını Quickfix . Aşağıdakileri yapabilirsiniz:

:vimgrep pattern %mevcut dosyayı arayacak ve sizi ilk arama sonucuna götürecektir. Daha da önemlisi, sonuçları "hızlı düzeltme listesine" de yerleştirir.

:copendaha sonra hızlı düzeltme listesini ayrı bir hızlı düzeltme penceresinde açacaktır. Böylece son vimgrep'inizden tüm satırları içeren ayrı bir pencereniz olacak. Quickfix penceresinin içinde daha sonra Enter tuşuna basabilir veya orijinal dosyanızda karşılık gelen satıra atlamak için bir satıra çift tıklayabilirsiniz.

:coldereski hızlı düzeltme listelerine (eski vimgrep sonuçları) geri dönmenize izin verir. Ve :cnewerdaha yeni arama sonuçlarına gider.

Hızlı düzeltme listesinin çalışırken de güncellendiğini unutmayın :make(bu nedenle, hataları düzeltmek için hızlı düzeltme olarak adlandırılır). Bu nedenle, hızlı düzeltme listesinde "konum listesi" adı verilen bir değişiklik de vardır. Yerine, kullanmak Kullanmak için :lvimgrep, ardından c-öneki komutları yerine l-öneki komutları kullanabilirsiniz - :lopen, :lolder, :lnewer.

Elbette yapabileceğiniz daha çok şey var. Daha :help quickfixfazla bilgi için bakın .

Not: Çizgileri silen ve sonra geri alan bir yaklaşım istemediğinizi söylediniz. Ama g/ERRORcevap olarak işaretlediğiniz için, hızlı ve kirli bir yol olduğunu belirteceğimi düşündüm g!/ERROR/d. Daha sonra kullanarak kolayca geri alabilirsiniz u. Bilginize, komutlarla :set hlsearcheşleşen desenleri vurgulamak için de yapabilirsiniz :g.


1
": G! / ERROR / d" konusundaki ipucu için kabul edilen cevaptan daha iyi.
VinGarcia

Eğer çizgilerle bunu yapabilir değil kalıpla eşleşen?
Jacktose


26

Bunu yapmanın en iyi yolu->

:vimgrep /something/g % | copen

Bu, anahtar kelimeniz için eşleşme listesini açacak ve ayrıca quickfix penceresinde yalnızca eşleşen satırları gösterecektir.

Mevcut dosya dikkate alınmıyorsa,% 'yi dosya yolu ile değiştirin.


1
Mevcut dosyayı dikkate almıyorsanız,% 'yi dosya yolu ile değiştirin.
Shivendra

Eğer çizgilerle bunu yapabilir değil kalıpla eşleşen?
Jacktose

2

kullanmanız durumunda şunları fzfkullanabilirsiniz:

  • :Lines tüm açık dosyalarda
  • :BLines sadece açık arabellekte
  • :Rg [pattern] kullanma ripgrep

1

:vimgrep /something/g % | copenharika çalışıyor. Ayrıca :g/<pattern>/ddesenli silme hatları için kullanılabilir


Bu, bu soruya tam olarak başka bir cevap.
Shivendra

1

Bunu yapmanın bazı hileli kirli yolu:

:w (save)
ggdG (deletes everything)
:.!grep something % (replace current line with grep output)

0

Muhtemelen, / pattern / (grep gibi) içeren satırları gösteren daha az vi vim & / pattern / ile komutu kastediyorsunuz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.