Fuzzy find di dalam file di Vim

21

Saya suka menggunakan plugin Command-T di Vim untuk melakukan pencarian fuzzy untuk nama file. Saya sangat menyukainya sehingga saya mulai ingin melakukan pencarian fuzzy yang sama untuk string acak dalam buffer terbuka.

Misalnya, jika saya mengedit file CSS yang berisi pemilih seperti #support-main .question .answer-rating, saya saat ini dapat mengetik /support-main .questionuntuk menemukan baris itu.

Saya ingin dapat memanggil pencari fuzzy dan cukup mengetik sesuatu seperti supmaiqueuntuk menemukan baris yang sama (antara lain). Saya tahu saya bisa mengetik /sup.*mai.*queuntuk efek yang sama tetapi mengetik .*itu merusak konsentrasi saya.

Apakah ada cara untuk melakukan ini?

adamesque
sumber

Jawaban:

23

Ada ekstensi "line" di plugin Ctrl-P terbaru untuk vim ( ctrlp ) yang dapat melakukan pencarian garis fuzzy. Anda perlu mengaktifkan ekstensi secara manual. Inilah konfigurasi saya .vimrc:

let g:ctrlp_map = '<c-p>'
let g:ctrlp_cmd = 'CtrlPLastMode'
let g:ctrlp_extensions = ['buffertag', 'tag', 'line', 'dir']

Setelah itu Anda menekan Ctrl-puntuk membawa menu, lalu tekan Ctrl-fbeberapa kali hingga mode baris aktif. Ketikkan string fuzzy Anda sekarang:

masukkan deskripsi gambar di sini

UPDATE 27 Feb 2014

Solusi alternatif yang saya gunakan saat ini adalah menggunakan unite . Untuk melakukan pencarian garis fuzzy Anda perlu sedikit bersatu:

call unite#filters#matcher_default#use(['matcher_fuzzy'])
call unite#filters#sorter_default#use(['sorter_rank'])
call unite#custom#source('file,file/new,buffer,file_rec,line', 'matchers', 'matcher_fuzzy')
nnoremap <C-k> :<C-u>Unite -buffer-name=search -start-insert line<cr>

Sekarang tekan Ctrl-kdan ketik:

masukkan deskripsi gambar di sini

Omong-omong, unite juga dapat melakukan pencarian file fuzzy berdasarkan nama.

UPDATE 03 Agt 2016

Cara lain untuk melakukan pencarian baris adalah menggunakan fzf bersama dengan plugin vim yang menyertainya . Lihat instruksi instalasi di sini: https://github.com/junegunn/fzf.vim#installation

Setelah Anda menginstal fzf dan fzf.vim, Anda dapat menggunakan :BLinesuntuk mencari baris di buffer saat ini:

Output sampel

Anda mungkin telah memperhatikan bahwa itu bukan pencarian fuzzy yang berarti bahwa saya perlu menggunakan spasi. Ini mungkin tidak berhasil bagi Anda.

baltazar
sumber
Ditambahkan bersatu sebagai solusi alternatif.
baltazar
Menambahkan fzf sebagai solusi alternatif.
baltazar
1

Tidak persis apa yang Anda inginkan, tetapi dengan set incsearchpola Anda cocok saat Anda mengetik. Ini tidak benar-benar cocok fuzzy tetapi perasaannya agak mirip.

romainl
sumber
Ah iya. incsearchBagus, tapi bukan yang saya cari.
adamesque