Aradığınız şeyin bu olduğundan emin değilim, ama belki fzf ve fzf.vim'i deneyebilirsiniz .
Eğer kullanırsanız vim-fişi bir eklenti yöneticisi olarak, tüm bunları yüklemek için yapmanız gerekirken, Gözlerinde farklı şu satırları eklemektir vimrc:
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'
... hatların arasında bir yerde:
call plug#begin('~/.vim/plugged')
ve:
call plug#end()
Sonra yürütün :PlugInstall.
Tarafından sağlanan çeşitli komutlar ve eşlemeler arasında fzf.vim(tek amacı fzfönceden tanımlanmış kaynaklar üzerinden bulanık arama isteyen komutlar ve eşlemeler yüklemek gibi görünen ), komut vardır :Ag.
Kullanabilmek için, shell komutunu ag kurmanız gerekir . Debian tabanlı dağıtımlarda, aşağıdaki komutla yapılabilir:
apt-get install silversearcher-ag
Github'daki proje MacOS'a nasıl yükleneceğini açıklıyor:
brew install the_silver_searcher
:Agetrafında bir sarıcıdır $ agve geçerli dizinin dosyalarında (yazarken görüntülenen desen) bulanık arama yapmanızı sağlar :pwd. Maçlar her tuşa basıldıktan sonra güncellenir.
Yapabilirsin:
- ile eşleşir yoluyla kez ileri gidiş ve geri
C-nveC-p
- ile önceki / sonraki birine Geçerli eşleşmeyi hareket seçmek
Tab/ 'S-Tab
- seçmek veya tüm maçları seçimini
M-aveyaM-d
Bir veya birkaç eşleşme seçerseniz, Enter tuşuna bastıktan sonra, hızlı düzeltme listesini doldururlar. Buradan :cnextve gibi varsayılan Vim komutları / eşlemeleri ile gezinebilirsiniz :cprevious.

Tarafından yüklenen tüm komutlara bir önek eklemek fzf.vimve mevcut komutları geçersiz kılmaktan kaçınmak istiyorsanız, bunu aşağıdakilere ekleyebilirsiniz vimrc:
let g:fzf_command_prefix = 'your_prefix'
FzfÖnek olarak kullanıyorum , bu yüzden yazmadım :Agama :FzfAg.
git grepBunun yerine kullanmayı tercih ederseniz ag, etrafına kendi özel paketleyicinizi kurabilirsiniz :GGrep, örneğin:
command! -bang -nargs=* GGrep
\ call fzf#vim#grep('git grep --line-number '.shellescape(<q-args>), 0, <bang>0)
Açıklandı :h fzf-vim-customization.
Ayrıca eğer fzftmux bir bölmesini açılır ve yerine tüm ekranı alır tercih ediyorum, tüm komutlarına bir patlama ekleyebilirsiniz ( :Ag!, :GGrep!, ...).
Son yorumunuzda söylediğiniz gibi , varsayılan olarak fzfkabuğunuzun yapılandırmasını değiştirir. Örneğin, kullanırsanız bash, aşağıdaki satırı ekler ~/.bashrc:
[ -f ~/.fzf.bash ] && source ~/.fzf.bash
Bu dosyayı kaynaklayacaktır ~/.fzf.bash. İkincisi bazı kodlar içerir:
# Setup fzf
# ---------
if [[ ! "$PATH" == */home/user/.fzf/bin* ]]; then
export PATH="$PATH:/home/user/.fzf/bin"
fi
# Auto-completion
# ---------------
[[ $- == *i* ]] && source "/home/user/.fzf/shell/completion.bash" 2> /dev/null
# Key bindings
# ------------
source "/home/user/.fzf/shell/key-bindings.bash"
Bu kod ortam değişkeni yolunu ekler $PATH: /home/user/.fzf/bin; fzfprogramın bulunduğu klasördür .
Ayrıca 2 başka dosyaya kaynak sağlar:
/home/user/.fzf/shell/completion.bash
/home/user/.fzf/shell/key-bindings.bash
Birincisi tamamlama işlevlerini tanımlarken, ikincisi anahtar bağlantıları kurar.
Maalesef, tuş bağlantıları varsayılan readlineişlevleri geçersiz kılabilir .
Örneğin fzf, işlevi fzf-file-widgetile bağlar C-t. Bu tuş genellikle readline tarafından transpose-charsişlevi yürütmek için kullanılır .
Bunu istemiyorsanız, olası bir çözüm , yapılandırmasını ~/.bashrcsağladıktan sonra fzf, içindeki anahtar bağlantıları geri yüklemek olacaktır . Örneğin, C-teski davranışını korumak istiyorsanız , yani imlecin etrafındaki 2 karakteri transpoze etmek ve fzf-file-widgetbaşka bir anahtara bağlamak , diyelim ki C-x C-t, şu satırları sonuna ekleyebilirsiniz ~/.bashrc:
bind -x '"\C-x\C-t": fzf-file-widget'
bind '"\C-t": transpose-chars'
Aynı şey zshkabuk için de geçerlidir , ancak bir anahtar bağlama yüklemek için sözdizimi biraz farklıdır:
bindkey '^X^T' fzf-file-widget
bindkey '^T' transpose-chars
Alıştığınız kabuk anahtarı bağlarından biri geçersiz kılınmışsa fzf, geri yüklemek istersiniz, ancak yürütülen işlevin tam adı nedir bilmiyorsanız, aşağıdaki şeyi deneyebilirsiniz.
İlk olarak, yapılandırmanızın ~/.bashrckaynağı olan satırı geçici olarak yorumlayın fzf. Ardından, bir terminali yeniden açın ve bind -Pbir Vim arabelleğinde okuyabileceğiniz komutun çıktısına bir göz atın :
bind -P | vim -R -
Emin değilim, ancak readlineanahtar bağlantıların çoğunu veya tamamını görüntülemesi gerektiğini düşünüyorum . C-tAnahtara bağlı readline işlevinin adını arıyorsanız , Vim arabelleğinde arama yaparsınız \\C-t. Ve bağlı olanı M-c(meta / alt tuşu) arıyorsanız, arama yaparsınız \\ec( \eescape anahtarını temsil eder ve M-caynı anahtar kodları üretir gibi görünüyor escape + c).
Aynı şeyi komutun zshçıktısına bakarak da yapabilirsiniz bindkey. Ancak bu sefer ^[meta / alt değiştirici tuşunu, tek bir caret ( ^) karakteri ise kontrol tuşunu temsil eder.
Şu anda, fzfadlarında anahtar kelimeyi içeren işlevleri yürüten 4 anahtar bağlantı buldum . Anahtar dizilerini kullanırlar C-i(ile aynı Tab) C-r, C-tve M-c. Aşağıdaki işlevlere bağlıdırlar:
C-i fzf-completion
C-r fzf-history-widget
C-t fzf-file-widget
M-c fzf-cd-widget
Sistemimde, başlangıçta, readline( bashkomut satırını düzenlemek için kullanılan kütüphane ) bu tuşları şu işlevlere bağladı:
C-i complete
C-r reverse-search-history
C-t transpose-chars
M-c capitalize-word
Ve zle(tarafından kullanılan çizgi editörü zsh), bunları aşağıdakilere bağlar:
C-i expand-or-complete
C-r history-incremental-search-backward
C-t transpose-chars
M-c capitalize-word
ctrl-pya da benzer bir eklenti aradığınız şey. Bunuunite.vimda yapabilmeliyim ama bunu tavsiye etmem çünkü bence oldukça ağır ve hata yaratan bir eklenti.