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
:Ag
etrafında bir sarıcıdır $ ag
ve 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-n
veC-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-a
veyaM-d
Bir veya birkaç eşleşme seçerseniz, Enter tuşuna bastıktan sonra, hızlı düzeltme listesini doldururlar. Buradan :cnext
ve gibi varsayılan Vim komutları / eşlemeleri ile gezinebilirsiniz :cprevious
.
Tarafından yüklenen tüm komutlara bir önek eklemek fzf.vim
ve 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 :Ag
ama :FzfAg
.
git grep
Bunun 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 fzf
tmux 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 fzf
kabuğ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
; fzf
programı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 readline
işlevleri geçersiz kılabilir .
Örneğin fzf
, işlevi fzf-file-widget
ile bağlar C-t
. Bu tuş genellikle readline tarafından transpose-chars
işlevi yürütmek için kullanılır .
Bunu istemiyorsanız, olası bir çözüm , yapılandırmasını ~/.bashrc
sağladıktan sonra fzf
, içindeki anahtar bağlantıları geri yüklemek olacaktır . Örneğin, C-t
eski davranışını korumak istiyorsanız , yani imlecin etrafındaki 2 karakteri transpoze etmek ve fzf-file-widget
baş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 zsh
kabuk 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 ~/.bashrc
kaynağı olan satırı geçici olarak yorumlayın fzf
. Ardından, bir terminali yeniden açın ve bind -P
bir Vim arabelleğinde okuyabileceğiniz komutun çıktısına bir göz atın :
bind -P | vim -R -
Emin değilim, ancak readline
anahtar bağlantıların çoğunu veya tamamını görüntülemesi gerektiğini düşünüyorum . C-t
Anahtara 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
( \e
escape anahtarını temsil eder ve M-c
aynı 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, fzf
adları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-t
ve 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
( bash
komut 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-p
ya da benzer bir eklenti aradığınız şey. Bunuunite.vim
da yapabilmeliyim ama bunu tavsiye etmem çünkü bence oldukça ağır ve hata yaratan bir eklenti.