Bagaimana menjalankan grep dalam vim secara asinkron?

3

Saya menggunakan Vim dalam pengembangan saya. Juga menggunakan: vimgrep untuk mencari teks dalam file dalam Vim. Tapi ketika vimgrep sedang mencari, saya tidak bisa melakukan apa pun di dalam Vim sampai selesai.

Dahulu kala, saya melihat video di Youtube di mana Anda dapat masuk ke dalam Vim tanpa memblokir editor teks. Sayangnya, tidak dapat menemukan video ini sekarang.

Bagaimana Anda menjalankan grep di dalam vim, menampilkan hasilnya dalam buffer (dalam perbaikan cepat atau apa pun) yang mirip dengan vimgrep tanpa memblokir editor? Ada ide?

Yin Yang
sumber

Jawaban:

3

Itu cara yang rapi sejak vim 8 untuk menggunakan plugin asyncrun.vim untuk menjalankan perintah shell Anda dan membaca output di jendela perbaikan cepat secara realtime.

Setelah terinstal, grep dapat dijalankan secara tidak sinkron dengan ': AsyncRun grep' .Output ditampilkan di jendela perbaikan cepat, Anda dapat menjelajahi output pertandingan dengan segera atau tetap bekerja di vim saat menjalankan.

skywind3000
sumber
1

Ada beberapa cara.

Cara termudah adalah dengan menginstal plugin. Misalnya, http://www.vim.org/scripts/script.php?script_id=3431 memiliki perintah bawaan untuk grep, make, dan beberapa lainnya.

Metode lain (jika Anda tahu python atau Perl atau TCL atau sesuatu seperti itu) adalah menggunakan bahasa skrip eksternal dengan dukungan utas, dan panggil ke dalamnya dengan antarmuka Vim ke bahasa itu. Ini bisa menjadi rumit dan mengandalkan Vim yang dikompilasi dengan dukungan untuk bahasa scripting itu.

Akhirnya, metode bawaan menggunakan fitur "client-server" Vim. Idenya adalah untuk memohon perintah eksternal (dengan system()atau :!start cmd), di mana cmdakan menjalankan pencarian dan kemudian memanggil kembali ke Vim menggunakan --remote-exprdan nama file yang telah ditentukan. Ekspresi yang harus dieksekusi Vim harus berupa fungsi yang membaca file dengan :cfileatau mirip dengan untuk mendapatkan hasil pencarian Anda. Lihat http://vim.wikia.com/wiki/Execute_external_programs_asynchronously_under_Windows#Getting_results_back_into_Vim untuk contoh metode ini yang dikembangkan sepenuhnya. Saya pikir di Linux Anda dapat menggunakan !cmd &metode menjalankan perintah di latar belakang !start cmdseperti pada Windows.

Ben
sumber
0

Pengiriman juga merupakan plugin yang bagus untuk operasi asinkron:

Memanfaatkan kekuatan plugin compiler Vim tanpa terikat oleh sinkronisasi. Kick off> build dan test suites menggunakan salah satu dari beberapa adaptor asinkron (termasuk tmux, layar,> iTerm, Windows, dan mode tanpa kepala), dan ketika pekerjaan selesai, kesalahan akan dimuat dan> diuraikan secara otomatis.

https://github.com/tpope/vim-dispatch

Arjen Dijkstra
sumber
0

Anda dapat melakukan pencarian maju dengan menekan / dan mengetik string yang Anda cari. ? untuk pencarian mundur. Tekan n untuk mengulangi pencarian Anda, N untuk kembali ke hasil pencarian terakhir.

Kyle H
sumber