Was ist Befehl! -bang -nargs = * in einer vimrc-Datei?

9

Ich habe ein Dokument über vim gelesen und der Autor schlägt eine Codezeile vor, die in .vimrc eingefügt werden soll, aber ich habe überhaupt keine Ahnung, was es ist.

command! -bang -nargs=* Find call fzf#vim#grep('rg --column --line-number --no-heading --fixed-strings --ignore-case --no-ignore --hidden --follow --glob "!.git/*" --color "always" '.shellescape(<q-args>), 1, <bang>0)

Also , was ist command!, -bang, -nargs, etc?

Tuyen Pham
quelle

Antworten:

15

Wie immer ist die Hilfe dein bester Freund:

:h :command::

:com[mand][!] [{attr}...] {cmd} {rep}

Definieren Sie einen Benutzerbefehl. Der Name des Befehls lautet {cmd} und sein Ersatztext lautet {rep}. Die Attribute des Befehls (siehe unten) sind {attr}. Wenn der Befehl bereits vorhanden ist, wird ein Fehler gemeldet, es sei denn, a! wird angegeben. In diesem Fall wird der Befehl neu definiert.

Auf diese Weise :command!wird ein neuer Befehl erstellt, den Sie über die Befehlszeile verwenden können. Hier ist der neue Befehl :Findund wird verwendet, um auszuführen, fzf#vim#grep()was ein Aufruf des Plugins ist, fzfder es ermöglicht, einige Dateien unscharf zu finden.

Die anderen Argumente sind in der Dokumentation beschrieben:

  • :h :command-nargs -nargs wird verwendet, um den neuen Befehl in die Lage zu versetzen, ein Argument aufzunehmen :Find arg1
  • :h :command-bang -bangwird verwendet, um den neuen Befehl in die Lage zu versetzen, ein !Like in zu interpretieren:Find!

Das !Recht danach commandwird verwendet, um vim anzuweisen, den Befehl neu zu definieren, falls er bereits vorhanden ist. Auf diese Weise erhalten .vimrcSie keine Fehlermeldung , wenn Sie Ihren Befehl eingeben.

Was die an die fzfFunktion übergebenen Argumente betrifft, lasse ich Sie das Dokument des Plugins lesen, um zu sehen, was sie tun :)

statox
quelle
Sie antworten präziser als doc. Wenn ich also kein fzf installiert habe, das heißt, ich möchte einen einfacheren Befehl definieren, command! -bang -nargs=* Find 'rg --column --line-number --no-heading --fixed-strings --ignore-case --no-ignore --hidden --follow --glob "!.git/*" --color "always"'funktioniert dieser Befehl ?
Tuyen Pham
1
@TuyenPham wahrscheinlich nicht: Der Code in Ihrem Kommentar erstellt einen Befehl, Findder ersetzt wird, rg --column etc...aber rgkein vim-Befehl ist. Er ist ein Argument für die fzfFunktion, sodass Vim einen Fehler ausgibt. Wenn Sie ein Beispiel für einen einfachen Befehl wünschen, sehen Sie sich diesen an : command! DT windo diffthis. Es wird der Befehl erstellt, der :DTkein Argument oder irgendetwas akzeptiert und den Diffmode in vim startet. Der {rep}Teil des Befehls muss ein Ausdruck sein, den vim versteht.
Statox
Ich glaube, was Tuyen in rg meinte, ist ripgrep, ein anderes Werkzeug im Gegensatz zu FZF.
Jimmy MG Lim