Bagaimana cara grep dalam output perintah ex?

10

Bagaimana seseorang mencari pola dalam output perintah ex? Misalnya, bagaimana mencari pola nama file di output :scriptnamesperintah? Dalam bantuan untuk semua rasa grepdan vimgrephanya ada {file}sebagai tempat untuk melakukan pencarian.

Al Berger
sumber

Jawaban:

6

Anda bisa melakukannya:

:redir => scriptn | sil exe 'scriptnames' | redir end | echo(system('grep pattern',scriptn))

Apa fungsinya:

:redir => scriptn "redirect following output to variable scriptn :sil exe 'scriptnames' "silently execute scriptnames :redir end "end the redirection :echo(system('grep pattern',scriptn)) "echo the call of grep witht that input with the pattern `pattern`

edi9999
sumber
8

The :filterperintah adalah pendekatan sederhana, satu-line untuk ini.

:filter /indent/ scriptnames

Akan menunjukkan hanya garis yang cocok dengan pola indentdari output :scriptnamesperintah.


Saya melihat :redirsolusi berorientasi untuk pertanyaan seperti ini sering, yang baik-baik saja dan menawarkan banyak kekuatan dan pilihan, tetapi saya merasa mereka agak berlebihan ketika lebih sering daripada tidak, Anda hanya perlu dengan cepat memeriksa apakah ada sesuatu di sana. :filternyaman digunakan pada saat mati sederhana.

ZeroKnight
sumber
1
ini lebih bersih dan lebih ringkas.
jdhao
Memang, ini harus menjadi jawaban yang diterima. (Belajar banyak dari jawaban edi9999, oleh karena itu upvote.)
toraritte
3

Pertama, Anda perlu mengambil output scriptnamesdan memasukkannya ke dalam buffer.

Anda dapat menggunakannya :rediruntuk itu:

:redir @a       " redirect output of following ex commands to register a
:scriptnames    " press G to get to the end of the output if it's too long
:redir END      " end the redirection
:vnew           " new buffer in vertical window
:put a          " put content of register
/pattern        " search for 'pattern'

Yang mengatakan, :scriptnameoutput yang terlalu panjang untuk dipindai dengan mata Anda sendiri mungkin merupakan gejala dari masalah yang lebih dalam.

romainl
sumber
Setuju dengan kalimat terakhir Anda. Jika outputnya selama itu, pemfilteran harus dilakukan langsung dari baris perintah, bukan dari dalam ex.
Wildcard
Maaf, tidak mengerti maksud Anda tentang daftar yang terlalu panjang. Misalnya sintaksis ada dalam daftar 10 file, nerdtree 13 file lainnya, dll.
Al Berger
2
Jika output Anda :scriptnameslebih panjang dari Magna Carta, Anda mungkin mempertimbangkan untuk menginstal scriptease Tim Pope . Ini menyediakan fungsi :Scriptnamesyang menempatkan semua sampah itu dalam daftar perbaikan cepat. Di sana Anda dapat mencarinya ke isi hati Anda, menyimpannya ke file, atau pergi ke skrip yang sesuai.
Sato Katsura
@AlBerger, daftar yang terlalu panjang berarti terlalu banyak plugin dan / atau plugins terlalu besar atau ditulis dengan buruk. 13 file untuk satu plugin terlalu banyak.
romainl
Apakah Anda menyarankan agar NERDTreemeletakkan semua fungsinya dalam satu file, agar outputnya :scriptnamessingkat? Apakah itu membuatnya menjadi plugin tertulis yang lebih baik?
Sato Katsura