Ich bin mir nicht sicher, ob Sie danach suchen, aber vielleicht könnten Sie es mit fzf und fzf.vim versuchen .
Wenn Sie vim-plug als Plugin-Manager verwenden, müssen Sie zur Installation nur die folgenden Zeilen hinzufügen vimrc
:
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'
... irgendwo zwischen den Zeilen:
call plug#begin('~/.vim/plugged')
und:
call plug#end()
Dann ausführen :PlugInstall
.
Unter den verschiedenen Befehlen und Zuordnungen, die von bereitgestellt werden fzf.vim
(deren einziger Zweck anscheinend darin besteht, Zuordnungen und Befehle zu installieren, die fzf
eine Fuzzy-Suche in vordefinierten Quellen erfordern), befindet sich der Befehl :Ag
.
Um es verwenden zu können, müssen Sie das Shell-Kommando ag installieren . Auf debian-basierten Distributionen kann dies mit dem folgenden Befehl erfolgen:
apt-get install silversearcher-ag
Das Projekt auf Github erklärt, wie es auf MacOS installiert wird:
brew install the_silver_searcher
:Ag
ist ein Wrapper um $ ag
und ermöglicht Ihnen die Fuzzy-Suche nach einem Muster in den Dateien des aktuellen Verzeichnisses (das bei der Eingabe angezeigt wird :pwd
). Die Übereinstimmungen werden nach jedem Tastendruck aktualisiert.
Du kannst:
- vorwärts und rückwärts durch die Übereinstimmungen mit
C-n
und blätternC-p
- wähle das aktuelle Spiel aus und gehe mit
Tab
/ zum nächsten / vorherigenS-Tab
- Wählen Sie alle Übereinstimmungen mit
M-a
oder aus oder abM-d
Wenn Sie eine oder mehrere Übereinstimmungen auswählen und die Eingabetaste drücken, werden diese in der Quickfix-Liste aufgeführt. Von dort aus können Sie mit den Standard-Vim-Befehlen / -Zuordnungen wie :cnext
und durch diese navigieren :cprevious
.
Wenn Sie allen von installierten Befehlen ein Präfix hinzufügen möchten fzf.vim
und vorhandene Befehle nicht überschreiben möchten , können Sie dies hinzufügen in vimrc
:
let g:fzf_command_prefix = 'your_prefix'
Ich benutze Fzf
als Präfix, das ist , warum ich nicht geben , :Ag
aber :FzfAg
.
Wenn Sie es vorziehen, git grep
statt zu verwenden ag
, können Sie anscheinend Ihren eigenen benutzerdefinierten Wrapper :GGrep
wie folgt installieren :
command! -bang -nargs=* GGrep
\ call fzf#vim#grep('git grep --line-number '.shellescape(<q-args>), 0, <bang>0)
Es ist in erklärt :h fzf-vim-customization
.
Auch, wenn fzf
eine Scheibe in tmux öffnet, und Sie würden es vorziehen , den ganzen Bildschirm nimmt stattdessen kannst du einen Knall auf alle Befehle anhängen ( :Ag!
, :GGrep!
, ...).
Wie Sie in Ihrem letzten Kommentar gesagt haben , fzf
ändert sich standardmäßig die Konfiguration Ihrer Shell. Wenn Sie zum Beispiel verwenden bash
, wird die folgende Zeile in Ihrer hinzugefügt ~/.bashrc
:
[ -f ~/.fzf.bash ] && source ~/.fzf.bash
Dies gibt die Datei als Quelle aus ~/.fzf.bash
. Letzteres enthält Code:
# 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"
Dieser Code fügt einen Pfad zur Umgebungsvariable $PATH
: /home/user/.fzf/bin
; Welches ist der Ordner mit dem fzf
Programm.
Es werden auch 2 andere Dateien bereitgestellt:
/home/user/.fzf/shell/completion.bash
/home/user/.fzf/shell/key-bindings.bash
Die erste scheint Vervollständigungsfunktionen zu definieren, während die zweite Tastenkombinationen installiert.
Leider können die Tastenbelegungen die Standardfunktionen überschreiben readline
.
Zum Beispiel fzf
bindet die Funktion fzf-file-widget
zu C-t
. Diese Taste wird normalerweise von readline verwendet, um die transpose-chars
Funktion auszuführen .
Wenn Sie dies nicht möchten, besteht eine mögliche Lösung darin, die Tastenkombinationen in Ihrem wiederherzustellen ~/.bashrc
, nachdem Sie fzf
die Konfiguration vorgenommen haben. Wenn Sie beispielsweise C-t
das alte Verhalten beibehalten möchten, fzf-file-widget
dh die 2 Zeichen um den Cursor herum transponieren und an eine andere Taste binden möchten C-x C-t
, können Sie die folgenden Zeilen am Ende hinzufügen ~/.bashrc
:
bind -x '"\C-x\C-t": fzf-file-widget'
bind '"\C-t": transpose-chars'
Das Gleiche gilt für die zsh
Shell, aber die Syntax zum Installieren einer Schlüsselbindung ist etwas anders:
bindkey '^X^T' fzf-file-widget
bindkey '^T' transpose-chars
Wenn eine der von Ihnen verwendeten Shell-Schlüsselbindungen überschrieben wurde fzf
, Sie diese wiederherstellen möchten, aber nicht wissen, wie die ausgeführte Funktion genau heißt, können Sie Folgendes versuchen.
~/.bashrc
Kommentieren Sie zunächst in Ihrem vorübergehend die Zeile aus, aus der die fzf
Konfiguration stammt. Öffnen Sie dann ein Terminal erneut und sehen Sie sich die Ausgabe des bind -P
Befehls an, die Sie in einem Vim-Puffer lesen können:
bind -P | vim -R -
Ich bin nicht sicher, aber ich denke, es sollte die meisten oder alle readline
Tastenzuordnungen anzeigen . Wenn Sie nach dem Namen der Readline-Funktion suchen, die an den C-t
Schlüssel gebunden ist, suchen Sie im Vim-Puffer \\C-t
. Und wenn Sie nach der einen suchen würden, die an M-c
(Meta / Alt-Taste) gebunden ist , würden Sie suchen \\ec
( \e
steht für die Escape-Taste und M-c
erzeugt anscheinend die gleichen Schlüsselcodes wie escape + c
).
Sie können dasselbe tun, zsh
indem Sie sich die Ausgabe des bindkey
Befehls ansehen. Diesmal ^[
steht es jedoch für den Meta / Alt-Modifikator, während ein einzelnes Caret ( ^
) für den Steuerschlüssel steht.
Derzeit habe ich 4 Tastenkombinationen gefunden, die Funktionen ausführen, fzf
deren Name das Schlüsselwort enthält . Sie verwenden die Tastenfolgen C-i
(wie Tab
) C-r
,, C-t
und M-c
. Sie sind an folgende Funktionen gebunden:
C-i fzf-completion
C-r fzf-history-widget
C-t fzf-file-widget
M-c fzf-cd-widget
Auf meinem System haben diese Tasten ursprünglich readline
(die Bibliothek, mit bash
der die Befehlszeile bearbeitet wurde) an folgende Funktionen gebunden:
C-i complete
C-r reverse-search-history
C-t transpose-chars
M-c capitalize-word
Und zle
(der von verwendete Zeileneditor zsh
) hat sie gebunden an:
C-i expand-or-complete
C-r history-incremental-search-backward
C-t transpose-chars
M-c capitalize-word
ctrl-p
Sie nach einem ähnlichen Plugin suchen. Beachten Sie, dass diesunite.vim
auch möglich sein sollte, aber ich würde es nicht empfehlen, da es meiner Meinung nach ein ziemlich schweres und fehlererzeugendes Plugin ist.